/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
"use strict";

var $protobuf = require("protobufjs/minimal");

// Common aliases
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;

// Exported root namespace
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});

$root.file_dialogs = (function() {

    /**
     * Namespace file_dialogs.
     * @exports file_dialogs
     * @namespace
     */
    var file_dialogs = {};

    file_dialogs.FileTypeFilter = (function() {

        /**
         * Properties of a FileTypeFilter.
         * @memberof file_dialogs
         * @interface IFileTypeFilter
         * @property {string|null} [name] FileTypeFilter name
         * @property {Array.<string>|null} [extensions] FileTypeFilter extensions
         */

        /**
         * Constructs a new FileTypeFilter.
         * @memberof file_dialogs
         * @classdesc Represents a FileTypeFilter.
         * @implements IFileTypeFilter
         * @constructor
         * @param {file_dialogs.IFileTypeFilter=} [properties] Properties to set
         */
        function FileTypeFilter(properties) {
            this.extensions = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FileTypeFilter name.
         * @member {string} name
         * @memberof file_dialogs.FileTypeFilter
         * @instance
         */
        FileTypeFilter.prototype.name = "";

        /**
         * FileTypeFilter extensions.
         * @member {Array.<string>} extensions
         * @memberof file_dialogs.FileTypeFilter
         * @instance
         */
        FileTypeFilter.prototype.extensions = $util.emptyArray;

        /**
         * Creates a new FileTypeFilter instance using the specified properties.
         * @function create
         * @memberof file_dialogs.FileTypeFilter
         * @static
         * @param {file_dialogs.IFileTypeFilter=} [properties] Properties to set
         * @returns {file_dialogs.FileTypeFilter} FileTypeFilter instance
         */
        FileTypeFilter.create = function create(properties) {
            return new FileTypeFilter(properties);
        };

        /**
         * Encodes the specified FileTypeFilter message. Does not implicitly {@link file_dialogs.FileTypeFilter.verify|verify} messages.
         * @function encode
         * @memberof file_dialogs.FileTypeFilter
         * @static
         * @param {file_dialogs.IFileTypeFilter} message FileTypeFilter message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileTypeFilter.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
            if (message.extensions != null && message.extensions.length)
                for (var i = 0; i < message.extensions.length; ++i)
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.extensions[i]);
            return writer;
        };

        /**
         * Encodes the specified FileTypeFilter message, length delimited. Does not implicitly {@link file_dialogs.FileTypeFilter.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file_dialogs.FileTypeFilter
         * @static
         * @param {file_dialogs.IFileTypeFilter} message FileTypeFilter message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileTypeFilter.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FileTypeFilter message from the specified reader or buffer.
         * @function decode
         * @memberof file_dialogs.FileTypeFilter
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file_dialogs.FileTypeFilter} FileTypeFilter
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileTypeFilter.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file_dialogs.FileTypeFilter();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.name = reader.string();
                        break;
                    }
                case 2: {
                        if (!(message.extensions && message.extensions.length))
                            message.extensions = [];
                        message.extensions.push(reader.string());
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FileTypeFilter message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file_dialogs.FileTypeFilter
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file_dialogs.FileTypeFilter} FileTypeFilter
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileTypeFilter.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FileTypeFilter message.
         * @function verify
         * @memberof file_dialogs.FileTypeFilter
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FileTypeFilter.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                if (!$util.isString(message.name))
                    return "name: string expected";
            if (message.extensions != null && Object.hasOwnProperty.call(message, "extensions")) {
                if (!Array.isArray(message.extensions))
                    return "extensions: array expected";
                for (var i = 0; i < message.extensions.length; ++i)
                    if (!$util.isString(message.extensions[i]))
                        return "extensions: string[] expected";
            }
            return null;
        };

        /**
         * Creates a FileTypeFilter message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file_dialogs.FileTypeFilter
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file_dialogs.FileTypeFilter} FileTypeFilter
         */
        FileTypeFilter.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file_dialogs.FileTypeFilter)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file_dialogs.FileTypeFilter: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file_dialogs.FileTypeFilter();
            if (object.name != null)
                message.name = String(object.name);
            if (object.extensions) {
                if (!Array.isArray(object.extensions))
                    throw TypeError(".file_dialogs.FileTypeFilter.extensions: array expected");
                message.extensions = [];
                for (var i = 0; i < object.extensions.length; ++i)
                    message.extensions[i] = String(object.extensions[i]);
            }
            return message;
        };

        /**
         * Creates a plain object from a FileTypeFilter message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file_dialogs.FileTypeFilter
         * @static
         * @param {file_dialogs.FileTypeFilter} message FileTypeFilter
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FileTypeFilter.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.extensions = [];
            if (options.defaults)
                object.name = "";
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                object.name = message.name;
            if (message.extensions && message.extensions.length) {
                object.extensions = [];
                for (var j = 0; j < message.extensions.length; ++j)
                    object.extensions[j] = message.extensions[j];
            }
            return object;
        };

        /**
         * Converts this FileTypeFilter to JSON.
         * @function toJSON
         * @memberof file_dialogs.FileTypeFilter
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FileTypeFilter.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FileTypeFilter
         * @function getTypeUrl
         * @memberof file_dialogs.FileTypeFilter
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FileTypeFilter.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file_dialogs.FileTypeFilter";
        };

        return FileTypeFilter;
    })();

    file_dialogs.SaveFileDialogReplyBody = (function() {

        /**
         * Properties of a SaveFileDialogReplyBody.
         * @memberof file_dialogs
         * @interface ISaveFileDialogReplyBody
         * @property {file.IFile|null} [file] SaveFileDialogReplyBody file
         */

        /**
         * Constructs a new SaveFileDialogReplyBody.
         * @memberof file_dialogs
         * @classdesc Represents a SaveFileDialogReplyBody.
         * @implements ISaveFileDialogReplyBody
         * @constructor
         * @param {file_dialogs.ISaveFileDialogReplyBody=} [properties] Properties to set
         */
        function SaveFileDialogReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * SaveFileDialogReplyBody file.
         * @member {file.IFile|null|undefined} file
         * @memberof file_dialogs.SaveFileDialogReplyBody
         * @instance
         */
        SaveFileDialogReplyBody.prototype.file = null;

        /**
         * Creates a new SaveFileDialogReplyBody instance using the specified properties.
         * @function create
         * @memberof file_dialogs.SaveFileDialogReplyBody
         * @static
         * @param {file_dialogs.ISaveFileDialogReplyBody=} [properties] Properties to set
         * @returns {file_dialogs.SaveFileDialogReplyBody} SaveFileDialogReplyBody instance
         */
        SaveFileDialogReplyBody.create = function create(properties) {
            return new SaveFileDialogReplyBody(properties);
        };

        /**
         * Encodes the specified SaveFileDialogReplyBody message. Does not implicitly {@link file_dialogs.SaveFileDialogReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file_dialogs.SaveFileDialogReplyBody
         * @static
         * @param {file_dialogs.ISaveFileDialogReplyBody} message SaveFileDialogReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SaveFileDialogReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.file != null && Object.hasOwnProperty.call(message, "file"))
                $root.file.File.encode(message.file, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified SaveFileDialogReplyBody message, length delimited. Does not implicitly {@link file_dialogs.SaveFileDialogReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file_dialogs.SaveFileDialogReplyBody
         * @static
         * @param {file_dialogs.ISaveFileDialogReplyBody} message SaveFileDialogReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SaveFileDialogReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a SaveFileDialogReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file_dialogs.SaveFileDialogReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file_dialogs.SaveFileDialogReplyBody} SaveFileDialogReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SaveFileDialogReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file_dialogs.SaveFileDialogReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.file = $root.file.File.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a SaveFileDialogReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file_dialogs.SaveFileDialogReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file_dialogs.SaveFileDialogReplyBody} SaveFileDialogReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SaveFileDialogReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a SaveFileDialogReplyBody message.
         * @function verify
         * @memberof file_dialogs.SaveFileDialogReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        SaveFileDialogReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.file != null && Object.hasOwnProperty.call(message, "file")) {
                var error = $root.file.File.verify(message.file, long + 1);
                if (error)
                    return "file." + error;
            }
            return null;
        };

        /**
         * Creates a SaveFileDialogReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file_dialogs.SaveFileDialogReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file_dialogs.SaveFileDialogReplyBody} SaveFileDialogReplyBody
         */
        SaveFileDialogReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file_dialogs.SaveFileDialogReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file_dialogs.SaveFileDialogReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file_dialogs.SaveFileDialogReplyBody();
            if (object.file != null) {
                if (!$util.isObject(object.file))
                    throw TypeError(".file_dialogs.SaveFileDialogReplyBody.file: object expected");
                message.file = $root.file.File.fromObject(object.file, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a SaveFileDialogReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file_dialogs.SaveFileDialogReplyBody
         * @static
         * @param {file_dialogs.SaveFileDialogReplyBody} message SaveFileDialogReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        SaveFileDialogReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.file = null;
            if (message.file != null && Object.hasOwnProperty.call(message, "file"))
                object.file = $root.file.File.toObject(message.file, options, q + 1);
            return object;
        };

        /**
         * Converts this SaveFileDialogReplyBody to JSON.
         * @function toJSON
         * @memberof file_dialogs.SaveFileDialogReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        SaveFileDialogReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for SaveFileDialogReplyBody
         * @function getTypeUrl
         * @memberof file_dialogs.SaveFileDialogReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        SaveFileDialogReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file_dialogs.SaveFileDialogReplyBody";
        };

        return SaveFileDialogReplyBody;
    })();

    file_dialogs.SaveDialogArgs = (function() {

        /**
         * Properties of a SaveDialogArgs.
         * @memberof file_dialogs
         * @interface ISaveDialogArgs
         * @property {string|null} [title] SaveDialogArgs title
         * @property {string|null} [btnLabel] SaveDialogArgs btnLabel
         * @property {string|null} [defaultPath] SaveDialogArgs defaultPath
         * @property {Array.<file_dialogs.IFileTypeFilter>|null} [filters] SaveDialogArgs filters
         */

        /**
         * Constructs a new SaveDialogArgs.
         * @memberof file_dialogs
         * @classdesc Represents a SaveDialogArgs.
         * @implements ISaveDialogArgs
         * @constructor
         * @param {file_dialogs.ISaveDialogArgs=} [properties] Properties to set
         */
        function SaveDialogArgs(properties) {
            this.filters = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * SaveDialogArgs title.
         * @member {string} title
         * @memberof file_dialogs.SaveDialogArgs
         * @instance
         */
        SaveDialogArgs.prototype.title = "";

        /**
         * SaveDialogArgs btnLabel.
         * @member {string} btnLabel
         * @memberof file_dialogs.SaveDialogArgs
         * @instance
         */
        SaveDialogArgs.prototype.btnLabel = "";

        /**
         * SaveDialogArgs defaultPath.
         * @member {string} defaultPath
         * @memberof file_dialogs.SaveDialogArgs
         * @instance
         */
        SaveDialogArgs.prototype.defaultPath = "";

        /**
         * SaveDialogArgs filters.
         * @member {Array.<file_dialogs.IFileTypeFilter>} filters
         * @memberof file_dialogs.SaveDialogArgs
         * @instance
         */
        SaveDialogArgs.prototype.filters = $util.emptyArray;

        /**
         * Creates a new SaveDialogArgs instance using the specified properties.
         * @function create
         * @memberof file_dialogs.SaveDialogArgs
         * @static
         * @param {file_dialogs.ISaveDialogArgs=} [properties] Properties to set
         * @returns {file_dialogs.SaveDialogArgs} SaveDialogArgs instance
         */
        SaveDialogArgs.create = function create(properties) {
            return new SaveDialogArgs(properties);
        };

        /**
         * Encodes the specified SaveDialogArgs message. Does not implicitly {@link file_dialogs.SaveDialogArgs.verify|verify} messages.
         * @function encode
         * @memberof file_dialogs.SaveDialogArgs
         * @static
         * @param {file_dialogs.ISaveDialogArgs} message SaveDialogArgs message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SaveDialogArgs.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.title != null && Object.hasOwnProperty.call(message, "title"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.title);
            if (message.btnLabel != null && Object.hasOwnProperty.call(message, "btnLabel"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.btnLabel);
            if (message.defaultPath != null && Object.hasOwnProperty.call(message, "defaultPath"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.defaultPath);
            if (message.filters != null && message.filters.length)
                for (var i = 0; i < message.filters.length; ++i)
                    $root.file_dialogs.FileTypeFilter.encode(message.filters[i], writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified SaveDialogArgs message, length delimited. Does not implicitly {@link file_dialogs.SaveDialogArgs.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file_dialogs.SaveDialogArgs
         * @static
         * @param {file_dialogs.ISaveDialogArgs} message SaveDialogArgs message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SaveDialogArgs.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a SaveDialogArgs message from the specified reader or buffer.
         * @function decode
         * @memberof file_dialogs.SaveDialogArgs
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file_dialogs.SaveDialogArgs} SaveDialogArgs
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SaveDialogArgs.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file_dialogs.SaveDialogArgs();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.title = reader.string();
                        break;
                    }
                case 2: {
                        message.btnLabel = reader.string();
                        break;
                    }
                case 3: {
                        message.defaultPath = reader.string();
                        break;
                    }
                case 4: {
                        if (!(message.filters && message.filters.length))
                            message.filters = [];
                        message.filters.push($root.file_dialogs.FileTypeFilter.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a SaveDialogArgs message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file_dialogs.SaveDialogArgs
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file_dialogs.SaveDialogArgs} SaveDialogArgs
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SaveDialogArgs.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a SaveDialogArgs message.
         * @function verify
         * @memberof file_dialogs.SaveDialogArgs
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        SaveDialogArgs.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.title != null && Object.hasOwnProperty.call(message, "title"))
                if (!$util.isString(message.title))
                    return "title: string expected";
            if (message.btnLabel != null && Object.hasOwnProperty.call(message, "btnLabel"))
                if (!$util.isString(message.btnLabel))
                    return "btnLabel: string expected";
            if (message.defaultPath != null && Object.hasOwnProperty.call(message, "defaultPath"))
                if (!$util.isString(message.defaultPath))
                    return "defaultPath: string expected";
            if (message.filters != null && Object.hasOwnProperty.call(message, "filters")) {
                if (!Array.isArray(message.filters))
                    return "filters: array expected";
                for (var i = 0; i < message.filters.length; ++i) {
                    var error = $root.file_dialogs.FileTypeFilter.verify(message.filters[i], long + 1);
                    if (error)
                        return "filters." + error;
                }
            }
            return null;
        };

        /**
         * Creates a SaveDialogArgs message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file_dialogs.SaveDialogArgs
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file_dialogs.SaveDialogArgs} SaveDialogArgs
         */
        SaveDialogArgs.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file_dialogs.SaveDialogArgs)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file_dialogs.SaveDialogArgs: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file_dialogs.SaveDialogArgs();
            if (object.title != null)
                message.title = String(object.title);
            if (object.btnLabel != null)
                message.btnLabel = String(object.btnLabel);
            if (object.defaultPath != null)
                message.defaultPath = String(object.defaultPath);
            if (object.filters) {
                if (!Array.isArray(object.filters))
                    throw TypeError(".file_dialogs.SaveDialogArgs.filters: array expected");
                message.filters = [];
                for (var i = 0; i < object.filters.length; ++i) {
                    if (!$util.isObject(object.filters[i]))
                        throw TypeError(".file_dialogs.SaveDialogArgs.filters: object expected");
                    message.filters[i] = $root.file_dialogs.FileTypeFilter.fromObject(object.filters[i], long + 1);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from a SaveDialogArgs message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file_dialogs.SaveDialogArgs
         * @static
         * @param {file_dialogs.SaveDialogArgs} message SaveDialogArgs
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        SaveDialogArgs.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.filters = [];
            if (options.defaults) {
                object.title = "";
                object.btnLabel = "";
                object.defaultPath = "";
            }
            if (message.title != null && Object.hasOwnProperty.call(message, "title"))
                object.title = message.title;
            if (message.btnLabel != null && Object.hasOwnProperty.call(message, "btnLabel"))
                object.btnLabel = message.btnLabel;
            if (message.defaultPath != null && Object.hasOwnProperty.call(message, "defaultPath"))
                object.defaultPath = message.defaultPath;
            if (message.filters && message.filters.length) {
                object.filters = [];
                for (var j = 0; j < message.filters.length; ++j)
                    object.filters[j] = $root.file_dialogs.FileTypeFilter.toObject(message.filters[j], options, q + 1);
            }
            return object;
        };

        /**
         * Converts this SaveDialogArgs to JSON.
         * @function toJSON
         * @memberof file_dialogs.SaveDialogArgs
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        SaveDialogArgs.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for SaveDialogArgs
         * @function getTypeUrl
         * @memberof file_dialogs.SaveDialogArgs
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        SaveDialogArgs.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file_dialogs.SaveDialogArgs";
        };

        return SaveDialogArgs;
    })();

    file_dialogs.SaveFolderDialogReplyBody = (function() {

        /**
         * Properties of a SaveFolderDialogReplyBody.
         * @memberof file_dialogs
         * @interface ISaveFolderDialogReplyBody
         * @property {fs.IFS|null} [folder] SaveFolderDialogReplyBody folder
         */

        /**
         * Constructs a new SaveFolderDialogReplyBody.
         * @memberof file_dialogs
         * @classdesc Represents a SaveFolderDialogReplyBody.
         * @implements ISaveFolderDialogReplyBody
         * @constructor
         * @param {file_dialogs.ISaveFolderDialogReplyBody=} [properties] Properties to set
         */
        function SaveFolderDialogReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * SaveFolderDialogReplyBody folder.
         * @member {fs.IFS|null|undefined} folder
         * @memberof file_dialogs.SaveFolderDialogReplyBody
         * @instance
         */
        SaveFolderDialogReplyBody.prototype.folder = null;

        /**
         * Creates a new SaveFolderDialogReplyBody instance using the specified properties.
         * @function create
         * @memberof file_dialogs.SaveFolderDialogReplyBody
         * @static
         * @param {file_dialogs.ISaveFolderDialogReplyBody=} [properties] Properties to set
         * @returns {file_dialogs.SaveFolderDialogReplyBody} SaveFolderDialogReplyBody instance
         */
        SaveFolderDialogReplyBody.create = function create(properties) {
            return new SaveFolderDialogReplyBody(properties);
        };

        /**
         * Encodes the specified SaveFolderDialogReplyBody message. Does not implicitly {@link file_dialogs.SaveFolderDialogReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file_dialogs.SaveFolderDialogReplyBody
         * @static
         * @param {file_dialogs.ISaveFolderDialogReplyBody} message SaveFolderDialogReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SaveFolderDialogReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.folder != null && Object.hasOwnProperty.call(message, "folder"))
                $root.fs.FS.encode(message.folder, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified SaveFolderDialogReplyBody message, length delimited. Does not implicitly {@link file_dialogs.SaveFolderDialogReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file_dialogs.SaveFolderDialogReplyBody
         * @static
         * @param {file_dialogs.ISaveFolderDialogReplyBody} message SaveFolderDialogReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SaveFolderDialogReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a SaveFolderDialogReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file_dialogs.SaveFolderDialogReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file_dialogs.SaveFolderDialogReplyBody} SaveFolderDialogReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SaveFolderDialogReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file_dialogs.SaveFolderDialogReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.folder = $root.fs.FS.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a SaveFolderDialogReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file_dialogs.SaveFolderDialogReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file_dialogs.SaveFolderDialogReplyBody} SaveFolderDialogReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SaveFolderDialogReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a SaveFolderDialogReplyBody message.
         * @function verify
         * @memberof file_dialogs.SaveFolderDialogReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        SaveFolderDialogReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.folder != null && Object.hasOwnProperty.call(message, "folder")) {
                var error = $root.fs.FS.verify(message.folder, long + 1);
                if (error)
                    return "folder." + error;
            }
            return null;
        };

        /**
         * Creates a SaveFolderDialogReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file_dialogs.SaveFolderDialogReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file_dialogs.SaveFolderDialogReplyBody} SaveFolderDialogReplyBody
         */
        SaveFolderDialogReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file_dialogs.SaveFolderDialogReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file_dialogs.SaveFolderDialogReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file_dialogs.SaveFolderDialogReplyBody();
            if (object.folder != null) {
                if (!$util.isObject(object.folder))
                    throw TypeError(".file_dialogs.SaveFolderDialogReplyBody.folder: object expected");
                message.folder = $root.fs.FS.fromObject(object.folder, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a SaveFolderDialogReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file_dialogs.SaveFolderDialogReplyBody
         * @static
         * @param {file_dialogs.SaveFolderDialogReplyBody} message SaveFolderDialogReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        SaveFolderDialogReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.folder = null;
            if (message.folder != null && Object.hasOwnProperty.call(message, "folder"))
                object.folder = $root.fs.FS.toObject(message.folder, options, q + 1);
            return object;
        };

        /**
         * Converts this SaveFolderDialogReplyBody to JSON.
         * @function toJSON
         * @memberof file_dialogs.SaveFolderDialogReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        SaveFolderDialogReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for SaveFolderDialogReplyBody
         * @function getTypeUrl
         * @memberof file_dialogs.SaveFolderDialogReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        SaveFolderDialogReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file_dialogs.SaveFolderDialogReplyBody";
        };

        return SaveFolderDialogReplyBody;
    })();

    file_dialogs.OpenFileDialogReplyBody = (function() {

        /**
         * Properties of an OpenFileDialogReplyBody.
         * @memberof file_dialogs
         * @interface IOpenFileDialogReplyBody
         * @property {Array.<file.IFile>|null} [files] OpenFileDialogReplyBody files
         */

        /**
         * Constructs a new OpenFileDialogReplyBody.
         * @memberof file_dialogs
         * @classdesc Represents an OpenFileDialogReplyBody.
         * @implements IOpenFileDialogReplyBody
         * @constructor
         * @param {file_dialogs.IOpenFileDialogReplyBody=} [properties] Properties to set
         */
        function OpenFileDialogReplyBody(properties) {
            this.files = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * OpenFileDialogReplyBody files.
         * @member {Array.<file.IFile>} files
         * @memberof file_dialogs.OpenFileDialogReplyBody
         * @instance
         */
        OpenFileDialogReplyBody.prototype.files = $util.emptyArray;

        /**
         * Creates a new OpenFileDialogReplyBody instance using the specified properties.
         * @function create
         * @memberof file_dialogs.OpenFileDialogReplyBody
         * @static
         * @param {file_dialogs.IOpenFileDialogReplyBody=} [properties] Properties to set
         * @returns {file_dialogs.OpenFileDialogReplyBody} OpenFileDialogReplyBody instance
         */
        OpenFileDialogReplyBody.create = function create(properties) {
            return new OpenFileDialogReplyBody(properties);
        };

        /**
         * Encodes the specified OpenFileDialogReplyBody message. Does not implicitly {@link file_dialogs.OpenFileDialogReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file_dialogs.OpenFileDialogReplyBody
         * @static
         * @param {file_dialogs.IOpenFileDialogReplyBody} message OpenFileDialogReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OpenFileDialogReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.files != null && message.files.length)
                for (var i = 0; i < message.files.length; ++i)
                    $root.file.File.encode(message.files[i], writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified OpenFileDialogReplyBody message, length delimited. Does not implicitly {@link file_dialogs.OpenFileDialogReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file_dialogs.OpenFileDialogReplyBody
         * @static
         * @param {file_dialogs.IOpenFileDialogReplyBody} message OpenFileDialogReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OpenFileDialogReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an OpenFileDialogReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file_dialogs.OpenFileDialogReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file_dialogs.OpenFileDialogReplyBody} OpenFileDialogReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OpenFileDialogReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file_dialogs.OpenFileDialogReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        if (!(message.files && message.files.length))
                            message.files = [];
                        message.files.push($root.file.File.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an OpenFileDialogReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file_dialogs.OpenFileDialogReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file_dialogs.OpenFileDialogReplyBody} OpenFileDialogReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OpenFileDialogReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an OpenFileDialogReplyBody message.
         * @function verify
         * @memberof file_dialogs.OpenFileDialogReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        OpenFileDialogReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.files != null && Object.hasOwnProperty.call(message, "files")) {
                if (!Array.isArray(message.files))
                    return "files: array expected";
                for (var i = 0; i < message.files.length; ++i) {
                    var error = $root.file.File.verify(message.files[i], long + 1);
                    if (error)
                        return "files." + error;
                }
            }
            return null;
        };

        /**
         * Creates an OpenFileDialogReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file_dialogs.OpenFileDialogReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file_dialogs.OpenFileDialogReplyBody} OpenFileDialogReplyBody
         */
        OpenFileDialogReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file_dialogs.OpenFileDialogReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file_dialogs.OpenFileDialogReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file_dialogs.OpenFileDialogReplyBody();
            if (object.files) {
                if (!Array.isArray(object.files))
                    throw TypeError(".file_dialogs.OpenFileDialogReplyBody.files: array expected");
                message.files = [];
                for (var i = 0; i < object.files.length; ++i) {
                    if (!$util.isObject(object.files[i]))
                        throw TypeError(".file_dialogs.OpenFileDialogReplyBody.files: object expected");
                    message.files[i] = $root.file.File.fromObject(object.files[i], long + 1);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from an OpenFileDialogReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file_dialogs.OpenFileDialogReplyBody
         * @static
         * @param {file_dialogs.OpenFileDialogReplyBody} message OpenFileDialogReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        OpenFileDialogReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.files = [];
            if (message.files && message.files.length) {
                object.files = [];
                for (var j = 0; j < message.files.length; ++j)
                    object.files[j] = $root.file.File.toObject(message.files[j], options, q + 1);
            }
            return object;
        };

        /**
         * Converts this OpenFileDialogReplyBody to JSON.
         * @function toJSON
         * @memberof file_dialogs.OpenFileDialogReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        OpenFileDialogReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for OpenFileDialogReplyBody
         * @function getTypeUrl
         * @memberof file_dialogs.OpenFileDialogReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        OpenFileDialogReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file_dialogs.OpenFileDialogReplyBody";
        };

        return OpenFileDialogReplyBody;
    })();

    file_dialogs.OpenDialogArgs = (function() {

        /**
         * Properties of an OpenDialogArgs.
         * @memberof file_dialogs
         * @interface IOpenDialogArgs
         * @property {string|null} [title] OpenDialogArgs title
         * @property {string|null} [btnLabel] OpenDialogArgs btnLabel
         * @property {boolean|null} [multiSelections] OpenDialogArgs multiSelections
         * @property {Array.<file_dialogs.IFileTypeFilter>|null} [filters] OpenDialogArgs filters
         */

        /**
         * Constructs a new OpenDialogArgs.
         * @memberof file_dialogs
         * @classdesc Represents an OpenDialogArgs.
         * @implements IOpenDialogArgs
         * @constructor
         * @param {file_dialogs.IOpenDialogArgs=} [properties] Properties to set
         */
        function OpenDialogArgs(properties) {
            this.filters = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * OpenDialogArgs title.
         * @member {string} title
         * @memberof file_dialogs.OpenDialogArgs
         * @instance
         */
        OpenDialogArgs.prototype.title = "";

        /**
         * OpenDialogArgs btnLabel.
         * @member {string} btnLabel
         * @memberof file_dialogs.OpenDialogArgs
         * @instance
         */
        OpenDialogArgs.prototype.btnLabel = "";

        /**
         * OpenDialogArgs multiSelections.
         * @member {boolean} multiSelections
         * @memberof file_dialogs.OpenDialogArgs
         * @instance
         */
        OpenDialogArgs.prototype.multiSelections = false;

        /**
         * OpenDialogArgs filters.
         * @member {Array.<file_dialogs.IFileTypeFilter>} filters
         * @memberof file_dialogs.OpenDialogArgs
         * @instance
         */
        OpenDialogArgs.prototype.filters = $util.emptyArray;

        /**
         * Creates a new OpenDialogArgs instance using the specified properties.
         * @function create
         * @memberof file_dialogs.OpenDialogArgs
         * @static
         * @param {file_dialogs.IOpenDialogArgs=} [properties] Properties to set
         * @returns {file_dialogs.OpenDialogArgs} OpenDialogArgs instance
         */
        OpenDialogArgs.create = function create(properties) {
            return new OpenDialogArgs(properties);
        };

        /**
         * Encodes the specified OpenDialogArgs message. Does not implicitly {@link file_dialogs.OpenDialogArgs.verify|verify} messages.
         * @function encode
         * @memberof file_dialogs.OpenDialogArgs
         * @static
         * @param {file_dialogs.IOpenDialogArgs} message OpenDialogArgs message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OpenDialogArgs.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.title != null && Object.hasOwnProperty.call(message, "title"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.title);
            if (message.btnLabel != null && Object.hasOwnProperty.call(message, "btnLabel"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.btnLabel);
            if (message.multiSelections != null && Object.hasOwnProperty.call(message, "multiSelections"))
                writer.uint32(/* id 3, wireType 0 =*/24).bool(message.multiSelections);
            if (message.filters != null && message.filters.length)
                for (var i = 0; i < message.filters.length; ++i)
                    $root.file_dialogs.FileTypeFilter.encode(message.filters[i], writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified OpenDialogArgs message, length delimited. Does not implicitly {@link file_dialogs.OpenDialogArgs.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file_dialogs.OpenDialogArgs
         * @static
         * @param {file_dialogs.IOpenDialogArgs} message OpenDialogArgs message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OpenDialogArgs.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an OpenDialogArgs message from the specified reader or buffer.
         * @function decode
         * @memberof file_dialogs.OpenDialogArgs
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file_dialogs.OpenDialogArgs} OpenDialogArgs
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OpenDialogArgs.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file_dialogs.OpenDialogArgs();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.title = reader.string();
                        break;
                    }
                case 2: {
                        message.btnLabel = reader.string();
                        break;
                    }
                case 3: {
                        message.multiSelections = reader.bool();
                        break;
                    }
                case 4: {
                        if (!(message.filters && message.filters.length))
                            message.filters = [];
                        message.filters.push($root.file_dialogs.FileTypeFilter.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an OpenDialogArgs message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file_dialogs.OpenDialogArgs
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file_dialogs.OpenDialogArgs} OpenDialogArgs
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OpenDialogArgs.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an OpenDialogArgs message.
         * @function verify
         * @memberof file_dialogs.OpenDialogArgs
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        OpenDialogArgs.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.title != null && Object.hasOwnProperty.call(message, "title"))
                if (!$util.isString(message.title))
                    return "title: string expected";
            if (message.btnLabel != null && Object.hasOwnProperty.call(message, "btnLabel"))
                if (!$util.isString(message.btnLabel))
                    return "btnLabel: string expected";
            if (message.multiSelections != null && Object.hasOwnProperty.call(message, "multiSelections"))
                if (typeof message.multiSelections !== "boolean")
                    return "multiSelections: boolean expected";
            if (message.filters != null && Object.hasOwnProperty.call(message, "filters")) {
                if (!Array.isArray(message.filters))
                    return "filters: array expected";
                for (var i = 0; i < message.filters.length; ++i) {
                    var error = $root.file_dialogs.FileTypeFilter.verify(message.filters[i], long + 1);
                    if (error)
                        return "filters." + error;
                }
            }
            return null;
        };

        /**
         * Creates an OpenDialogArgs message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file_dialogs.OpenDialogArgs
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file_dialogs.OpenDialogArgs} OpenDialogArgs
         */
        OpenDialogArgs.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file_dialogs.OpenDialogArgs)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file_dialogs.OpenDialogArgs: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file_dialogs.OpenDialogArgs();
            if (object.title != null)
                message.title = String(object.title);
            if (object.btnLabel != null)
                message.btnLabel = String(object.btnLabel);
            if (object.multiSelections != null)
                message.multiSelections = Boolean(object.multiSelections);
            if (object.filters) {
                if (!Array.isArray(object.filters))
                    throw TypeError(".file_dialogs.OpenDialogArgs.filters: array expected");
                message.filters = [];
                for (var i = 0; i < object.filters.length; ++i) {
                    if (!$util.isObject(object.filters[i]))
                        throw TypeError(".file_dialogs.OpenDialogArgs.filters: object expected");
                    message.filters[i] = $root.file_dialogs.FileTypeFilter.fromObject(object.filters[i], long + 1);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from an OpenDialogArgs message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file_dialogs.OpenDialogArgs
         * @static
         * @param {file_dialogs.OpenDialogArgs} message OpenDialogArgs
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        OpenDialogArgs.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.filters = [];
            if (options.defaults) {
                object.title = "";
                object.btnLabel = "";
                object.multiSelections = false;
            }
            if (message.title != null && Object.hasOwnProperty.call(message, "title"))
                object.title = message.title;
            if (message.btnLabel != null && Object.hasOwnProperty.call(message, "btnLabel"))
                object.btnLabel = message.btnLabel;
            if (message.multiSelections != null && Object.hasOwnProperty.call(message, "multiSelections"))
                object.multiSelections = message.multiSelections;
            if (message.filters && message.filters.length) {
                object.filters = [];
                for (var j = 0; j < message.filters.length; ++j)
                    object.filters[j] = $root.file_dialogs.FileTypeFilter.toObject(message.filters[j], options, q + 1);
            }
            return object;
        };

        /**
         * Converts this OpenDialogArgs to JSON.
         * @function toJSON
         * @memberof file_dialogs.OpenDialogArgs
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        OpenDialogArgs.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for OpenDialogArgs
         * @function getTypeUrl
         * @memberof file_dialogs.OpenDialogArgs
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        OpenDialogArgs.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file_dialogs.OpenDialogArgs";
        };

        return OpenDialogArgs;
    })();

    file_dialogs.OpenFolderDialogReplyBody = (function() {

        /**
         * Properties of an OpenFolderDialogReplyBody.
         * @memberof file_dialogs
         * @interface IOpenFolderDialogReplyBody
         * @property {Array.<fs.IFS>|null} [folders] OpenFolderDialogReplyBody folders
         */

        /**
         * Constructs a new OpenFolderDialogReplyBody.
         * @memberof file_dialogs
         * @classdesc Represents an OpenFolderDialogReplyBody.
         * @implements IOpenFolderDialogReplyBody
         * @constructor
         * @param {file_dialogs.IOpenFolderDialogReplyBody=} [properties] Properties to set
         */
        function OpenFolderDialogReplyBody(properties) {
            this.folders = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * OpenFolderDialogReplyBody folders.
         * @member {Array.<fs.IFS>} folders
         * @memberof file_dialogs.OpenFolderDialogReplyBody
         * @instance
         */
        OpenFolderDialogReplyBody.prototype.folders = $util.emptyArray;

        /**
         * Creates a new OpenFolderDialogReplyBody instance using the specified properties.
         * @function create
         * @memberof file_dialogs.OpenFolderDialogReplyBody
         * @static
         * @param {file_dialogs.IOpenFolderDialogReplyBody=} [properties] Properties to set
         * @returns {file_dialogs.OpenFolderDialogReplyBody} OpenFolderDialogReplyBody instance
         */
        OpenFolderDialogReplyBody.create = function create(properties) {
            return new OpenFolderDialogReplyBody(properties);
        };

        /**
         * Encodes the specified OpenFolderDialogReplyBody message. Does not implicitly {@link file_dialogs.OpenFolderDialogReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file_dialogs.OpenFolderDialogReplyBody
         * @static
         * @param {file_dialogs.IOpenFolderDialogReplyBody} message OpenFolderDialogReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OpenFolderDialogReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.folders != null && message.folders.length)
                for (var i = 0; i < message.folders.length; ++i)
                    $root.fs.FS.encode(message.folders[i], writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified OpenFolderDialogReplyBody message, length delimited. Does not implicitly {@link file_dialogs.OpenFolderDialogReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file_dialogs.OpenFolderDialogReplyBody
         * @static
         * @param {file_dialogs.IOpenFolderDialogReplyBody} message OpenFolderDialogReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OpenFolderDialogReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an OpenFolderDialogReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file_dialogs.OpenFolderDialogReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file_dialogs.OpenFolderDialogReplyBody} OpenFolderDialogReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OpenFolderDialogReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file_dialogs.OpenFolderDialogReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        if (!(message.folders && message.folders.length))
                            message.folders = [];
                        message.folders.push($root.fs.FS.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an OpenFolderDialogReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file_dialogs.OpenFolderDialogReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file_dialogs.OpenFolderDialogReplyBody} OpenFolderDialogReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OpenFolderDialogReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an OpenFolderDialogReplyBody message.
         * @function verify
         * @memberof file_dialogs.OpenFolderDialogReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        OpenFolderDialogReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.folders != null && Object.hasOwnProperty.call(message, "folders")) {
                if (!Array.isArray(message.folders))
                    return "folders: array expected";
                for (var i = 0; i < message.folders.length; ++i) {
                    var error = $root.fs.FS.verify(message.folders[i], long + 1);
                    if (error)
                        return "folders." + error;
                }
            }
            return null;
        };

        /**
         * Creates an OpenFolderDialogReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file_dialogs.OpenFolderDialogReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file_dialogs.OpenFolderDialogReplyBody} OpenFolderDialogReplyBody
         */
        OpenFolderDialogReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file_dialogs.OpenFolderDialogReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file_dialogs.OpenFolderDialogReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file_dialogs.OpenFolderDialogReplyBody();
            if (object.folders) {
                if (!Array.isArray(object.folders))
                    throw TypeError(".file_dialogs.OpenFolderDialogReplyBody.folders: array expected");
                message.folders = [];
                for (var i = 0; i < object.folders.length; ++i) {
                    if (!$util.isObject(object.folders[i]))
                        throw TypeError(".file_dialogs.OpenFolderDialogReplyBody.folders: object expected");
                    message.folders[i] = $root.fs.FS.fromObject(object.folders[i], long + 1);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from an OpenFolderDialogReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file_dialogs.OpenFolderDialogReplyBody
         * @static
         * @param {file_dialogs.OpenFolderDialogReplyBody} message OpenFolderDialogReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        OpenFolderDialogReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.folders = [];
            if (message.folders && message.folders.length) {
                object.folders = [];
                for (var j = 0; j < message.folders.length; ++j)
                    object.folders[j] = $root.fs.FS.toObject(message.folders[j], options, q + 1);
            }
            return object;
        };

        /**
         * Converts this OpenFolderDialogReplyBody to JSON.
         * @function toJSON
         * @memberof file_dialogs.OpenFolderDialogReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        OpenFolderDialogReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for OpenFolderDialogReplyBody
         * @function getTypeUrl
         * @memberof file_dialogs.OpenFolderDialogReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        OpenFolderDialogReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file_dialogs.OpenFolderDialogReplyBody";
        };

        return OpenFolderDialogReplyBody;
    })();

    return file_dialogs;
})();

$root.common = (function() {

    /**
     * Namespace common.
     * @exports common
     * @namespace
     */
    var common = {};

    common.ObjectReference = (function() {

        /**
         * Properties of an ObjectReference.
         * @memberof common
         * @interface IObjectReference
         * @property {string|null} [objType] ObjectReference objType
         * @property {Array.<string>|null} [path] ObjectReference path
         */

        /**
         * Constructs a new ObjectReference.
         * @memberof common
         * @classdesc Represents an ObjectReference.
         * @implements IObjectReference
         * @constructor
         * @param {common.IObjectReference=} [properties] Properties to set
         */
        function ObjectReference(properties) {
            this.path = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * ObjectReference objType.
         * @member {string} objType
         * @memberof common.ObjectReference
         * @instance
         */
        ObjectReference.prototype.objType = "";

        /**
         * ObjectReference path.
         * @member {Array.<string>} path
         * @memberof common.ObjectReference
         * @instance
         */
        ObjectReference.prototype.path = $util.emptyArray;

        /**
         * Creates a new ObjectReference instance using the specified properties.
         * @function create
         * @memberof common.ObjectReference
         * @static
         * @param {common.IObjectReference=} [properties] Properties to set
         * @returns {common.ObjectReference} ObjectReference instance
         */
        ObjectReference.create = function create(properties) {
            return new ObjectReference(properties);
        };

        /**
         * Encodes the specified ObjectReference message. Does not implicitly {@link common.ObjectReference.verify|verify} messages.
         * @function encode
         * @memberof common.ObjectReference
         * @static
         * @param {common.IObjectReference} message ObjectReference message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ObjectReference.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.objType != null && Object.hasOwnProperty.call(message, "objType"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.objType);
            if (message.path != null && message.path.length)
                for (var i = 0; i < message.path.length; ++i)
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.path[i]);
            return writer;
        };

        /**
         * Encodes the specified ObjectReference message, length delimited. Does not implicitly {@link common.ObjectReference.verify|verify} messages.
         * @function encodeDelimited
         * @memberof common.ObjectReference
         * @static
         * @param {common.IObjectReference} message ObjectReference message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ObjectReference.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an ObjectReference message from the specified reader or buffer.
         * @function decode
         * @memberof common.ObjectReference
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {common.ObjectReference} ObjectReference
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ObjectReference.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.common.ObjectReference();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.objType = reader.string();
                        break;
                    }
                case 2: {
                        if (!(message.path && message.path.length))
                            message.path = [];
                        message.path.push(reader.string());
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an ObjectReference message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof common.ObjectReference
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {common.ObjectReference} ObjectReference
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ObjectReference.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an ObjectReference message.
         * @function verify
         * @memberof common.ObjectReference
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        ObjectReference.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.objType != null && Object.hasOwnProperty.call(message, "objType"))
                if (!$util.isString(message.objType))
                    return "objType: string expected";
            if (message.path != null && Object.hasOwnProperty.call(message, "path")) {
                if (!Array.isArray(message.path))
                    return "path: array expected";
                for (var i = 0; i < message.path.length; ++i)
                    if (!$util.isString(message.path[i]))
                        return "path: string[] expected";
            }
            return null;
        };

        /**
         * Creates an ObjectReference message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof common.ObjectReference
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {common.ObjectReference} ObjectReference
         */
        ObjectReference.fromObject = function fromObject(object, long) {
            if (object instanceof $root.common.ObjectReference)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".common.ObjectReference: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.common.ObjectReference();
            if (object.objType != null)
                message.objType = String(object.objType);
            if (object.path) {
                if (!Array.isArray(object.path))
                    throw TypeError(".common.ObjectReference.path: array expected");
                message.path = [];
                for (var i = 0; i < object.path.length; ++i)
                    message.path[i] = String(object.path[i]);
            }
            return message;
        };

        /**
         * Creates a plain object from an ObjectReference message. Also converts values to other types if specified.
         * @function toObject
         * @memberof common.ObjectReference
         * @static
         * @param {common.ObjectReference} message ObjectReference
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        ObjectReference.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.path = [];
            if (options.defaults)
                object.objType = "";
            if (message.objType != null && Object.hasOwnProperty.call(message, "objType"))
                object.objType = message.objType;
            if (message.path && message.path.length) {
                object.path = [];
                for (var j = 0; j < message.path.length; ++j)
                    object.path[j] = message.path[j];
            }
            return object;
        };

        /**
         * Converts this ObjectReference to JSON.
         * @function toJSON
         * @memberof common.ObjectReference
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        ObjectReference.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for ObjectReference
         * @function getTypeUrl
         * @memberof common.ObjectReference
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        ObjectReference.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/common.ObjectReference";
        };

        return ObjectReference;
    })();

    common.BooleanValue = (function() {

        /**
         * Properties of a BooleanValue.
         * @memberof common
         * @interface IBooleanValue
         * @property {boolean|null} [value] BooleanValue value
         */

        /**
         * Constructs a new BooleanValue.
         * @memberof common
         * @classdesc Represents a BooleanValue.
         * @implements IBooleanValue
         * @constructor
         * @param {common.IBooleanValue=} [properties] Properties to set
         */
        function BooleanValue(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * BooleanValue value.
         * @member {boolean} value
         * @memberof common.BooleanValue
         * @instance
         */
        BooleanValue.prototype.value = false;

        /**
         * Creates a new BooleanValue instance using the specified properties.
         * @function create
         * @memberof common.BooleanValue
         * @static
         * @param {common.IBooleanValue=} [properties] Properties to set
         * @returns {common.BooleanValue} BooleanValue instance
         */
        BooleanValue.create = function create(properties) {
            return new BooleanValue(properties);
        };

        /**
         * Encodes the specified BooleanValue message. Does not implicitly {@link common.BooleanValue.verify|verify} messages.
         * @function encode
         * @memberof common.BooleanValue
         * @static
         * @param {common.IBooleanValue} message BooleanValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        BooleanValue.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                writer.uint32(/* id 1, wireType 0 =*/8).bool(message.value);
            return writer;
        };

        /**
         * Encodes the specified BooleanValue message, length delimited. Does not implicitly {@link common.BooleanValue.verify|verify} messages.
         * @function encodeDelimited
         * @memberof common.BooleanValue
         * @static
         * @param {common.IBooleanValue} message BooleanValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        BooleanValue.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a BooleanValue message from the specified reader or buffer.
         * @function decode
         * @memberof common.BooleanValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {common.BooleanValue} BooleanValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        BooleanValue.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.common.BooleanValue();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.value = reader.bool();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a BooleanValue message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof common.BooleanValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {common.BooleanValue} BooleanValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        BooleanValue.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a BooleanValue message.
         * @function verify
         * @memberof common.BooleanValue
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        BooleanValue.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                if (typeof message.value !== "boolean")
                    return "value: boolean expected";
            return null;
        };

        /**
         * Creates a BooleanValue message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof common.BooleanValue
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {common.BooleanValue} BooleanValue
         */
        BooleanValue.fromObject = function fromObject(object, long) {
            if (object instanceof $root.common.BooleanValue)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".common.BooleanValue: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.common.BooleanValue();
            if (object.value != null)
                message.value = Boolean(object.value);
            return message;
        };

        /**
         * Creates a plain object from a BooleanValue message. Also converts values to other types if specified.
         * @function toObject
         * @memberof common.BooleanValue
         * @static
         * @param {common.BooleanValue} message BooleanValue
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        BooleanValue.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.value = false;
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                object.value = message.value;
            return object;
        };

        /**
         * Converts this BooleanValue to JSON.
         * @function toJSON
         * @memberof common.BooleanValue
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        BooleanValue.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for BooleanValue
         * @function getTypeUrl
         * @memberof common.BooleanValue
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        BooleanValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/common.BooleanValue";
        };

        return BooleanValue;
    })();

    common.StringArrayValue = (function() {

        /**
         * Properties of a StringArrayValue.
         * @memberof common
         * @interface IStringArrayValue
         * @property {Array.<string>|null} [values] StringArrayValue values
         */

        /**
         * Constructs a new StringArrayValue.
         * @memberof common
         * @classdesc Represents a StringArrayValue.
         * @implements IStringArrayValue
         * @constructor
         * @param {common.IStringArrayValue=} [properties] Properties to set
         */
        function StringArrayValue(properties) {
            this.values = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * StringArrayValue values.
         * @member {Array.<string>} values
         * @memberof common.StringArrayValue
         * @instance
         */
        StringArrayValue.prototype.values = $util.emptyArray;

        /**
         * Creates a new StringArrayValue instance using the specified properties.
         * @function create
         * @memberof common.StringArrayValue
         * @static
         * @param {common.IStringArrayValue=} [properties] Properties to set
         * @returns {common.StringArrayValue} StringArrayValue instance
         */
        StringArrayValue.create = function create(properties) {
            return new StringArrayValue(properties);
        };

        /**
         * Encodes the specified StringArrayValue message. Does not implicitly {@link common.StringArrayValue.verify|verify} messages.
         * @function encode
         * @memberof common.StringArrayValue
         * @static
         * @param {common.IStringArrayValue} message StringArrayValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        StringArrayValue.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.values != null && message.values.length)
                for (var i = 0; i < message.values.length; ++i)
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.values[i]);
            return writer;
        };

        /**
         * Encodes the specified StringArrayValue message, length delimited. Does not implicitly {@link common.StringArrayValue.verify|verify} messages.
         * @function encodeDelimited
         * @memberof common.StringArrayValue
         * @static
         * @param {common.IStringArrayValue} message StringArrayValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        StringArrayValue.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a StringArrayValue message from the specified reader or buffer.
         * @function decode
         * @memberof common.StringArrayValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {common.StringArrayValue} StringArrayValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        StringArrayValue.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.common.StringArrayValue();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        if (!(message.values && message.values.length))
                            message.values = [];
                        message.values.push(reader.string());
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a StringArrayValue message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof common.StringArrayValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {common.StringArrayValue} StringArrayValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        StringArrayValue.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a StringArrayValue message.
         * @function verify
         * @memberof common.StringArrayValue
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        StringArrayValue.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.values != null && Object.hasOwnProperty.call(message, "values")) {
                if (!Array.isArray(message.values))
                    return "values: array expected";
                for (var i = 0; i < message.values.length; ++i)
                    if (!$util.isString(message.values[i]))
                        return "values: string[] expected";
            }
            return null;
        };

        /**
         * Creates a StringArrayValue message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof common.StringArrayValue
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {common.StringArrayValue} StringArrayValue
         */
        StringArrayValue.fromObject = function fromObject(object, long) {
            if (object instanceof $root.common.StringArrayValue)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".common.StringArrayValue: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.common.StringArrayValue();
            if (object.values) {
                if (!Array.isArray(object.values))
                    throw TypeError(".common.StringArrayValue.values: array expected");
                message.values = [];
                for (var i = 0; i < object.values.length; ++i)
                    message.values[i] = String(object.values[i]);
            }
            return message;
        };

        /**
         * Creates a plain object from a StringArrayValue message. Also converts values to other types if specified.
         * @function toObject
         * @memberof common.StringArrayValue
         * @static
         * @param {common.StringArrayValue} message StringArrayValue
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        StringArrayValue.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.values = [];
            if (message.values && message.values.length) {
                object.values = [];
                for (var j = 0; j < message.values.length; ++j)
                    object.values[j] = message.values[j];
            }
            return object;
        };

        /**
         * Converts this StringArrayValue to JSON.
         * @function toJSON
         * @memberof common.StringArrayValue
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        StringArrayValue.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for StringArrayValue
         * @function getTypeUrl
         * @memberof common.StringArrayValue
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        StringArrayValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/common.StringArrayValue";
        };

        return StringArrayValue;
    })();

    common.UInt64Value = (function() {

        /**
         * Properties of a UInt64Value.
         * @memberof common
         * @interface IUInt64Value
         * @property {number|Long|null} [value] UInt64Value value
         */

        /**
         * Constructs a new UInt64Value.
         * @memberof common
         * @classdesc Represents a UInt64Value.
         * @implements IUInt64Value
         * @constructor
         * @param {common.IUInt64Value=} [properties] Properties to set
         */
        function UInt64Value(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UInt64Value value.
         * @member {number|Long} value
         * @memberof common.UInt64Value
         * @instance
         */
        UInt64Value.prototype.value = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new UInt64Value instance using the specified properties.
         * @function create
         * @memberof common.UInt64Value
         * @static
         * @param {common.IUInt64Value=} [properties] Properties to set
         * @returns {common.UInt64Value} UInt64Value instance
         */
        UInt64Value.create = function create(properties) {
            return new UInt64Value(properties);
        };

        /**
         * Encodes the specified UInt64Value message. Does not implicitly {@link common.UInt64Value.verify|verify} messages.
         * @function encode
         * @memberof common.UInt64Value
         * @static
         * @param {common.IUInt64Value} message UInt64Value message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UInt64Value.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.value);
            return writer;
        };

        /**
         * Encodes the specified UInt64Value message, length delimited. Does not implicitly {@link common.UInt64Value.verify|verify} messages.
         * @function encodeDelimited
         * @memberof common.UInt64Value
         * @static
         * @param {common.IUInt64Value} message UInt64Value message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UInt64Value.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a UInt64Value message from the specified reader or buffer.
         * @function decode
         * @memberof common.UInt64Value
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {common.UInt64Value} UInt64Value
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UInt64Value.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.common.UInt64Value();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.value = reader.uint64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a UInt64Value message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof common.UInt64Value
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {common.UInt64Value} UInt64Value
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UInt64Value.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a UInt64Value message.
         * @function verify
         * @memberof common.UInt64Value
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UInt64Value.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                if (!$util.isInteger(message.value) && !(message.value && $util.isInteger(message.value.low) && $util.isInteger(message.value.high)))
                    return "value: integer|Long expected";
            return null;
        };

        /**
         * Creates a UInt64Value message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof common.UInt64Value
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {common.UInt64Value} UInt64Value
         */
        UInt64Value.fromObject = function fromObject(object, long) {
            if (object instanceof $root.common.UInt64Value)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".common.UInt64Value: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.common.UInt64Value();
            if (object.value != null)
                if ($util.Long)
                    message.value = $util.Long.fromValue(object.value, true);
                else if (typeof object.value === "string")
                    message.value = parseInt(object.value, 10);
                else if (typeof object.value === "number")
                    message.value = object.value;
                else if (typeof object.value === "object")
                    message.value = new $util.LongBits(object.value.low >>> 0, object.value.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a UInt64Value message. Also converts values to other types if specified.
         * @function toObject
         * @memberof common.UInt64Value
         * @static
         * @param {common.UInt64Value} message UInt64Value
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UInt64Value.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.value = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.value = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.value = typeof message.value === "number" ? BigInt(message.value) : $util.Long.fromBits(message.value.low >>> 0, message.value.high >>> 0, true).toBigInt();
                else if (typeof message.value === "number")
                    object.value = options.longs === String ? String(message.value) : message.value;
                else
                    object.value = options.longs === String ? $util.Long.prototype.toString.call(message.value) : options.longs === Number ? new $util.LongBits(message.value.low >>> 0, message.value.high >>> 0).toNumber(true) : message.value;
            return object;
        };

        /**
         * Converts this UInt64Value to JSON.
         * @function toJSON
         * @memberof common.UInt64Value
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UInt64Value.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for UInt64Value
         * @function getTypeUrl
         * @memberof common.UInt64Value
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        UInt64Value.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/common.UInt64Value";
        };

        return UInt64Value;
    })();

    common.UInt32Value = (function() {

        /**
         * Properties of a UInt32Value.
         * @memberof common
         * @interface IUInt32Value
         * @property {number|null} [value] UInt32Value value
         */

        /**
         * Constructs a new UInt32Value.
         * @memberof common
         * @classdesc Represents a UInt32Value.
         * @implements IUInt32Value
         * @constructor
         * @param {common.IUInt32Value=} [properties] Properties to set
         */
        function UInt32Value(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UInt32Value value.
         * @member {number} value
         * @memberof common.UInt32Value
         * @instance
         */
        UInt32Value.prototype.value = 0;

        /**
         * Creates a new UInt32Value instance using the specified properties.
         * @function create
         * @memberof common.UInt32Value
         * @static
         * @param {common.IUInt32Value=} [properties] Properties to set
         * @returns {common.UInt32Value} UInt32Value instance
         */
        UInt32Value.create = function create(properties) {
            return new UInt32Value(properties);
        };

        /**
         * Encodes the specified UInt32Value message. Does not implicitly {@link common.UInt32Value.verify|verify} messages.
         * @function encode
         * @memberof common.UInt32Value
         * @static
         * @param {common.IUInt32Value} message UInt32Value message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UInt32Value.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.value);
            return writer;
        };

        /**
         * Encodes the specified UInt32Value message, length delimited. Does not implicitly {@link common.UInt32Value.verify|verify} messages.
         * @function encodeDelimited
         * @memberof common.UInt32Value
         * @static
         * @param {common.IUInt32Value} message UInt32Value message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UInt32Value.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a UInt32Value message from the specified reader or buffer.
         * @function decode
         * @memberof common.UInt32Value
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {common.UInt32Value} UInt32Value
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UInt32Value.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.common.UInt32Value();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.value = reader.uint32();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a UInt32Value message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof common.UInt32Value
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {common.UInt32Value} UInt32Value
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UInt32Value.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a UInt32Value message.
         * @function verify
         * @memberof common.UInt32Value
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UInt32Value.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                if (!$util.isInteger(message.value))
                    return "value: integer expected";
            return null;
        };

        /**
         * Creates a UInt32Value message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof common.UInt32Value
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {common.UInt32Value} UInt32Value
         */
        UInt32Value.fromObject = function fromObject(object, long) {
            if (object instanceof $root.common.UInt32Value)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".common.UInt32Value: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.common.UInt32Value();
            if (object.value != null)
                message.value = object.value >>> 0;
            return message;
        };

        /**
         * Creates a plain object from a UInt32Value message. Also converts values to other types if specified.
         * @function toObject
         * @memberof common.UInt32Value
         * @static
         * @param {common.UInt32Value} message UInt32Value
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UInt32Value.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.value = 0;
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                object.value = message.value;
            return object;
        };

        /**
         * Converts this UInt32Value to JSON.
         * @function toJSON
         * @memberof common.UInt32Value
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UInt32Value.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for UInt32Value
         * @function getTypeUrl
         * @memberof common.UInt32Value
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        UInt32Value.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/common.UInt32Value";
        };

        return UInt32Value;
    })();

    common.StringValue = (function() {

        /**
         * Properties of a StringValue.
         * @memberof common
         * @interface IStringValue
         * @property {string|null} [value] StringValue value
         */

        /**
         * Constructs a new StringValue.
         * @memberof common
         * @classdesc Represents a StringValue.
         * @implements IStringValue
         * @constructor
         * @param {common.IStringValue=} [properties] Properties to set
         */
        function StringValue(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * StringValue value.
         * @member {string} value
         * @memberof common.StringValue
         * @instance
         */
        StringValue.prototype.value = "";

        /**
         * Creates a new StringValue instance using the specified properties.
         * @function create
         * @memberof common.StringValue
         * @static
         * @param {common.IStringValue=} [properties] Properties to set
         * @returns {common.StringValue} StringValue instance
         */
        StringValue.create = function create(properties) {
            return new StringValue(properties);
        };

        /**
         * Encodes the specified StringValue message. Does not implicitly {@link common.StringValue.verify|verify} messages.
         * @function encode
         * @memberof common.StringValue
         * @static
         * @param {common.IStringValue} message StringValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        StringValue.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.value);
            return writer;
        };

        /**
         * Encodes the specified StringValue message, length delimited. Does not implicitly {@link common.StringValue.verify|verify} messages.
         * @function encodeDelimited
         * @memberof common.StringValue
         * @static
         * @param {common.IStringValue} message StringValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        StringValue.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a StringValue message from the specified reader or buffer.
         * @function decode
         * @memberof common.StringValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {common.StringValue} StringValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        StringValue.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.common.StringValue();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.value = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a StringValue message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof common.StringValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {common.StringValue} StringValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        StringValue.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a StringValue message.
         * @function verify
         * @memberof common.StringValue
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        StringValue.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                if (!$util.isString(message.value))
                    return "value: string expected";
            return null;
        };

        /**
         * Creates a StringValue message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof common.StringValue
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {common.StringValue} StringValue
         */
        StringValue.fromObject = function fromObject(object, long) {
            if (object instanceof $root.common.StringValue)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".common.StringValue: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.common.StringValue();
            if (object.value != null)
                message.value = String(object.value);
            return message;
        };

        /**
         * Creates a plain object from a StringValue message. Also converts values to other types if specified.
         * @function toObject
         * @memberof common.StringValue
         * @static
         * @param {common.StringValue} message StringValue
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        StringValue.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.value = "";
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                object.value = message.value;
            return object;
        };

        /**
         * Converts this StringValue to JSON.
         * @function toJSON
         * @memberof common.StringValue
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        StringValue.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for StringValue
         * @function getTypeUrl
         * @memberof common.StringValue
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        StringValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/common.StringValue";
        };

        return StringValue;
    })();

    common.BytesValue = (function() {

        /**
         * Properties of a BytesValue.
         * @memberof common
         * @interface IBytesValue
         * @property {Uint8Array|null} [value] BytesValue value
         */

        /**
         * Constructs a new BytesValue.
         * @memberof common
         * @classdesc Represents a BytesValue.
         * @implements IBytesValue
         * @constructor
         * @param {common.IBytesValue=} [properties] Properties to set
         */
        function BytesValue(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * BytesValue value.
         * @member {Uint8Array} value
         * @memberof common.BytesValue
         * @instance
         */
        BytesValue.prototype.value = $util.newBuffer([]);

        /**
         * Creates a new BytesValue instance using the specified properties.
         * @function create
         * @memberof common.BytesValue
         * @static
         * @param {common.IBytesValue=} [properties] Properties to set
         * @returns {common.BytesValue} BytesValue instance
         */
        BytesValue.create = function create(properties) {
            return new BytesValue(properties);
        };

        /**
         * Encodes the specified BytesValue message. Does not implicitly {@link common.BytesValue.verify|verify} messages.
         * @function encode
         * @memberof common.BytesValue
         * @static
         * @param {common.IBytesValue} message BytesValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        BytesValue.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                writer.uint32(/* id 1, wireType 2 =*/10).bytes(message.value);
            return writer;
        };

        /**
         * Encodes the specified BytesValue message, length delimited. Does not implicitly {@link common.BytesValue.verify|verify} messages.
         * @function encodeDelimited
         * @memberof common.BytesValue
         * @static
         * @param {common.IBytesValue} message BytesValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        BytesValue.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a BytesValue message from the specified reader or buffer.
         * @function decode
         * @memberof common.BytesValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {common.BytesValue} BytesValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        BytesValue.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.common.BytesValue();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.value = reader.bytes();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a BytesValue message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof common.BytesValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {common.BytesValue} BytesValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        BytesValue.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a BytesValue message.
         * @function verify
         * @memberof common.BytesValue
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        BytesValue.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                if (!(message.value && typeof message.value.length === "number" || $util.isString(message.value)))
                    return "value: buffer expected";
            return null;
        };

        /**
         * Creates a BytesValue message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof common.BytesValue
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {common.BytesValue} BytesValue
         */
        BytesValue.fromObject = function fromObject(object, long) {
            if (object instanceof $root.common.BytesValue)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".common.BytesValue: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.common.BytesValue();
            if (object.value != null)
                if (typeof object.value === "string")
                    $util.base64.decode(object.value, message.value = $util.newBuffer($util.base64.length(object.value)), 0);
                else if (object.value.length >= 0)
                    message.value = object.value;
            return message;
        };

        /**
         * Creates a plain object from a BytesValue message. Also converts values to other types if specified.
         * @function toObject
         * @memberof common.BytesValue
         * @static
         * @param {common.BytesValue} message BytesValue
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        BytesValue.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                if (options.bytes === String)
                    object.value = "";
                else {
                    object.value = [];
                    if (options.bytes !== Array)
                        object.value = $util.newBuffer(object.value);
                }
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                object.value = options.bytes === String ? $util.base64.encode(message.value, 0, message.value.length) : options.bytes === Array ? Array.prototype.slice.call(message.value) : message.value;
            return object;
        };

        /**
         * Converts this BytesValue to JSON.
         * @function toJSON
         * @memberof common.BytesValue
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        BytesValue.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for BytesValue
         * @function getTypeUrl
         * @memberof common.BytesValue
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        BytesValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/common.BytesValue";
        };

        return BytesValue;
    })();

    common.ErrorValue = (function() {

        /**
         * Properties of an ErrorValue.
         * @memberof common
         * @interface IErrorValue
         * @property {string|null} [runtimeExcJson] ErrorValue runtimeExcJson
         * @property {string|null} [err] ErrorValue err
         */

        /**
         * Constructs a new ErrorValue.
         * @memberof common
         * @classdesc Represents an ErrorValue.
         * @implements IErrorValue
         * @constructor
         * @param {common.IErrorValue=} [properties] Properties to set
         */
        function ErrorValue(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * ErrorValue runtimeExcJson.
         * @member {string} runtimeExcJson
         * @memberof common.ErrorValue
         * @instance
         */
        ErrorValue.prototype.runtimeExcJson = "";

        /**
         * ErrorValue err.
         * @member {string} err
         * @memberof common.ErrorValue
         * @instance
         */
        ErrorValue.prototype.err = "";

        /**
         * Creates a new ErrorValue instance using the specified properties.
         * @function create
         * @memberof common.ErrorValue
         * @static
         * @param {common.IErrorValue=} [properties] Properties to set
         * @returns {common.ErrorValue} ErrorValue instance
         */
        ErrorValue.create = function create(properties) {
            return new ErrorValue(properties);
        };

        /**
         * Encodes the specified ErrorValue message. Does not implicitly {@link common.ErrorValue.verify|verify} messages.
         * @function encode
         * @memberof common.ErrorValue
         * @static
         * @param {common.IErrorValue} message ErrorValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ErrorValue.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.runtimeExcJson != null && Object.hasOwnProperty.call(message, "runtimeExcJson"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.runtimeExcJson);
            if (message.err != null && Object.hasOwnProperty.call(message, "err"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.err);
            return writer;
        };

        /**
         * Encodes the specified ErrorValue message, length delimited. Does not implicitly {@link common.ErrorValue.verify|verify} messages.
         * @function encodeDelimited
         * @memberof common.ErrorValue
         * @static
         * @param {common.IErrorValue} message ErrorValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ErrorValue.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an ErrorValue message from the specified reader or buffer.
         * @function decode
         * @memberof common.ErrorValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {common.ErrorValue} ErrorValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ErrorValue.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.common.ErrorValue();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.runtimeExcJson = reader.string();
                        break;
                    }
                case 2: {
                        message.err = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an ErrorValue message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof common.ErrorValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {common.ErrorValue} ErrorValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ErrorValue.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an ErrorValue message.
         * @function verify
         * @memberof common.ErrorValue
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        ErrorValue.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.runtimeExcJson != null && Object.hasOwnProperty.call(message, "runtimeExcJson"))
                if (!$util.isString(message.runtimeExcJson))
                    return "runtimeExcJson: string expected";
            if (message.err != null && Object.hasOwnProperty.call(message, "err"))
                if (!$util.isString(message.err))
                    return "err: string expected";
            return null;
        };

        /**
         * Creates an ErrorValue message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof common.ErrorValue
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {common.ErrorValue} ErrorValue
         */
        ErrorValue.fromObject = function fromObject(object, long) {
            if (object instanceof $root.common.ErrorValue)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".common.ErrorValue: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.common.ErrorValue();
            if (object.runtimeExcJson != null)
                message.runtimeExcJson = String(object.runtimeExcJson);
            if (object.err != null)
                message.err = String(object.err);
            return message;
        };

        /**
         * Creates a plain object from an ErrorValue message. Also converts values to other types if specified.
         * @function toObject
         * @memberof common.ErrorValue
         * @static
         * @param {common.ErrorValue} message ErrorValue
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        ErrorValue.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.runtimeExcJson = "";
                object.err = "";
            }
            if (message.runtimeExcJson != null && Object.hasOwnProperty.call(message, "runtimeExcJson"))
                object.runtimeExcJson = message.runtimeExcJson;
            if (message.err != null && Object.hasOwnProperty.call(message, "err"))
                object.err = message.err;
            return object;
        };

        /**
         * Converts this ErrorValue to JSON.
         * @function toJSON
         * @memberof common.ErrorValue
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        ErrorValue.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for ErrorValue
         * @function getTypeUrl
         * @memberof common.ErrorValue
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        ErrorValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/common.ErrorValue";
        };

        return ErrorValue;
    })();

    common.AnyValue = (function() {

        /**
         * Properties of an AnyValue.
         * @memberof common
         * @interface IAnyValue
         * @property {string|null} [type] AnyValue type
         * @property {common.IStringValue|null} [json] AnyValue json
         * @property {common.IBytesValue|null} [bytes] AnyValue bytes
         */

        /**
         * Constructs a new AnyValue.
         * @memberof common
         * @classdesc Represents an AnyValue.
         * @implements IAnyValue
         * @constructor
         * @param {common.IAnyValue=} [properties] Properties to set
         */
        function AnyValue(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * AnyValue type.
         * @member {string} type
         * @memberof common.AnyValue
         * @instance
         */
        AnyValue.prototype.type = "";

        /**
         * AnyValue json.
         * @member {common.IStringValue|null|undefined} json
         * @memberof common.AnyValue
         * @instance
         */
        AnyValue.prototype.json = null;

        /**
         * AnyValue bytes.
         * @member {common.IBytesValue|null|undefined} bytes
         * @memberof common.AnyValue
         * @instance
         */
        AnyValue.prototype.bytes = null;

        /**
         * Creates a new AnyValue instance using the specified properties.
         * @function create
         * @memberof common.AnyValue
         * @static
         * @param {common.IAnyValue=} [properties] Properties to set
         * @returns {common.AnyValue} AnyValue instance
         */
        AnyValue.create = function create(properties) {
            return new AnyValue(properties);
        };

        /**
         * Encodes the specified AnyValue message. Does not implicitly {@link common.AnyValue.verify|verify} messages.
         * @function encode
         * @memberof common.AnyValue
         * @static
         * @param {common.IAnyValue} message AnyValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AnyValue.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.type);
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                $root.common.StringValue.encode(message.json, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                $root.common.BytesValue.encode(message.bytes, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified AnyValue message, length delimited. Does not implicitly {@link common.AnyValue.verify|verify} messages.
         * @function encodeDelimited
         * @memberof common.AnyValue
         * @static
         * @param {common.IAnyValue} message AnyValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AnyValue.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an AnyValue message from the specified reader or buffer.
         * @function decode
         * @memberof common.AnyValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {common.AnyValue} AnyValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AnyValue.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.common.AnyValue();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.type = reader.string();
                        break;
                    }
                case 2: {
                        message.json = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.bytes = $root.common.BytesValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an AnyValue message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof common.AnyValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {common.AnyValue} AnyValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AnyValue.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an AnyValue message.
         * @function verify
         * @memberof common.AnyValue
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        AnyValue.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                if (!$util.isString(message.type))
                    return "type: string expected";
            if (message.json != null && Object.hasOwnProperty.call(message, "json")) {
                var error = $root.common.StringValue.verify(message.json, long + 1);
                if (error)
                    return "json." + error;
            }
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes")) {
                var error = $root.common.BytesValue.verify(message.bytes, long + 1);
                if (error)
                    return "bytes." + error;
            }
            return null;
        };

        /**
         * Creates an AnyValue message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof common.AnyValue
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {common.AnyValue} AnyValue
         */
        AnyValue.fromObject = function fromObject(object, long) {
            if (object instanceof $root.common.AnyValue)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".common.AnyValue: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.common.AnyValue();
            if (object.type != null)
                message.type = String(object.type);
            if (object.json != null) {
                if (!$util.isObject(object.json))
                    throw TypeError(".common.AnyValue.json: object expected");
                message.json = $root.common.StringValue.fromObject(object.json, long + 1);
            }
            if (object.bytes != null) {
                if (!$util.isObject(object.bytes))
                    throw TypeError(".common.AnyValue.bytes: object expected");
                message.bytes = $root.common.BytesValue.fromObject(object.bytes, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an AnyValue message. Also converts values to other types if specified.
         * @function toObject
         * @memberof common.AnyValue
         * @static
         * @param {common.AnyValue} message AnyValue
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        AnyValue.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.type = "";
                object.json = null;
                object.bytes = null;
            }
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                object.type = message.type;
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                object.json = $root.common.StringValue.toObject(message.json, options, q + 1);
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                object.bytes = $root.common.BytesValue.toObject(message.bytes, options, q + 1);
            return object;
        };

        /**
         * Converts this AnyValue to JSON.
         * @function toJSON
         * @memberof common.AnyValue
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        AnyValue.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for AnyValue
         * @function getTypeUrl
         * @memberof common.AnyValue
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        AnyValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/common.AnyValue";
        };

        return AnyValue;
    })();

    return common;
})();

$root.file = (function() {

    /**
     * Namespace file.
     * @exports file
     * @namespace
     */
    var file = {};

    file.File = (function() {

        /**
         * Properties of a File.
         * @memberof file
         * @interface IFile
         * @property {boolean|null} [writable] File writable
         * @property {boolean|null} [isVersioned] File isVersioned
         * @property {string|null} [name] File name
         * @property {boolean|null} [isNew] File isNew
         * @property {common.IObjectReference|null} [impl] File impl
         * @property {boolean|null} [isSynced] File isSynced
         */

        /**
         * Constructs a new File.
         * @memberof file
         * @classdesc Represents a File.
         * @implements IFile
         * @constructor
         * @param {file.IFile=} [properties] Properties to set
         */
        function File(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * File writable.
         * @member {boolean} writable
         * @memberof file.File
         * @instance
         */
        File.prototype.writable = false;

        /**
         * File isVersioned.
         * @member {boolean} isVersioned
         * @memberof file.File
         * @instance
         */
        File.prototype.isVersioned = false;

        /**
         * File name.
         * @member {string} name
         * @memberof file.File
         * @instance
         */
        File.prototype.name = "";

        /**
         * File isNew.
         * @member {boolean} isNew
         * @memberof file.File
         * @instance
         */
        File.prototype.isNew = false;

        /**
         * File impl.
         * @member {common.IObjectReference|null|undefined} impl
         * @memberof file.File
         * @instance
         */
        File.prototype.impl = null;

        /**
         * File isSynced.
         * @member {boolean} isSynced
         * @memberof file.File
         * @instance
         */
        File.prototype.isSynced = false;

        /**
         * Creates a new File instance using the specified properties.
         * @function create
         * @memberof file.File
         * @static
         * @param {file.IFile=} [properties] Properties to set
         * @returns {file.File} File instance
         */
        File.create = function create(properties) {
            return new File(properties);
        };

        /**
         * Encodes the specified File message. Does not implicitly {@link file.File.verify|verify} messages.
         * @function encode
         * @memberof file.File
         * @static
         * @param {file.IFile} message File message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        File.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.writable != null && Object.hasOwnProperty.call(message, "writable"))
                writer.uint32(/* id 1, wireType 0 =*/8).bool(message.writable);
            if (message.isVersioned != null && Object.hasOwnProperty.call(message, "isVersioned"))
                writer.uint32(/* id 2, wireType 0 =*/16).bool(message.isVersioned);
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.name);
            if (message.isNew != null && Object.hasOwnProperty.call(message, "isNew"))
                writer.uint32(/* id 4, wireType 0 =*/32).bool(message.isNew);
            if (message.impl != null && Object.hasOwnProperty.call(message, "impl"))
                $root.common.ObjectReference.encode(message.impl, writer.uint32(/* id 5, wireType 2 =*/42).fork(), q + 1).ldelim();
            if (message.isSynced != null && Object.hasOwnProperty.call(message, "isSynced"))
                writer.uint32(/* id 6, wireType 0 =*/48).bool(message.isSynced);
            return writer;
        };

        /**
         * Encodes the specified File message, length delimited. Does not implicitly {@link file.File.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.File
         * @static
         * @param {file.IFile} message File message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        File.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a File message from the specified reader or buffer.
         * @function decode
         * @memberof file.File
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.File} File
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        File.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.File();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.writable = reader.bool();
                        break;
                    }
                case 2: {
                        message.isVersioned = reader.bool();
                        break;
                    }
                case 3: {
                        message.name = reader.string();
                        break;
                    }
                case 4: {
                        message.isNew = reader.bool();
                        break;
                    }
                case 5: {
                        message.impl = $root.common.ObjectReference.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 6: {
                        message.isSynced = reader.bool();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a File message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.File
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.File} File
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        File.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a File message.
         * @function verify
         * @memberof file.File
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        File.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.writable != null && Object.hasOwnProperty.call(message, "writable"))
                if (typeof message.writable !== "boolean")
                    return "writable: boolean expected";
            if (message.isVersioned != null && Object.hasOwnProperty.call(message, "isVersioned"))
                if (typeof message.isVersioned !== "boolean")
                    return "isVersioned: boolean expected";
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                if (!$util.isString(message.name))
                    return "name: string expected";
            if (message.isNew != null && Object.hasOwnProperty.call(message, "isNew"))
                if (typeof message.isNew !== "boolean")
                    return "isNew: boolean expected";
            if (message.impl != null && Object.hasOwnProperty.call(message, "impl")) {
                var error = $root.common.ObjectReference.verify(message.impl, long + 1);
                if (error)
                    return "impl." + error;
            }
            if (message.isSynced != null && Object.hasOwnProperty.call(message, "isSynced"))
                if (typeof message.isSynced !== "boolean")
                    return "isSynced: boolean expected";
            return null;
        };

        /**
         * Creates a File message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.File
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.File} File
         */
        File.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.File)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.File: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.File();
            if (object.writable != null)
                message.writable = Boolean(object.writable);
            if (object.isVersioned != null)
                message.isVersioned = Boolean(object.isVersioned);
            if (object.name != null)
                message.name = String(object.name);
            if (object.isNew != null)
                message.isNew = Boolean(object.isNew);
            if (object.impl != null) {
                if (!$util.isObject(object.impl))
                    throw TypeError(".file.File.impl: object expected");
                message.impl = $root.common.ObjectReference.fromObject(object.impl, long + 1);
            }
            if (object.isSynced != null)
                message.isSynced = Boolean(object.isSynced);
            return message;
        };

        /**
         * Creates a plain object from a File message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.File
         * @static
         * @param {file.File} message File
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        File.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.writable = false;
                object.isVersioned = false;
                object.name = "";
                object.isNew = false;
                object.impl = null;
                object.isSynced = false;
            }
            if (message.writable != null && Object.hasOwnProperty.call(message, "writable"))
                object.writable = message.writable;
            if (message.isVersioned != null && Object.hasOwnProperty.call(message, "isVersioned"))
                object.isVersioned = message.isVersioned;
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                object.name = message.name;
            if (message.isNew != null && Object.hasOwnProperty.call(message, "isNew"))
                object.isNew = message.isNew;
            if (message.impl != null && Object.hasOwnProperty.call(message, "impl"))
                object.impl = $root.common.ObjectReference.toObject(message.impl, options, q + 1);
            if (message.isSynced != null && Object.hasOwnProperty.call(message, "isSynced"))
                object.isSynced = message.isSynced;
            return object;
        };

        /**
         * Converts this File to JSON.
         * @function toJSON
         * @memberof file.File
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        File.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for File
         * @function getTypeUrl
         * @memberof file.File
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        File.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.File";
        };

        return File;
    })();

    file.SyncStatusMsg = (function() {

        /**
         * Properties of a SyncStatusMsg.
         * @memberof file
         * @interface ISyncStatusMsg
         * @property {string|null} [state] SyncStatusMsg state
         * @property {file.ISyncVersionsBranchMsg|null} [local] SyncStatusMsg local
         * @property {file.ISyncVersionsBranchMsg|null} [synced] SyncStatusMsg synced
         * @property {file.ISyncVersionsBranchMsg|null} [remote] SyncStatusMsg remote
         * @property {common.IBooleanValue|null} [existsInSyncedParent] SyncStatusMsg existsInSyncedParent
         * @property {file.IUploadingStateMsg|null} [uploading] SyncStatusMsg uploading
         */

        /**
         * Constructs a new SyncStatusMsg.
         * @memberof file
         * @classdesc Represents a SyncStatusMsg.
         * @implements ISyncStatusMsg
         * @constructor
         * @param {file.ISyncStatusMsg=} [properties] Properties to set
         */
        function SyncStatusMsg(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * SyncStatusMsg state.
         * @member {string} state
         * @memberof file.SyncStatusMsg
         * @instance
         */
        SyncStatusMsg.prototype.state = "";

        /**
         * SyncStatusMsg local.
         * @member {file.ISyncVersionsBranchMsg|null|undefined} local
         * @memberof file.SyncStatusMsg
         * @instance
         */
        SyncStatusMsg.prototype.local = null;

        /**
         * SyncStatusMsg synced.
         * @member {file.ISyncVersionsBranchMsg|null|undefined} synced
         * @memberof file.SyncStatusMsg
         * @instance
         */
        SyncStatusMsg.prototype.synced = null;

        /**
         * SyncStatusMsg remote.
         * @member {file.ISyncVersionsBranchMsg|null|undefined} remote
         * @memberof file.SyncStatusMsg
         * @instance
         */
        SyncStatusMsg.prototype.remote = null;

        /**
         * SyncStatusMsg existsInSyncedParent.
         * @member {common.IBooleanValue|null|undefined} existsInSyncedParent
         * @memberof file.SyncStatusMsg
         * @instance
         */
        SyncStatusMsg.prototype.existsInSyncedParent = null;

        /**
         * SyncStatusMsg uploading.
         * @member {file.IUploadingStateMsg|null|undefined} uploading
         * @memberof file.SyncStatusMsg
         * @instance
         */
        SyncStatusMsg.prototype.uploading = null;

        /**
         * Creates a new SyncStatusMsg instance using the specified properties.
         * @function create
         * @memberof file.SyncStatusMsg
         * @static
         * @param {file.ISyncStatusMsg=} [properties] Properties to set
         * @returns {file.SyncStatusMsg} SyncStatusMsg instance
         */
        SyncStatusMsg.create = function create(properties) {
            return new SyncStatusMsg(properties);
        };

        /**
         * Encodes the specified SyncStatusMsg message. Does not implicitly {@link file.SyncStatusMsg.verify|verify} messages.
         * @function encode
         * @memberof file.SyncStatusMsg
         * @static
         * @param {file.ISyncStatusMsg} message SyncStatusMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SyncStatusMsg.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.state != null && Object.hasOwnProperty.call(message, "state"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.state);
            if (message.local != null && Object.hasOwnProperty.call(message, "local"))
                $root.file.SyncVersionsBranchMsg.encode(message.local, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.synced != null && Object.hasOwnProperty.call(message, "synced"))
                $root.file.SyncVersionsBranchMsg.encode(message.synced, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                $root.file.SyncVersionsBranchMsg.encode(message.remote, writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
            if (message.existsInSyncedParent != null && Object.hasOwnProperty.call(message, "existsInSyncedParent"))
                $root.common.BooleanValue.encode(message.existsInSyncedParent, writer.uint32(/* id 5, wireType 2 =*/42).fork(), q + 1).ldelim();
            if (message.uploading != null && Object.hasOwnProperty.call(message, "uploading"))
                $root.file.UploadingStateMsg.encode(message.uploading, writer.uint32(/* id 6, wireType 2 =*/50).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified SyncStatusMsg message, length delimited. Does not implicitly {@link file.SyncStatusMsg.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.SyncStatusMsg
         * @static
         * @param {file.ISyncStatusMsg} message SyncStatusMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SyncStatusMsg.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a SyncStatusMsg message from the specified reader or buffer.
         * @function decode
         * @memberof file.SyncStatusMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.SyncStatusMsg} SyncStatusMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SyncStatusMsg.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.SyncStatusMsg();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.state = reader.string();
                        break;
                    }
                case 2: {
                        message.local = $root.file.SyncVersionsBranchMsg.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.synced = $root.file.SyncVersionsBranchMsg.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 4: {
                        message.remote = $root.file.SyncVersionsBranchMsg.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 5: {
                        message.existsInSyncedParent = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 6: {
                        message.uploading = $root.file.UploadingStateMsg.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a SyncStatusMsg message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.SyncStatusMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.SyncStatusMsg} SyncStatusMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SyncStatusMsg.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a SyncStatusMsg message.
         * @function verify
         * @memberof file.SyncStatusMsg
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        SyncStatusMsg.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.state != null && Object.hasOwnProperty.call(message, "state"))
                if (!$util.isString(message.state))
                    return "state: string expected";
            if (message.local != null && Object.hasOwnProperty.call(message, "local")) {
                var error = $root.file.SyncVersionsBranchMsg.verify(message.local, long + 1);
                if (error)
                    return "local." + error;
            }
            if (message.synced != null && Object.hasOwnProperty.call(message, "synced")) {
                var error = $root.file.SyncVersionsBranchMsg.verify(message.synced, long + 1);
                if (error)
                    return "synced." + error;
            }
            if (message.remote != null && Object.hasOwnProperty.call(message, "remote")) {
                var error = $root.file.SyncVersionsBranchMsg.verify(message.remote, long + 1);
                if (error)
                    return "remote." + error;
            }
            if (message.existsInSyncedParent != null && Object.hasOwnProperty.call(message, "existsInSyncedParent")) {
                var error = $root.common.BooleanValue.verify(message.existsInSyncedParent, long + 1);
                if (error)
                    return "existsInSyncedParent." + error;
            }
            if (message.uploading != null && Object.hasOwnProperty.call(message, "uploading")) {
                var error = $root.file.UploadingStateMsg.verify(message.uploading, long + 1);
                if (error)
                    return "uploading." + error;
            }
            return null;
        };

        /**
         * Creates a SyncStatusMsg message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.SyncStatusMsg
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.SyncStatusMsg} SyncStatusMsg
         */
        SyncStatusMsg.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.SyncStatusMsg)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.SyncStatusMsg: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.SyncStatusMsg();
            if (object.state != null)
                message.state = String(object.state);
            if (object.local != null) {
                if (!$util.isObject(object.local))
                    throw TypeError(".file.SyncStatusMsg.local: object expected");
                message.local = $root.file.SyncVersionsBranchMsg.fromObject(object.local, long + 1);
            }
            if (object.synced != null) {
                if (!$util.isObject(object.synced))
                    throw TypeError(".file.SyncStatusMsg.synced: object expected");
                message.synced = $root.file.SyncVersionsBranchMsg.fromObject(object.synced, long + 1);
            }
            if (object.remote != null) {
                if (!$util.isObject(object.remote))
                    throw TypeError(".file.SyncStatusMsg.remote: object expected");
                message.remote = $root.file.SyncVersionsBranchMsg.fromObject(object.remote, long + 1);
            }
            if (object.existsInSyncedParent != null) {
                if (!$util.isObject(object.existsInSyncedParent))
                    throw TypeError(".file.SyncStatusMsg.existsInSyncedParent: object expected");
                message.existsInSyncedParent = $root.common.BooleanValue.fromObject(object.existsInSyncedParent, long + 1);
            }
            if (object.uploading != null) {
                if (!$util.isObject(object.uploading))
                    throw TypeError(".file.SyncStatusMsg.uploading: object expected");
                message.uploading = $root.file.UploadingStateMsg.fromObject(object.uploading, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a SyncStatusMsg message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.SyncStatusMsg
         * @static
         * @param {file.SyncStatusMsg} message SyncStatusMsg
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        SyncStatusMsg.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.state = "";
                object.local = null;
                object.synced = null;
                object.remote = null;
                object.existsInSyncedParent = null;
                object.uploading = null;
            }
            if (message.state != null && Object.hasOwnProperty.call(message, "state"))
                object.state = message.state;
            if (message.local != null && Object.hasOwnProperty.call(message, "local"))
                object.local = $root.file.SyncVersionsBranchMsg.toObject(message.local, options, q + 1);
            if (message.synced != null && Object.hasOwnProperty.call(message, "synced"))
                object.synced = $root.file.SyncVersionsBranchMsg.toObject(message.synced, options, q + 1);
            if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                object.remote = $root.file.SyncVersionsBranchMsg.toObject(message.remote, options, q + 1);
            if (message.existsInSyncedParent != null && Object.hasOwnProperty.call(message, "existsInSyncedParent"))
                object.existsInSyncedParent = $root.common.BooleanValue.toObject(message.existsInSyncedParent, options, q + 1);
            if (message.uploading != null && Object.hasOwnProperty.call(message, "uploading"))
                object.uploading = $root.file.UploadingStateMsg.toObject(message.uploading, options, q + 1);
            return object;
        };

        /**
         * Converts this SyncStatusMsg to JSON.
         * @function toJSON
         * @memberof file.SyncStatusMsg
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        SyncStatusMsg.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for SyncStatusMsg
         * @function getTypeUrl
         * @memberof file.SyncStatusMsg
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        SyncStatusMsg.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.SyncStatusMsg";
        };

        return SyncStatusMsg;
    })();

    file.SyncVersionsBranchMsg = (function() {

        /**
         * Properties of a SyncVersionsBranchMsg.
         * @memberof file
         * @interface ISyncVersionsBranchMsg
         * @property {common.IUInt64Value|null} [latest] SyncVersionsBranchMsg latest
         * @property {Array.<number|Long>|null} [archived] SyncVersionsBranchMsg archived
         * @property {common.IBooleanValue|null} [isArchived] SyncVersionsBranchMsg isArchived
         */

        /**
         * Constructs a new SyncVersionsBranchMsg.
         * @memberof file
         * @classdesc Represents a SyncVersionsBranchMsg.
         * @implements ISyncVersionsBranchMsg
         * @constructor
         * @param {file.ISyncVersionsBranchMsg=} [properties] Properties to set
         */
        function SyncVersionsBranchMsg(properties) {
            this.archived = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * SyncVersionsBranchMsg latest.
         * @member {common.IUInt64Value|null|undefined} latest
         * @memberof file.SyncVersionsBranchMsg
         * @instance
         */
        SyncVersionsBranchMsg.prototype.latest = null;

        /**
         * SyncVersionsBranchMsg archived.
         * @member {Array.<number|Long>} archived
         * @memberof file.SyncVersionsBranchMsg
         * @instance
         */
        SyncVersionsBranchMsg.prototype.archived = $util.emptyArray;

        /**
         * SyncVersionsBranchMsg isArchived.
         * @member {common.IBooleanValue|null|undefined} isArchived
         * @memberof file.SyncVersionsBranchMsg
         * @instance
         */
        SyncVersionsBranchMsg.prototype.isArchived = null;

        /**
         * Creates a new SyncVersionsBranchMsg instance using the specified properties.
         * @function create
         * @memberof file.SyncVersionsBranchMsg
         * @static
         * @param {file.ISyncVersionsBranchMsg=} [properties] Properties to set
         * @returns {file.SyncVersionsBranchMsg} SyncVersionsBranchMsg instance
         */
        SyncVersionsBranchMsg.create = function create(properties) {
            return new SyncVersionsBranchMsg(properties);
        };

        /**
         * Encodes the specified SyncVersionsBranchMsg message. Does not implicitly {@link file.SyncVersionsBranchMsg.verify|verify} messages.
         * @function encode
         * @memberof file.SyncVersionsBranchMsg
         * @static
         * @param {file.ISyncVersionsBranchMsg} message SyncVersionsBranchMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SyncVersionsBranchMsg.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.latest != null && Object.hasOwnProperty.call(message, "latest"))
                $root.common.UInt64Value.encode(message.latest, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.archived != null && message.archived.length) {
                writer.uint32(/* id 2, wireType 2 =*/18).fork();
                for (var i = 0; i < message.archived.length; ++i)
                    writer.uint64(message.archived[i]);
                writer.ldelim();
            }
            if (message.isArchived != null && Object.hasOwnProperty.call(message, "isArchived"))
                $root.common.BooleanValue.encode(message.isArchived, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified SyncVersionsBranchMsg message, length delimited. Does not implicitly {@link file.SyncVersionsBranchMsg.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.SyncVersionsBranchMsg
         * @static
         * @param {file.ISyncVersionsBranchMsg} message SyncVersionsBranchMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SyncVersionsBranchMsg.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a SyncVersionsBranchMsg message from the specified reader or buffer.
         * @function decode
         * @memberof file.SyncVersionsBranchMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.SyncVersionsBranchMsg} SyncVersionsBranchMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SyncVersionsBranchMsg.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.SyncVersionsBranchMsg();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.latest = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        if (!(message.archived && message.archived.length))
                            message.archived = [];
                        if ((tag & 7) === 2) {
                            var end2 = reader.uint32() + reader.pos;
                            while (reader.pos < end2)
                                message.archived.push(reader.uint64());
                        } else
                            message.archived.push(reader.uint64());
                        break;
                    }
                case 3: {
                        message.isArchived = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a SyncVersionsBranchMsg message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.SyncVersionsBranchMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.SyncVersionsBranchMsg} SyncVersionsBranchMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SyncVersionsBranchMsg.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a SyncVersionsBranchMsg message.
         * @function verify
         * @memberof file.SyncVersionsBranchMsg
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        SyncVersionsBranchMsg.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.latest != null && Object.hasOwnProperty.call(message, "latest")) {
                var error = $root.common.UInt64Value.verify(message.latest, long + 1);
                if (error)
                    return "latest." + error;
            }
            if (message.archived != null && Object.hasOwnProperty.call(message, "archived")) {
                if (!Array.isArray(message.archived))
                    return "archived: array expected";
                for (var i = 0; i < message.archived.length; ++i)
                    if (!$util.isInteger(message.archived[i]) && !(message.archived[i] && $util.isInteger(message.archived[i].low) && $util.isInteger(message.archived[i].high)))
                        return "archived: integer|Long[] expected";
            }
            if (message.isArchived != null && Object.hasOwnProperty.call(message, "isArchived")) {
                var error = $root.common.BooleanValue.verify(message.isArchived, long + 1);
                if (error)
                    return "isArchived." + error;
            }
            return null;
        };

        /**
         * Creates a SyncVersionsBranchMsg message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.SyncVersionsBranchMsg
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.SyncVersionsBranchMsg} SyncVersionsBranchMsg
         */
        SyncVersionsBranchMsg.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.SyncVersionsBranchMsg)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.SyncVersionsBranchMsg: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.SyncVersionsBranchMsg();
            if (object.latest != null) {
                if (!$util.isObject(object.latest))
                    throw TypeError(".file.SyncVersionsBranchMsg.latest: object expected");
                message.latest = $root.common.UInt64Value.fromObject(object.latest, long + 1);
            }
            if (object.archived) {
                if (!Array.isArray(object.archived))
                    throw TypeError(".file.SyncVersionsBranchMsg.archived: array expected");
                message.archived = [];
                for (var i = 0; i < object.archived.length; ++i)
                    if ($util.Long)
                        message.archived[i] = $util.Long.fromValue(object.archived[i], true);
                    else if (typeof object.archived[i] === "string")
                        message.archived[i] = parseInt(object.archived[i], 10);
                    else if (typeof object.archived[i] === "number")
                        message.archived[i] = object.archived[i];
                    else if (typeof object.archived[i] === "object")
                        message.archived[i] = new $util.LongBits(object.archived[i].low >>> 0, object.archived[i].high >>> 0).toNumber(true);
            }
            if (object.isArchived != null) {
                if (!$util.isObject(object.isArchived))
                    throw TypeError(".file.SyncVersionsBranchMsg.isArchived: object expected");
                message.isArchived = $root.common.BooleanValue.fromObject(object.isArchived, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a SyncVersionsBranchMsg message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.SyncVersionsBranchMsg
         * @static
         * @param {file.SyncVersionsBranchMsg} message SyncVersionsBranchMsg
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        SyncVersionsBranchMsg.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.archived = [];
            if (options.defaults) {
                object.latest = null;
                object.isArchived = null;
            }
            if (message.latest != null && Object.hasOwnProperty.call(message, "latest"))
                object.latest = $root.common.UInt64Value.toObject(message.latest, options, q + 1);
            if (message.archived && message.archived.length) {
                object.archived = [];
                for (var j = 0; j < message.archived.length; ++j)
                    if (typeof BigInt !== "undefined" && options.longs === BigInt)
                        object.archived[j] = typeof message.archived[j] === "number" ? BigInt(message.archived[j]) : $util.Long.fromBits(message.archived[j].low >>> 0, message.archived[j].high >>> 0, true).toBigInt();
                    else if (typeof message.archived[j] === "number")
                        object.archived[j] = options.longs === String ? String(message.archived[j]) : message.archived[j];
                    else
                        object.archived[j] = options.longs === String ? $util.Long.prototype.toString.call(message.archived[j]) : options.longs === Number ? new $util.LongBits(message.archived[j].low >>> 0, message.archived[j].high >>> 0).toNumber(true) : message.archived[j];
            }
            if (message.isArchived != null && Object.hasOwnProperty.call(message, "isArchived"))
                object.isArchived = $root.common.BooleanValue.toObject(message.isArchived, options, q + 1);
            return object;
        };

        /**
         * Converts this SyncVersionsBranchMsg to JSON.
         * @function toJSON
         * @memberof file.SyncVersionsBranchMsg
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        SyncVersionsBranchMsg.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for SyncVersionsBranchMsg
         * @function getTypeUrl
         * @memberof file.SyncVersionsBranchMsg
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        SyncVersionsBranchMsg.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.SyncVersionsBranchMsg";
        };

        return SyncVersionsBranchMsg;
    })();

    file.UploadingStateMsg = (function() {

        /**
         * Properties of an UploadingStateMsg.
         * @memberof file
         * @interface IUploadingStateMsg
         * @property {number|Long|null} [localVersion] UploadingStateMsg localVersion
         * @property {number|Long|null} [remoteVersion] UploadingStateMsg remoteVersion
         * @property {number|Long|null} [bytesLeftToUpload] UploadingStateMsg bytesLeftToUpload
         * @property {boolean|null} [uploadStarted] UploadingStateMsg uploadStarted
         */

        /**
         * Constructs a new UploadingStateMsg.
         * @memberof file
         * @classdesc Represents an UploadingStateMsg.
         * @implements IUploadingStateMsg
         * @constructor
         * @param {file.IUploadingStateMsg=} [properties] Properties to set
         */
        function UploadingStateMsg(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UploadingStateMsg localVersion.
         * @member {number|Long} localVersion
         * @memberof file.UploadingStateMsg
         * @instance
         */
        UploadingStateMsg.prototype.localVersion = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * UploadingStateMsg remoteVersion.
         * @member {number|Long} remoteVersion
         * @memberof file.UploadingStateMsg
         * @instance
         */
        UploadingStateMsg.prototype.remoteVersion = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * UploadingStateMsg bytesLeftToUpload.
         * @member {number|Long} bytesLeftToUpload
         * @memberof file.UploadingStateMsg
         * @instance
         */
        UploadingStateMsg.prototype.bytesLeftToUpload = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * UploadingStateMsg uploadStarted.
         * @member {boolean} uploadStarted
         * @memberof file.UploadingStateMsg
         * @instance
         */
        UploadingStateMsg.prototype.uploadStarted = false;

        /**
         * Creates a new UploadingStateMsg instance using the specified properties.
         * @function create
         * @memberof file.UploadingStateMsg
         * @static
         * @param {file.IUploadingStateMsg=} [properties] Properties to set
         * @returns {file.UploadingStateMsg} UploadingStateMsg instance
         */
        UploadingStateMsg.create = function create(properties) {
            return new UploadingStateMsg(properties);
        };

        /**
         * Encodes the specified UploadingStateMsg message. Does not implicitly {@link file.UploadingStateMsg.verify|verify} messages.
         * @function encode
         * @memberof file.UploadingStateMsg
         * @static
         * @param {file.IUploadingStateMsg} message UploadingStateMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UploadingStateMsg.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.localVersion);
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.remoteVersion);
            if (message.bytesLeftToUpload != null && Object.hasOwnProperty.call(message, "bytesLeftToUpload"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint64(message.bytesLeftToUpload);
            if (message.uploadStarted != null && Object.hasOwnProperty.call(message, "uploadStarted"))
                writer.uint32(/* id 4, wireType 0 =*/32).bool(message.uploadStarted);
            return writer;
        };

        /**
         * Encodes the specified UploadingStateMsg message, length delimited. Does not implicitly {@link file.UploadingStateMsg.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.UploadingStateMsg
         * @static
         * @param {file.IUploadingStateMsg} message UploadingStateMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UploadingStateMsg.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an UploadingStateMsg message from the specified reader or buffer.
         * @function decode
         * @memberof file.UploadingStateMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.UploadingStateMsg} UploadingStateMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UploadingStateMsg.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.UploadingStateMsg();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.localVersion = reader.uint64();
                        break;
                    }
                case 2: {
                        message.remoteVersion = reader.uint64();
                        break;
                    }
                case 3: {
                        message.bytesLeftToUpload = reader.uint64();
                        break;
                    }
                case 4: {
                        message.uploadStarted = reader.bool();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an UploadingStateMsg message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.UploadingStateMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.UploadingStateMsg} UploadingStateMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UploadingStateMsg.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an UploadingStateMsg message.
         * @function verify
         * @memberof file.UploadingStateMsg
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UploadingStateMsg.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                if (!$util.isInteger(message.localVersion) && !(message.localVersion && $util.isInteger(message.localVersion.low) && $util.isInteger(message.localVersion.high)))
                    return "localVersion: integer|Long expected";
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                if (!$util.isInteger(message.remoteVersion) && !(message.remoteVersion && $util.isInteger(message.remoteVersion.low) && $util.isInteger(message.remoteVersion.high)))
                    return "remoteVersion: integer|Long expected";
            if (message.bytesLeftToUpload != null && Object.hasOwnProperty.call(message, "bytesLeftToUpload"))
                if (!$util.isInteger(message.bytesLeftToUpload) && !(message.bytesLeftToUpload && $util.isInteger(message.bytesLeftToUpload.low) && $util.isInteger(message.bytesLeftToUpload.high)))
                    return "bytesLeftToUpload: integer|Long expected";
            if (message.uploadStarted != null && Object.hasOwnProperty.call(message, "uploadStarted"))
                if (typeof message.uploadStarted !== "boolean")
                    return "uploadStarted: boolean expected";
            return null;
        };

        /**
         * Creates an UploadingStateMsg message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.UploadingStateMsg
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.UploadingStateMsg} UploadingStateMsg
         */
        UploadingStateMsg.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.UploadingStateMsg)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.UploadingStateMsg: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.UploadingStateMsg();
            if (object.localVersion != null)
                if ($util.Long)
                    message.localVersion = $util.Long.fromValue(object.localVersion, true);
                else if (typeof object.localVersion === "string")
                    message.localVersion = parseInt(object.localVersion, 10);
                else if (typeof object.localVersion === "number")
                    message.localVersion = object.localVersion;
                else if (typeof object.localVersion === "object")
                    message.localVersion = new $util.LongBits(object.localVersion.low >>> 0, object.localVersion.high >>> 0).toNumber(true);
            if (object.remoteVersion != null)
                if ($util.Long)
                    message.remoteVersion = $util.Long.fromValue(object.remoteVersion, true);
                else if (typeof object.remoteVersion === "string")
                    message.remoteVersion = parseInt(object.remoteVersion, 10);
                else if (typeof object.remoteVersion === "number")
                    message.remoteVersion = object.remoteVersion;
                else if (typeof object.remoteVersion === "object")
                    message.remoteVersion = new $util.LongBits(object.remoteVersion.low >>> 0, object.remoteVersion.high >>> 0).toNumber(true);
            if (object.bytesLeftToUpload != null)
                if ($util.Long)
                    message.bytesLeftToUpload = $util.Long.fromValue(object.bytesLeftToUpload, true);
                else if (typeof object.bytesLeftToUpload === "string")
                    message.bytesLeftToUpload = parseInt(object.bytesLeftToUpload, 10);
                else if (typeof object.bytesLeftToUpload === "number")
                    message.bytesLeftToUpload = object.bytesLeftToUpload;
                else if (typeof object.bytesLeftToUpload === "object")
                    message.bytesLeftToUpload = new $util.LongBits(object.bytesLeftToUpload.low >>> 0, object.bytesLeftToUpload.high >>> 0).toNumber(true);
            if (object.uploadStarted != null)
                message.uploadStarted = Boolean(object.uploadStarted);
            return message;
        };

        /**
         * Creates a plain object from an UploadingStateMsg message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.UploadingStateMsg
         * @static
         * @param {file.UploadingStateMsg} message UploadingStateMsg
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UploadingStateMsg.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.localVersion = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.localVersion = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.remoteVersion = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.remoteVersion = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.bytesLeftToUpload = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.bytesLeftToUpload = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                object.uploadStarted = false;
            }
            if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.localVersion = typeof message.localVersion === "number" ? BigInt(message.localVersion) : $util.Long.fromBits(message.localVersion.low >>> 0, message.localVersion.high >>> 0, true).toBigInt();
                else if (typeof message.localVersion === "number")
                    object.localVersion = options.longs === String ? String(message.localVersion) : message.localVersion;
                else
                    object.localVersion = options.longs === String ? $util.Long.prototype.toString.call(message.localVersion) : options.longs === Number ? new $util.LongBits(message.localVersion.low >>> 0, message.localVersion.high >>> 0).toNumber(true) : message.localVersion;
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.remoteVersion = typeof message.remoteVersion === "number" ? BigInt(message.remoteVersion) : $util.Long.fromBits(message.remoteVersion.low >>> 0, message.remoteVersion.high >>> 0, true).toBigInt();
                else if (typeof message.remoteVersion === "number")
                    object.remoteVersion = options.longs === String ? String(message.remoteVersion) : message.remoteVersion;
                else
                    object.remoteVersion = options.longs === String ? $util.Long.prototype.toString.call(message.remoteVersion) : options.longs === Number ? new $util.LongBits(message.remoteVersion.low >>> 0, message.remoteVersion.high >>> 0).toNumber(true) : message.remoteVersion;
            if (message.bytesLeftToUpload != null && Object.hasOwnProperty.call(message, "bytesLeftToUpload"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.bytesLeftToUpload = typeof message.bytesLeftToUpload === "number" ? BigInt(message.bytesLeftToUpload) : $util.Long.fromBits(message.bytesLeftToUpload.low >>> 0, message.bytesLeftToUpload.high >>> 0, true).toBigInt();
                else if (typeof message.bytesLeftToUpload === "number")
                    object.bytesLeftToUpload = options.longs === String ? String(message.bytesLeftToUpload) : message.bytesLeftToUpload;
                else
                    object.bytesLeftToUpload = options.longs === String ? $util.Long.prototype.toString.call(message.bytesLeftToUpload) : options.longs === Number ? new $util.LongBits(message.bytesLeftToUpload.low >>> 0, message.bytesLeftToUpload.high >>> 0).toNumber(true) : message.bytesLeftToUpload;
            if (message.uploadStarted != null && Object.hasOwnProperty.call(message, "uploadStarted"))
                object.uploadStarted = message.uploadStarted;
            return object;
        };

        /**
         * Converts this UploadingStateMsg to JSON.
         * @function toJSON
         * @memberof file.UploadingStateMsg
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UploadingStateMsg.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for UploadingStateMsg
         * @function getTypeUrl
         * @memberof file.UploadingStateMsg
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        UploadingStateMsg.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.UploadingStateMsg";
        };

        return UploadingStateMsg;
    })();

    file.StatsMsg = (function() {

        /**
         * Properties of a StatsMsg.
         * @memberof file
         * @interface IStatsMsg
         * @property {common.IBooleanValue|null} [isFile] StatsMsg isFile
         * @property {common.IBooleanValue|null} [isFolder] StatsMsg isFolder
         * @property {common.IBooleanValue|null} [isLink] StatsMsg isLink
         * @property {boolean|null} [writable] StatsMsg writable
         * @property {common.IUInt64Value|null} [size] StatsMsg size
         * @property {common.IUInt64Value|null} [mtime] StatsMsg mtime
         * @property {common.IUInt64Value|null} [ctime] StatsMsg ctime
         * @property {common.IUInt64Value|null} [version] StatsMsg version
         * @property {common.IUInt64Value|null} [bytesNeedDownload] StatsMsg bytesNeedDownload
         * @property {common.IStringValue|null} [versionSyncBranch] StatsMsg versionSyncBranch
         */

        /**
         * Constructs a new StatsMsg.
         * @memberof file
         * @classdesc Represents a StatsMsg.
         * @implements IStatsMsg
         * @constructor
         * @param {file.IStatsMsg=} [properties] Properties to set
         */
        function StatsMsg(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * StatsMsg isFile.
         * @member {common.IBooleanValue|null|undefined} isFile
         * @memberof file.StatsMsg
         * @instance
         */
        StatsMsg.prototype.isFile = null;

        /**
         * StatsMsg isFolder.
         * @member {common.IBooleanValue|null|undefined} isFolder
         * @memberof file.StatsMsg
         * @instance
         */
        StatsMsg.prototype.isFolder = null;

        /**
         * StatsMsg isLink.
         * @member {common.IBooleanValue|null|undefined} isLink
         * @memberof file.StatsMsg
         * @instance
         */
        StatsMsg.prototype.isLink = null;

        /**
         * StatsMsg writable.
         * @member {boolean} writable
         * @memberof file.StatsMsg
         * @instance
         */
        StatsMsg.prototype.writable = false;

        /**
         * StatsMsg size.
         * @member {common.IUInt64Value|null|undefined} size
         * @memberof file.StatsMsg
         * @instance
         */
        StatsMsg.prototype.size = null;

        /**
         * StatsMsg mtime.
         * @member {common.IUInt64Value|null|undefined} mtime
         * @memberof file.StatsMsg
         * @instance
         */
        StatsMsg.prototype.mtime = null;

        /**
         * StatsMsg ctime.
         * @member {common.IUInt64Value|null|undefined} ctime
         * @memberof file.StatsMsg
         * @instance
         */
        StatsMsg.prototype.ctime = null;

        /**
         * StatsMsg version.
         * @member {common.IUInt64Value|null|undefined} version
         * @memberof file.StatsMsg
         * @instance
         */
        StatsMsg.prototype.version = null;

        /**
         * StatsMsg bytesNeedDownload.
         * @member {common.IUInt64Value|null|undefined} bytesNeedDownload
         * @memberof file.StatsMsg
         * @instance
         */
        StatsMsg.prototype.bytesNeedDownload = null;

        /**
         * StatsMsg versionSyncBranch.
         * @member {common.IStringValue|null|undefined} versionSyncBranch
         * @memberof file.StatsMsg
         * @instance
         */
        StatsMsg.prototype.versionSyncBranch = null;

        /**
         * Creates a new StatsMsg instance using the specified properties.
         * @function create
         * @memberof file.StatsMsg
         * @static
         * @param {file.IStatsMsg=} [properties] Properties to set
         * @returns {file.StatsMsg} StatsMsg instance
         */
        StatsMsg.create = function create(properties) {
            return new StatsMsg(properties);
        };

        /**
         * Encodes the specified StatsMsg message. Does not implicitly {@link file.StatsMsg.verify|verify} messages.
         * @function encode
         * @memberof file.StatsMsg
         * @static
         * @param {file.IStatsMsg} message StatsMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        StatsMsg.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile"))
                $root.common.BooleanValue.encode(message.isFile, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder"))
                $root.common.BooleanValue.encode(message.isFolder, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.isLink != null && Object.hasOwnProperty.call(message, "isLink"))
                $root.common.BooleanValue.encode(message.isLink, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.writable != null && Object.hasOwnProperty.call(message, "writable"))
                writer.uint32(/* id 4, wireType 0 =*/32).bool(message.writable);
            if (message.size != null && Object.hasOwnProperty.call(message, "size"))
                $root.common.UInt64Value.encode(message.size, writer.uint32(/* id 5, wireType 2 =*/42).fork(), q + 1).ldelim();
            if (message.mtime != null && Object.hasOwnProperty.call(message, "mtime"))
                $root.common.UInt64Value.encode(message.mtime, writer.uint32(/* id 6, wireType 2 =*/50).fork(), q + 1).ldelim();
            if (message.ctime != null && Object.hasOwnProperty.call(message, "ctime"))
                $root.common.UInt64Value.encode(message.ctime, writer.uint32(/* id 7, wireType 2 =*/58).fork(), q + 1).ldelim();
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                $root.common.UInt64Value.encode(message.version, writer.uint32(/* id 8, wireType 2 =*/66).fork(), q + 1).ldelim();
            if (message.bytesNeedDownload != null && Object.hasOwnProperty.call(message, "bytesNeedDownload"))
                $root.common.UInt64Value.encode(message.bytesNeedDownload, writer.uint32(/* id 9, wireType 2 =*/74).fork(), q + 1).ldelim();
            if (message.versionSyncBranch != null && Object.hasOwnProperty.call(message, "versionSyncBranch"))
                $root.common.StringValue.encode(message.versionSyncBranch, writer.uint32(/* id 10, wireType 2 =*/82).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified StatsMsg message, length delimited. Does not implicitly {@link file.StatsMsg.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.StatsMsg
         * @static
         * @param {file.IStatsMsg} message StatsMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        StatsMsg.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a StatsMsg message from the specified reader or buffer.
         * @function decode
         * @memberof file.StatsMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.StatsMsg} StatsMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        StatsMsg.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.StatsMsg();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.isFile = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.isFolder = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.isLink = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 4: {
                        message.writable = reader.bool();
                        break;
                    }
                case 5: {
                        message.size = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 6: {
                        message.mtime = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 7: {
                        message.ctime = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 8: {
                        message.version = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 9: {
                        message.bytesNeedDownload = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 10: {
                        message.versionSyncBranch = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a StatsMsg message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.StatsMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.StatsMsg} StatsMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        StatsMsg.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a StatsMsg message.
         * @function verify
         * @memberof file.StatsMsg
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        StatsMsg.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile")) {
                var error = $root.common.BooleanValue.verify(message.isFile, long + 1);
                if (error)
                    return "isFile." + error;
            }
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder")) {
                var error = $root.common.BooleanValue.verify(message.isFolder, long + 1);
                if (error)
                    return "isFolder." + error;
            }
            if (message.isLink != null && Object.hasOwnProperty.call(message, "isLink")) {
                var error = $root.common.BooleanValue.verify(message.isLink, long + 1);
                if (error)
                    return "isLink." + error;
            }
            if (message.writable != null && Object.hasOwnProperty.call(message, "writable"))
                if (typeof message.writable !== "boolean")
                    return "writable: boolean expected";
            if (message.size != null && Object.hasOwnProperty.call(message, "size")) {
                var error = $root.common.UInt64Value.verify(message.size, long + 1);
                if (error)
                    return "size." + error;
            }
            if (message.mtime != null && Object.hasOwnProperty.call(message, "mtime")) {
                var error = $root.common.UInt64Value.verify(message.mtime, long + 1);
                if (error)
                    return "mtime." + error;
            }
            if (message.ctime != null && Object.hasOwnProperty.call(message, "ctime")) {
                var error = $root.common.UInt64Value.verify(message.ctime, long + 1);
                if (error)
                    return "ctime." + error;
            }
            if (message.version != null && Object.hasOwnProperty.call(message, "version")) {
                var error = $root.common.UInt64Value.verify(message.version, long + 1);
                if (error)
                    return "version." + error;
            }
            if (message.bytesNeedDownload != null && Object.hasOwnProperty.call(message, "bytesNeedDownload")) {
                var error = $root.common.UInt64Value.verify(message.bytesNeedDownload, long + 1);
                if (error)
                    return "bytesNeedDownload." + error;
            }
            if (message.versionSyncBranch != null && Object.hasOwnProperty.call(message, "versionSyncBranch")) {
                var error = $root.common.StringValue.verify(message.versionSyncBranch, long + 1);
                if (error)
                    return "versionSyncBranch." + error;
            }
            return null;
        };

        /**
         * Creates a StatsMsg message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.StatsMsg
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.StatsMsg} StatsMsg
         */
        StatsMsg.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.StatsMsg)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.StatsMsg: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.StatsMsg();
            if (object.isFile != null) {
                if (!$util.isObject(object.isFile))
                    throw TypeError(".file.StatsMsg.isFile: object expected");
                message.isFile = $root.common.BooleanValue.fromObject(object.isFile, long + 1);
            }
            if (object.isFolder != null) {
                if (!$util.isObject(object.isFolder))
                    throw TypeError(".file.StatsMsg.isFolder: object expected");
                message.isFolder = $root.common.BooleanValue.fromObject(object.isFolder, long + 1);
            }
            if (object.isLink != null) {
                if (!$util.isObject(object.isLink))
                    throw TypeError(".file.StatsMsg.isLink: object expected");
                message.isLink = $root.common.BooleanValue.fromObject(object.isLink, long + 1);
            }
            if (object.writable != null)
                message.writable = Boolean(object.writable);
            if (object.size != null) {
                if (!$util.isObject(object.size))
                    throw TypeError(".file.StatsMsg.size: object expected");
                message.size = $root.common.UInt64Value.fromObject(object.size, long + 1);
            }
            if (object.mtime != null) {
                if (!$util.isObject(object.mtime))
                    throw TypeError(".file.StatsMsg.mtime: object expected");
                message.mtime = $root.common.UInt64Value.fromObject(object.mtime, long + 1);
            }
            if (object.ctime != null) {
                if (!$util.isObject(object.ctime))
                    throw TypeError(".file.StatsMsg.ctime: object expected");
                message.ctime = $root.common.UInt64Value.fromObject(object.ctime, long + 1);
            }
            if (object.version != null) {
                if (!$util.isObject(object.version))
                    throw TypeError(".file.StatsMsg.version: object expected");
                message.version = $root.common.UInt64Value.fromObject(object.version, long + 1);
            }
            if (object.bytesNeedDownload != null) {
                if (!$util.isObject(object.bytesNeedDownload))
                    throw TypeError(".file.StatsMsg.bytesNeedDownload: object expected");
                message.bytesNeedDownload = $root.common.UInt64Value.fromObject(object.bytesNeedDownload, long + 1);
            }
            if (object.versionSyncBranch != null) {
                if (!$util.isObject(object.versionSyncBranch))
                    throw TypeError(".file.StatsMsg.versionSyncBranch: object expected");
                message.versionSyncBranch = $root.common.StringValue.fromObject(object.versionSyncBranch, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a StatsMsg message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.StatsMsg
         * @static
         * @param {file.StatsMsg} message StatsMsg
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        StatsMsg.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.isFile = null;
                object.isFolder = null;
                object.isLink = null;
                object.writable = false;
                object.size = null;
                object.mtime = null;
                object.ctime = null;
                object.version = null;
                object.bytesNeedDownload = null;
                object.versionSyncBranch = null;
            }
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile"))
                object.isFile = $root.common.BooleanValue.toObject(message.isFile, options, q + 1);
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder"))
                object.isFolder = $root.common.BooleanValue.toObject(message.isFolder, options, q + 1);
            if (message.isLink != null && Object.hasOwnProperty.call(message, "isLink"))
                object.isLink = $root.common.BooleanValue.toObject(message.isLink, options, q + 1);
            if (message.writable != null && Object.hasOwnProperty.call(message, "writable"))
                object.writable = message.writable;
            if (message.size != null && Object.hasOwnProperty.call(message, "size"))
                object.size = $root.common.UInt64Value.toObject(message.size, options, q + 1);
            if (message.mtime != null && Object.hasOwnProperty.call(message, "mtime"))
                object.mtime = $root.common.UInt64Value.toObject(message.mtime, options, q + 1);
            if (message.ctime != null && Object.hasOwnProperty.call(message, "ctime"))
                object.ctime = $root.common.UInt64Value.toObject(message.ctime, options, q + 1);
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                object.version = $root.common.UInt64Value.toObject(message.version, options, q + 1);
            if (message.bytesNeedDownload != null && Object.hasOwnProperty.call(message, "bytesNeedDownload"))
                object.bytesNeedDownload = $root.common.UInt64Value.toObject(message.bytesNeedDownload, options, q + 1);
            if (message.versionSyncBranch != null && Object.hasOwnProperty.call(message, "versionSyncBranch"))
                object.versionSyncBranch = $root.common.StringValue.toObject(message.versionSyncBranch, options, q + 1);
            return object;
        };

        /**
         * Converts this StatsMsg to JSON.
         * @function toJSON
         * @memberof file.StatsMsg
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        StatsMsg.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for StatsMsg
         * @function getTypeUrl
         * @memberof file.StatsMsg
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        StatsMsg.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.StatsMsg";
        };

        return StatsMsg;
    })();

    file.GetXAttrRequestBody = (function() {

        /**
         * Properties of a GetXAttrRequestBody.
         * @memberof file
         * @interface IGetXAttrRequestBody
         * @property {string|null} [xaName] GetXAttrRequestBody xaName
         */

        /**
         * Constructs a new GetXAttrRequestBody.
         * @memberof file
         * @classdesc Represents a GetXAttrRequestBody.
         * @implements IGetXAttrRequestBody
         * @constructor
         * @param {file.IGetXAttrRequestBody=} [properties] Properties to set
         */
        function GetXAttrRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * GetXAttrRequestBody xaName.
         * @member {string} xaName
         * @memberof file.GetXAttrRequestBody
         * @instance
         */
        GetXAttrRequestBody.prototype.xaName = "";

        /**
         * Creates a new GetXAttrRequestBody instance using the specified properties.
         * @function create
         * @memberof file.GetXAttrRequestBody
         * @static
         * @param {file.IGetXAttrRequestBody=} [properties] Properties to set
         * @returns {file.GetXAttrRequestBody} GetXAttrRequestBody instance
         */
        GetXAttrRequestBody.create = function create(properties) {
            return new GetXAttrRequestBody(properties);
        };

        /**
         * Encodes the specified GetXAttrRequestBody message. Does not implicitly {@link file.GetXAttrRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.GetXAttrRequestBody
         * @static
         * @param {file.IGetXAttrRequestBody} message GetXAttrRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GetXAttrRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.xaName);
            return writer;
        };

        /**
         * Encodes the specified GetXAttrRequestBody message, length delimited. Does not implicitly {@link file.GetXAttrRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.GetXAttrRequestBody
         * @static
         * @param {file.IGetXAttrRequestBody} message GetXAttrRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GetXAttrRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a GetXAttrRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.GetXAttrRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.GetXAttrRequestBody} GetXAttrRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GetXAttrRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.GetXAttrRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.xaName = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a GetXAttrRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.GetXAttrRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.GetXAttrRequestBody} GetXAttrRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GetXAttrRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a GetXAttrRequestBody message.
         * @function verify
         * @memberof file.GetXAttrRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        GetXAttrRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                if (!$util.isString(message.xaName))
                    return "xaName: string expected";
            return null;
        };

        /**
         * Creates a GetXAttrRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.GetXAttrRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.GetXAttrRequestBody} GetXAttrRequestBody
         */
        GetXAttrRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.GetXAttrRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.GetXAttrRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.GetXAttrRequestBody();
            if (object.xaName != null)
                message.xaName = String(object.xaName);
            return message;
        };

        /**
         * Creates a plain object from a GetXAttrRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.GetXAttrRequestBody
         * @static
         * @param {file.GetXAttrRequestBody} message GetXAttrRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        GetXAttrRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.xaName = "";
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                object.xaName = message.xaName;
            return object;
        };

        /**
         * Converts this GetXAttrRequestBody to JSON.
         * @function toJSON
         * @memberof file.GetXAttrRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        GetXAttrRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for GetXAttrRequestBody
         * @function getTypeUrl
         * @memberof file.GetXAttrRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        GetXAttrRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.GetXAttrRequestBody";
        };

        return GetXAttrRequestBody;
    })();

    file.XAttrValue = (function() {

        /**
         * Properties of a XAttrValue.
         * @memberof file
         * @interface IXAttrValue
         * @property {common.IStringValue|null} [str] XAttrValue str
         * @property {common.IStringValue|null} [json] XAttrValue json
         * @property {common.IBytesValue|null} [bytes] XAttrValue bytes
         */

        /**
         * Constructs a new XAttrValue.
         * @memberof file
         * @classdesc Represents a XAttrValue.
         * @implements IXAttrValue
         * @constructor
         * @param {file.IXAttrValue=} [properties] Properties to set
         */
        function XAttrValue(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * XAttrValue str.
         * @member {common.IStringValue|null|undefined} str
         * @memberof file.XAttrValue
         * @instance
         */
        XAttrValue.prototype.str = null;

        /**
         * XAttrValue json.
         * @member {common.IStringValue|null|undefined} json
         * @memberof file.XAttrValue
         * @instance
         */
        XAttrValue.prototype.json = null;

        /**
         * XAttrValue bytes.
         * @member {common.IBytesValue|null|undefined} bytes
         * @memberof file.XAttrValue
         * @instance
         */
        XAttrValue.prototype.bytes = null;

        /**
         * Creates a new XAttrValue instance using the specified properties.
         * @function create
         * @memberof file.XAttrValue
         * @static
         * @param {file.IXAttrValue=} [properties] Properties to set
         * @returns {file.XAttrValue} XAttrValue instance
         */
        XAttrValue.create = function create(properties) {
            return new XAttrValue(properties);
        };

        /**
         * Encodes the specified XAttrValue message. Does not implicitly {@link file.XAttrValue.verify|verify} messages.
         * @function encode
         * @memberof file.XAttrValue
         * @static
         * @param {file.IXAttrValue} message XAttrValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        XAttrValue.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.str != null && Object.hasOwnProperty.call(message, "str"))
                $root.common.StringValue.encode(message.str, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                $root.common.StringValue.encode(message.json, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                $root.common.BytesValue.encode(message.bytes, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified XAttrValue message, length delimited. Does not implicitly {@link file.XAttrValue.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.XAttrValue
         * @static
         * @param {file.IXAttrValue} message XAttrValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        XAttrValue.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a XAttrValue message from the specified reader or buffer.
         * @function decode
         * @memberof file.XAttrValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.XAttrValue} XAttrValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        XAttrValue.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.XAttrValue();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.str = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.json = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.bytes = $root.common.BytesValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a XAttrValue message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.XAttrValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.XAttrValue} XAttrValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        XAttrValue.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a XAttrValue message.
         * @function verify
         * @memberof file.XAttrValue
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        XAttrValue.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.str != null && Object.hasOwnProperty.call(message, "str")) {
                var error = $root.common.StringValue.verify(message.str, long + 1);
                if (error)
                    return "str." + error;
            }
            if (message.json != null && Object.hasOwnProperty.call(message, "json")) {
                var error = $root.common.StringValue.verify(message.json, long + 1);
                if (error)
                    return "json." + error;
            }
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes")) {
                var error = $root.common.BytesValue.verify(message.bytes, long + 1);
                if (error)
                    return "bytes." + error;
            }
            return null;
        };

        /**
         * Creates a XAttrValue message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.XAttrValue
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.XAttrValue} XAttrValue
         */
        XAttrValue.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.XAttrValue)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.XAttrValue: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.XAttrValue();
            if (object.str != null) {
                if (!$util.isObject(object.str))
                    throw TypeError(".file.XAttrValue.str: object expected");
                message.str = $root.common.StringValue.fromObject(object.str, long + 1);
            }
            if (object.json != null) {
                if (!$util.isObject(object.json))
                    throw TypeError(".file.XAttrValue.json: object expected");
                message.json = $root.common.StringValue.fromObject(object.json, long + 1);
            }
            if (object.bytes != null) {
                if (!$util.isObject(object.bytes))
                    throw TypeError(".file.XAttrValue.bytes: object expected");
                message.bytes = $root.common.BytesValue.fromObject(object.bytes, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a XAttrValue message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.XAttrValue
         * @static
         * @param {file.XAttrValue} message XAttrValue
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        XAttrValue.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.str = null;
                object.json = null;
                object.bytes = null;
            }
            if (message.str != null && Object.hasOwnProperty.call(message, "str"))
                object.str = $root.common.StringValue.toObject(message.str, options, q + 1);
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                object.json = $root.common.StringValue.toObject(message.json, options, q + 1);
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                object.bytes = $root.common.BytesValue.toObject(message.bytes, options, q + 1);
            return object;
        };

        /**
         * Converts this XAttrValue to JSON.
         * @function toJSON
         * @memberof file.XAttrValue
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        XAttrValue.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for XAttrValue
         * @function getTypeUrl
         * @memberof file.XAttrValue
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        XAttrValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.XAttrValue";
        };

        return XAttrValue;
    })();

    file.ReadBytesRequestBody = (function() {

        /**
         * Properties of a ReadBytesRequestBody.
         * @memberof file
         * @interface IReadBytesRequestBody
         * @property {common.IUInt64Value|null} [start] ReadBytesRequestBody start
         * @property {common.IUInt64Value|null} [end] ReadBytesRequestBody end
         */

        /**
         * Constructs a new ReadBytesRequestBody.
         * @memberof file
         * @classdesc Represents a ReadBytesRequestBody.
         * @implements IReadBytesRequestBody
         * @constructor
         * @param {file.IReadBytesRequestBody=} [properties] Properties to set
         */
        function ReadBytesRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * ReadBytesRequestBody start.
         * @member {common.IUInt64Value|null|undefined} start
         * @memberof file.ReadBytesRequestBody
         * @instance
         */
        ReadBytesRequestBody.prototype.start = null;

        /**
         * ReadBytesRequestBody end.
         * @member {common.IUInt64Value|null|undefined} end
         * @memberof file.ReadBytesRequestBody
         * @instance
         */
        ReadBytesRequestBody.prototype.end = null;

        /**
         * Creates a new ReadBytesRequestBody instance using the specified properties.
         * @function create
         * @memberof file.ReadBytesRequestBody
         * @static
         * @param {file.IReadBytesRequestBody=} [properties] Properties to set
         * @returns {file.ReadBytesRequestBody} ReadBytesRequestBody instance
         */
        ReadBytesRequestBody.create = function create(properties) {
            return new ReadBytesRequestBody(properties);
        };

        /**
         * Encodes the specified ReadBytesRequestBody message. Does not implicitly {@link file.ReadBytesRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.ReadBytesRequestBody
         * @static
         * @param {file.IReadBytesRequestBody} message ReadBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ReadBytesRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.start != null && Object.hasOwnProperty.call(message, "start"))
                $root.common.UInt64Value.encode(message.start, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.end != null && Object.hasOwnProperty.call(message, "end"))
                $root.common.UInt64Value.encode(message.end, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified ReadBytesRequestBody message, length delimited. Does not implicitly {@link file.ReadBytesRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.ReadBytesRequestBody
         * @static
         * @param {file.IReadBytesRequestBody} message ReadBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ReadBytesRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a ReadBytesRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.ReadBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.ReadBytesRequestBody} ReadBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ReadBytesRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.ReadBytesRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.start = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.end = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a ReadBytesRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.ReadBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.ReadBytesRequestBody} ReadBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ReadBytesRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a ReadBytesRequestBody message.
         * @function verify
         * @memberof file.ReadBytesRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        ReadBytesRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.start != null && Object.hasOwnProperty.call(message, "start")) {
                var error = $root.common.UInt64Value.verify(message.start, long + 1);
                if (error)
                    return "start." + error;
            }
            if (message.end != null && Object.hasOwnProperty.call(message, "end")) {
                var error = $root.common.UInt64Value.verify(message.end, long + 1);
                if (error)
                    return "end." + error;
            }
            return null;
        };

        /**
         * Creates a ReadBytesRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.ReadBytesRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.ReadBytesRequestBody} ReadBytesRequestBody
         */
        ReadBytesRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.ReadBytesRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.ReadBytesRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.ReadBytesRequestBody();
            if (object.start != null) {
                if (!$util.isObject(object.start))
                    throw TypeError(".file.ReadBytesRequestBody.start: object expected");
                message.start = $root.common.UInt64Value.fromObject(object.start, long + 1);
            }
            if (object.end != null) {
                if (!$util.isObject(object.end))
                    throw TypeError(".file.ReadBytesRequestBody.end: object expected");
                message.end = $root.common.UInt64Value.fromObject(object.end, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a ReadBytesRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.ReadBytesRequestBody
         * @static
         * @param {file.ReadBytesRequestBody} message ReadBytesRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        ReadBytesRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.start = null;
                object.end = null;
            }
            if (message.start != null && Object.hasOwnProperty.call(message, "start"))
                object.start = $root.common.UInt64Value.toObject(message.start, options, q + 1);
            if (message.end != null && Object.hasOwnProperty.call(message, "end"))
                object.end = $root.common.UInt64Value.toObject(message.end, options, q + 1);
            return object;
        };

        /**
         * Converts this ReadBytesRequestBody to JSON.
         * @function toJSON
         * @memberof file.ReadBytesRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        ReadBytesRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for ReadBytesRequestBody
         * @function getTypeUrl
         * @memberof file.ReadBytesRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        ReadBytesRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.ReadBytesRequestBody";
        };

        return ReadBytesRequestBody;
    })();

    file.ReadBytesReplyBody = (function() {

        /**
         * Properties of a ReadBytesReplyBody.
         * @memberof file
         * @interface IReadBytesReplyBody
         * @property {common.IBytesValue|null} [bytes] ReadBytesReplyBody bytes
         */

        /**
         * Constructs a new ReadBytesReplyBody.
         * @memberof file
         * @classdesc Represents a ReadBytesReplyBody.
         * @implements IReadBytesReplyBody
         * @constructor
         * @param {file.IReadBytesReplyBody=} [properties] Properties to set
         */
        function ReadBytesReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * ReadBytesReplyBody bytes.
         * @member {common.IBytesValue|null|undefined} bytes
         * @memberof file.ReadBytesReplyBody
         * @instance
         */
        ReadBytesReplyBody.prototype.bytes = null;

        /**
         * Creates a new ReadBytesReplyBody instance using the specified properties.
         * @function create
         * @memberof file.ReadBytesReplyBody
         * @static
         * @param {file.IReadBytesReplyBody=} [properties] Properties to set
         * @returns {file.ReadBytesReplyBody} ReadBytesReplyBody instance
         */
        ReadBytesReplyBody.create = function create(properties) {
            return new ReadBytesReplyBody(properties);
        };

        /**
         * Encodes the specified ReadBytesReplyBody message. Does not implicitly {@link file.ReadBytesReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.ReadBytesReplyBody
         * @static
         * @param {file.IReadBytesReplyBody} message ReadBytesReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ReadBytesReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                $root.common.BytesValue.encode(message.bytes, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified ReadBytesReplyBody message, length delimited. Does not implicitly {@link file.ReadBytesReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.ReadBytesReplyBody
         * @static
         * @param {file.IReadBytesReplyBody} message ReadBytesReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ReadBytesReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a ReadBytesReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.ReadBytesReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.ReadBytesReplyBody} ReadBytesReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ReadBytesReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.ReadBytesReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.bytes = $root.common.BytesValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a ReadBytesReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.ReadBytesReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.ReadBytesReplyBody} ReadBytesReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ReadBytesReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a ReadBytesReplyBody message.
         * @function verify
         * @memberof file.ReadBytesReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        ReadBytesReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes")) {
                var error = $root.common.BytesValue.verify(message.bytes, long + 1);
                if (error)
                    return "bytes." + error;
            }
            return null;
        };

        /**
         * Creates a ReadBytesReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.ReadBytesReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.ReadBytesReplyBody} ReadBytesReplyBody
         */
        ReadBytesReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.ReadBytesReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.ReadBytesReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.ReadBytesReplyBody();
            if (object.bytes != null) {
                if (!$util.isObject(object.bytes))
                    throw TypeError(".file.ReadBytesReplyBody.bytes: object expected");
                message.bytes = $root.common.BytesValue.fromObject(object.bytes, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a ReadBytesReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.ReadBytesReplyBody
         * @static
         * @param {file.ReadBytesReplyBody} message ReadBytesReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        ReadBytesReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.bytes = null;
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                object.bytes = $root.common.BytesValue.toObject(message.bytes, options, q + 1);
            return object;
        };

        /**
         * Converts this ReadBytesReplyBody to JSON.
         * @function toJSON
         * @memberof file.ReadBytesReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        ReadBytesReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for ReadBytesReplyBody
         * @function getTypeUrl
         * @memberof file.ReadBytesReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        ReadBytesReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.ReadBytesReplyBody";
        };

        return ReadBytesReplyBody;
    })();

    file.VersionedReadFlags = (function() {

        /**
         * Properties of a VersionedReadFlags.
         * @memberof file
         * @interface IVersionedReadFlags
         * @property {common.IUInt64Value|null} [archivedVersion] VersionedReadFlags archivedVersion
         * @property {common.IUInt64Value|null} [remoteVersion] VersionedReadFlags remoteVersion
         */

        /**
         * Constructs a new VersionedReadFlags.
         * @memberof file
         * @classdesc Represents a VersionedReadFlags.
         * @implements IVersionedReadFlags
         * @constructor
         * @param {file.IVersionedReadFlags=} [properties] Properties to set
         */
        function VersionedReadFlags(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedReadFlags archivedVersion.
         * @member {common.IUInt64Value|null|undefined} archivedVersion
         * @memberof file.VersionedReadFlags
         * @instance
         */
        VersionedReadFlags.prototype.archivedVersion = null;

        /**
         * VersionedReadFlags remoteVersion.
         * @member {common.IUInt64Value|null|undefined} remoteVersion
         * @memberof file.VersionedReadFlags
         * @instance
         */
        VersionedReadFlags.prototype.remoteVersion = null;

        /**
         * Creates a new VersionedReadFlags instance using the specified properties.
         * @function create
         * @memberof file.VersionedReadFlags
         * @static
         * @param {file.IVersionedReadFlags=} [properties] Properties to set
         * @returns {file.VersionedReadFlags} VersionedReadFlags instance
         */
        VersionedReadFlags.create = function create(properties) {
            return new VersionedReadFlags(properties);
        };

        /**
         * Encodes the specified VersionedReadFlags message. Does not implicitly {@link file.VersionedReadFlags.verify|verify} messages.
         * @function encode
         * @memberof file.VersionedReadFlags
         * @static
         * @param {file.IVersionedReadFlags} message VersionedReadFlags message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadFlags.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.archivedVersion != null && Object.hasOwnProperty.call(message, "archivedVersion"))
                $root.common.UInt64Value.encode(message.archivedVersion, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                $root.common.UInt64Value.encode(message.remoteVersion, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedReadFlags message, length delimited. Does not implicitly {@link file.VersionedReadFlags.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.VersionedReadFlags
         * @static
         * @param {file.IVersionedReadFlags} message VersionedReadFlags message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadFlags.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedReadFlags message from the specified reader or buffer.
         * @function decode
         * @memberof file.VersionedReadFlags
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.VersionedReadFlags} VersionedReadFlags
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadFlags.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.VersionedReadFlags();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.archivedVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.remoteVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedReadFlags message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.VersionedReadFlags
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.VersionedReadFlags} VersionedReadFlags
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadFlags.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedReadFlags message.
         * @function verify
         * @memberof file.VersionedReadFlags
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedReadFlags.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.archivedVersion != null && Object.hasOwnProperty.call(message, "archivedVersion")) {
                var error = $root.common.UInt64Value.verify(message.archivedVersion, long + 1);
                if (error)
                    return "archivedVersion." + error;
            }
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion")) {
                var error = $root.common.UInt64Value.verify(message.remoteVersion, long + 1);
                if (error)
                    return "remoteVersion." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedReadFlags message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.VersionedReadFlags
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.VersionedReadFlags} VersionedReadFlags
         */
        VersionedReadFlags.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.VersionedReadFlags)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.VersionedReadFlags: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.VersionedReadFlags();
            if (object.archivedVersion != null) {
                if (!$util.isObject(object.archivedVersion))
                    throw TypeError(".file.VersionedReadFlags.archivedVersion: object expected");
                message.archivedVersion = $root.common.UInt64Value.fromObject(object.archivedVersion, long + 1);
            }
            if (object.remoteVersion != null) {
                if (!$util.isObject(object.remoteVersion))
                    throw TypeError(".file.VersionedReadFlags.remoteVersion: object expected");
                message.remoteVersion = $root.common.UInt64Value.fromObject(object.remoteVersion, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedReadFlags message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.VersionedReadFlags
         * @static
         * @param {file.VersionedReadFlags} message VersionedReadFlags
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedReadFlags.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.archivedVersion = null;
                object.remoteVersion = null;
            }
            if (message.archivedVersion != null && Object.hasOwnProperty.call(message, "archivedVersion"))
                object.archivedVersion = $root.common.UInt64Value.toObject(message.archivedVersion, options, q + 1);
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                object.remoteVersion = $root.common.UInt64Value.toObject(message.remoteVersion, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedReadFlags to JSON.
         * @function toJSON
         * @memberof file.VersionedReadFlags
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedReadFlags.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedReadFlags
         * @function getTypeUrl
         * @memberof file.VersionedReadFlags
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedReadFlags.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.VersionedReadFlags";
        };

        return VersionedReadFlags;
    })();

    file.RequestWithVersionedReadFlags = (function() {

        /**
         * Properties of a RequestWithVersionedReadFlags.
         * @memberof file
         * @interface IRequestWithVersionedReadFlags
         * @property {file.IVersionedReadFlags|null} [flags] RequestWithVersionedReadFlags flags
         */

        /**
         * Constructs a new RequestWithVersionedReadFlags.
         * @memberof file
         * @classdesc Represents a RequestWithVersionedReadFlags.
         * @implements IRequestWithVersionedReadFlags
         * @constructor
         * @param {file.IRequestWithVersionedReadFlags=} [properties] Properties to set
         */
        function RequestWithVersionedReadFlags(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * RequestWithVersionedReadFlags flags.
         * @member {file.IVersionedReadFlags|null|undefined} flags
         * @memberof file.RequestWithVersionedReadFlags
         * @instance
         */
        RequestWithVersionedReadFlags.prototype.flags = null;

        /**
         * Creates a new RequestWithVersionedReadFlags instance using the specified properties.
         * @function create
         * @memberof file.RequestWithVersionedReadFlags
         * @static
         * @param {file.IRequestWithVersionedReadFlags=} [properties] Properties to set
         * @returns {file.RequestWithVersionedReadFlags} RequestWithVersionedReadFlags instance
         */
        RequestWithVersionedReadFlags.create = function create(properties) {
            return new RequestWithVersionedReadFlags(properties);
        };

        /**
         * Encodes the specified RequestWithVersionedReadFlags message. Does not implicitly {@link file.RequestWithVersionedReadFlags.verify|verify} messages.
         * @function encode
         * @memberof file.RequestWithVersionedReadFlags
         * @static
         * @param {file.IRequestWithVersionedReadFlags} message RequestWithVersionedReadFlags message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        RequestWithVersionedReadFlags.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.file.VersionedReadFlags.encode(message.flags, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified RequestWithVersionedReadFlags message, length delimited. Does not implicitly {@link file.RequestWithVersionedReadFlags.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.RequestWithVersionedReadFlags
         * @static
         * @param {file.IRequestWithVersionedReadFlags} message RequestWithVersionedReadFlags message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        RequestWithVersionedReadFlags.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a RequestWithVersionedReadFlags message from the specified reader or buffer.
         * @function decode
         * @memberof file.RequestWithVersionedReadFlags
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.RequestWithVersionedReadFlags} RequestWithVersionedReadFlags
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        RequestWithVersionedReadFlags.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.RequestWithVersionedReadFlags();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.flags = $root.file.VersionedReadFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a RequestWithVersionedReadFlags message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.RequestWithVersionedReadFlags
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.RequestWithVersionedReadFlags} RequestWithVersionedReadFlags
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        RequestWithVersionedReadFlags.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a RequestWithVersionedReadFlags message.
         * @function verify
         * @memberof file.RequestWithVersionedReadFlags
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        RequestWithVersionedReadFlags.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.file.VersionedReadFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a RequestWithVersionedReadFlags message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.RequestWithVersionedReadFlags
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.RequestWithVersionedReadFlags} RequestWithVersionedReadFlags
         */
        RequestWithVersionedReadFlags.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.RequestWithVersionedReadFlags)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.RequestWithVersionedReadFlags: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.RequestWithVersionedReadFlags();
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".file.RequestWithVersionedReadFlags.flags: object expected");
                message.flags = $root.file.VersionedReadFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a RequestWithVersionedReadFlags message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.RequestWithVersionedReadFlags
         * @static
         * @param {file.RequestWithVersionedReadFlags} message RequestWithVersionedReadFlags
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        RequestWithVersionedReadFlags.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.flags = null;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.file.VersionedReadFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this RequestWithVersionedReadFlags to JSON.
         * @function toJSON
         * @memberof file.RequestWithVersionedReadFlags
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        RequestWithVersionedReadFlags.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for RequestWithVersionedReadFlags
         * @function getTypeUrl
         * @memberof file.RequestWithVersionedReadFlags
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        RequestWithVersionedReadFlags.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.RequestWithVersionedReadFlags";
        };

        return RequestWithVersionedReadFlags;
    })();

    file.VersionedGetXAttrRequestBody = (function() {

        /**
         * Properties of a VersionedGetXAttrRequestBody.
         * @memberof file
         * @interface IVersionedGetXAttrRequestBody
         * @property {string|null} [xaName] VersionedGetXAttrRequestBody xaName
         * @property {file.IVersionedReadFlags|null} [flags] VersionedGetXAttrRequestBody flags
         */

        /**
         * Constructs a new VersionedGetXAttrRequestBody.
         * @memberof file
         * @classdesc Represents a VersionedGetXAttrRequestBody.
         * @implements IVersionedGetXAttrRequestBody
         * @constructor
         * @param {file.IVersionedGetXAttrRequestBody=} [properties] Properties to set
         */
        function VersionedGetXAttrRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedGetXAttrRequestBody xaName.
         * @member {string} xaName
         * @memberof file.VersionedGetXAttrRequestBody
         * @instance
         */
        VersionedGetXAttrRequestBody.prototype.xaName = "";

        /**
         * VersionedGetXAttrRequestBody flags.
         * @member {file.IVersionedReadFlags|null|undefined} flags
         * @memberof file.VersionedGetXAttrRequestBody
         * @instance
         */
        VersionedGetXAttrRequestBody.prototype.flags = null;

        /**
         * Creates a new VersionedGetXAttrRequestBody instance using the specified properties.
         * @function create
         * @memberof file.VersionedGetXAttrRequestBody
         * @static
         * @param {file.IVersionedGetXAttrRequestBody=} [properties] Properties to set
         * @returns {file.VersionedGetXAttrRequestBody} VersionedGetXAttrRequestBody instance
         */
        VersionedGetXAttrRequestBody.create = function create(properties) {
            return new VersionedGetXAttrRequestBody(properties);
        };

        /**
         * Encodes the specified VersionedGetXAttrRequestBody message. Does not implicitly {@link file.VersionedGetXAttrRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.VersionedGetXAttrRequestBody
         * @static
         * @param {file.IVersionedGetXAttrRequestBody} message VersionedGetXAttrRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetXAttrRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.xaName);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.file.VersionedReadFlags.encode(message.flags, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedGetXAttrRequestBody message, length delimited. Does not implicitly {@link file.VersionedGetXAttrRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.VersionedGetXAttrRequestBody
         * @static
         * @param {file.IVersionedGetXAttrRequestBody} message VersionedGetXAttrRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetXAttrRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedGetXAttrRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.VersionedGetXAttrRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.VersionedGetXAttrRequestBody} VersionedGetXAttrRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetXAttrRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.VersionedGetXAttrRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.xaName = reader.string();
                        break;
                    }
                case 2: {
                        message.flags = $root.file.VersionedReadFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedGetXAttrRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.VersionedGetXAttrRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.VersionedGetXAttrRequestBody} VersionedGetXAttrRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetXAttrRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedGetXAttrRequestBody message.
         * @function verify
         * @memberof file.VersionedGetXAttrRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedGetXAttrRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                if (!$util.isString(message.xaName))
                    return "xaName: string expected";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.file.VersionedReadFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedGetXAttrRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.VersionedGetXAttrRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.VersionedGetXAttrRequestBody} VersionedGetXAttrRequestBody
         */
        VersionedGetXAttrRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.VersionedGetXAttrRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.VersionedGetXAttrRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.VersionedGetXAttrRequestBody();
            if (object.xaName != null)
                message.xaName = String(object.xaName);
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".file.VersionedGetXAttrRequestBody.flags: object expected");
                message.flags = $root.file.VersionedReadFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedGetXAttrRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.VersionedGetXAttrRequestBody
         * @static
         * @param {file.VersionedGetXAttrRequestBody} message VersionedGetXAttrRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedGetXAttrRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.xaName = "";
                object.flags = null;
            }
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                object.xaName = message.xaName;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.file.VersionedReadFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedGetXAttrRequestBody to JSON.
         * @function toJSON
         * @memberof file.VersionedGetXAttrRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedGetXAttrRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedGetXAttrRequestBody
         * @function getTypeUrl
         * @memberof file.VersionedGetXAttrRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedGetXAttrRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.VersionedGetXAttrRequestBody";
        };

        return VersionedGetXAttrRequestBody;
    })();

    file.VersionedGetXAttrReplyBody = (function() {

        /**
         * Properties of a VersionedGetXAttrReplyBody.
         * @memberof file
         * @interface IVersionedGetXAttrReplyBody
         * @property {number|Long|null} [version] VersionedGetXAttrReplyBody version
         * @property {common.IStringValue|null} [str] VersionedGetXAttrReplyBody str
         * @property {common.IStringValue|null} [json] VersionedGetXAttrReplyBody json
         * @property {common.IBytesValue|null} [bytes] VersionedGetXAttrReplyBody bytes
         */

        /**
         * Constructs a new VersionedGetXAttrReplyBody.
         * @memberof file
         * @classdesc Represents a VersionedGetXAttrReplyBody.
         * @implements IVersionedGetXAttrReplyBody
         * @constructor
         * @param {file.IVersionedGetXAttrReplyBody=} [properties] Properties to set
         */
        function VersionedGetXAttrReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedGetXAttrReplyBody version.
         * @member {number|Long} version
         * @memberof file.VersionedGetXAttrReplyBody
         * @instance
         */
        VersionedGetXAttrReplyBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * VersionedGetXAttrReplyBody str.
         * @member {common.IStringValue|null|undefined} str
         * @memberof file.VersionedGetXAttrReplyBody
         * @instance
         */
        VersionedGetXAttrReplyBody.prototype.str = null;

        /**
         * VersionedGetXAttrReplyBody json.
         * @member {common.IStringValue|null|undefined} json
         * @memberof file.VersionedGetXAttrReplyBody
         * @instance
         */
        VersionedGetXAttrReplyBody.prototype.json = null;

        /**
         * VersionedGetXAttrReplyBody bytes.
         * @member {common.IBytesValue|null|undefined} bytes
         * @memberof file.VersionedGetXAttrReplyBody
         * @instance
         */
        VersionedGetXAttrReplyBody.prototype.bytes = null;

        /**
         * Creates a new VersionedGetXAttrReplyBody instance using the specified properties.
         * @function create
         * @memberof file.VersionedGetXAttrReplyBody
         * @static
         * @param {file.IVersionedGetXAttrReplyBody=} [properties] Properties to set
         * @returns {file.VersionedGetXAttrReplyBody} VersionedGetXAttrReplyBody instance
         */
        VersionedGetXAttrReplyBody.create = function create(properties) {
            return new VersionedGetXAttrReplyBody(properties);
        };

        /**
         * Encodes the specified VersionedGetXAttrReplyBody message. Does not implicitly {@link file.VersionedGetXAttrReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.VersionedGetXAttrReplyBody
         * @static
         * @param {file.IVersionedGetXAttrReplyBody} message VersionedGetXAttrReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetXAttrReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.version);
            if (message.str != null && Object.hasOwnProperty.call(message, "str"))
                $root.common.StringValue.encode(message.str, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                $root.common.StringValue.encode(message.json, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                $root.common.BytesValue.encode(message.bytes, writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedGetXAttrReplyBody message, length delimited. Does not implicitly {@link file.VersionedGetXAttrReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.VersionedGetXAttrReplyBody
         * @static
         * @param {file.IVersionedGetXAttrReplyBody} message VersionedGetXAttrReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetXAttrReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedGetXAttrReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.VersionedGetXAttrReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.VersionedGetXAttrReplyBody} VersionedGetXAttrReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetXAttrReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.VersionedGetXAttrReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.version = reader.uint64();
                        break;
                    }
                case 2: {
                        message.str = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.json = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 4: {
                        message.bytes = $root.common.BytesValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedGetXAttrReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.VersionedGetXAttrReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.VersionedGetXAttrReplyBody} VersionedGetXAttrReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetXAttrReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedGetXAttrReplyBody message.
         * @function verify
         * @memberof file.VersionedGetXAttrReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedGetXAttrReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.str != null && Object.hasOwnProperty.call(message, "str")) {
                var error = $root.common.StringValue.verify(message.str, long + 1);
                if (error)
                    return "str." + error;
            }
            if (message.json != null && Object.hasOwnProperty.call(message, "json")) {
                var error = $root.common.StringValue.verify(message.json, long + 1);
                if (error)
                    return "json." + error;
            }
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes")) {
                var error = $root.common.BytesValue.verify(message.bytes, long + 1);
                if (error)
                    return "bytes." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedGetXAttrReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.VersionedGetXAttrReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.VersionedGetXAttrReplyBody} VersionedGetXAttrReplyBody
         */
        VersionedGetXAttrReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.VersionedGetXAttrReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.VersionedGetXAttrReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.VersionedGetXAttrReplyBody();
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            if (object.str != null) {
                if (!$util.isObject(object.str))
                    throw TypeError(".file.VersionedGetXAttrReplyBody.str: object expected");
                message.str = $root.common.StringValue.fromObject(object.str, long + 1);
            }
            if (object.json != null) {
                if (!$util.isObject(object.json))
                    throw TypeError(".file.VersionedGetXAttrReplyBody.json: object expected");
                message.json = $root.common.StringValue.fromObject(object.json, long + 1);
            }
            if (object.bytes != null) {
                if (!$util.isObject(object.bytes))
                    throw TypeError(".file.VersionedGetXAttrReplyBody.bytes: object expected");
                message.bytes = $root.common.BytesValue.fromObject(object.bytes, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedGetXAttrReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.VersionedGetXAttrReplyBody
         * @static
         * @param {file.VersionedGetXAttrReplyBody} message VersionedGetXAttrReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedGetXAttrReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                object.str = null;
                object.json = null;
                object.bytes = null;
            }
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            if (message.str != null && Object.hasOwnProperty.call(message, "str"))
                object.str = $root.common.StringValue.toObject(message.str, options, q + 1);
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                object.json = $root.common.StringValue.toObject(message.json, options, q + 1);
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                object.bytes = $root.common.BytesValue.toObject(message.bytes, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedGetXAttrReplyBody to JSON.
         * @function toJSON
         * @memberof file.VersionedGetXAttrReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedGetXAttrReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedGetXAttrReplyBody
         * @function getTypeUrl
         * @memberof file.VersionedGetXAttrReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedGetXAttrReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.VersionedGetXAttrReplyBody";
        };

        return VersionedGetXAttrReplyBody;
    })();

    file.VersionedListXAttrsReplyBody = (function() {

        /**
         * Properties of a VersionedListXAttrsReplyBody.
         * @memberof file
         * @interface IVersionedListXAttrsReplyBody
         * @property {number|Long|null} [version] VersionedListXAttrsReplyBody version
         * @property {Array.<string>|null} [xaNames] VersionedListXAttrsReplyBody xaNames
         */

        /**
         * Constructs a new VersionedListXAttrsReplyBody.
         * @memberof file
         * @classdesc Represents a VersionedListXAttrsReplyBody.
         * @implements IVersionedListXAttrsReplyBody
         * @constructor
         * @param {file.IVersionedListXAttrsReplyBody=} [properties] Properties to set
         */
        function VersionedListXAttrsReplyBody(properties) {
            this.xaNames = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedListXAttrsReplyBody version.
         * @member {number|Long} version
         * @memberof file.VersionedListXAttrsReplyBody
         * @instance
         */
        VersionedListXAttrsReplyBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * VersionedListXAttrsReplyBody xaNames.
         * @member {Array.<string>} xaNames
         * @memberof file.VersionedListXAttrsReplyBody
         * @instance
         */
        VersionedListXAttrsReplyBody.prototype.xaNames = $util.emptyArray;

        /**
         * Creates a new VersionedListXAttrsReplyBody instance using the specified properties.
         * @function create
         * @memberof file.VersionedListXAttrsReplyBody
         * @static
         * @param {file.IVersionedListXAttrsReplyBody=} [properties] Properties to set
         * @returns {file.VersionedListXAttrsReplyBody} VersionedListXAttrsReplyBody instance
         */
        VersionedListXAttrsReplyBody.create = function create(properties) {
            return new VersionedListXAttrsReplyBody(properties);
        };

        /**
         * Encodes the specified VersionedListXAttrsReplyBody message. Does not implicitly {@link file.VersionedListXAttrsReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.VersionedListXAttrsReplyBody
         * @static
         * @param {file.IVersionedListXAttrsReplyBody} message VersionedListXAttrsReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedListXAttrsReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.version);
            if (message.xaNames != null && message.xaNames.length)
                for (var i = 0; i < message.xaNames.length; ++i)
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.xaNames[i]);
            return writer;
        };

        /**
         * Encodes the specified VersionedListXAttrsReplyBody message, length delimited. Does not implicitly {@link file.VersionedListXAttrsReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.VersionedListXAttrsReplyBody
         * @static
         * @param {file.IVersionedListXAttrsReplyBody} message VersionedListXAttrsReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedListXAttrsReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedListXAttrsReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.VersionedListXAttrsReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.VersionedListXAttrsReplyBody} VersionedListXAttrsReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedListXAttrsReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.VersionedListXAttrsReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.version = reader.uint64();
                        break;
                    }
                case 2: {
                        if (!(message.xaNames && message.xaNames.length))
                            message.xaNames = [];
                        message.xaNames.push(reader.string());
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedListXAttrsReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.VersionedListXAttrsReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.VersionedListXAttrsReplyBody} VersionedListXAttrsReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedListXAttrsReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedListXAttrsReplyBody message.
         * @function verify
         * @memberof file.VersionedListXAttrsReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedListXAttrsReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.xaNames != null && Object.hasOwnProperty.call(message, "xaNames")) {
                if (!Array.isArray(message.xaNames))
                    return "xaNames: array expected";
                for (var i = 0; i < message.xaNames.length; ++i)
                    if (!$util.isString(message.xaNames[i]))
                        return "xaNames: string[] expected";
            }
            return null;
        };

        /**
         * Creates a VersionedListXAttrsReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.VersionedListXAttrsReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.VersionedListXAttrsReplyBody} VersionedListXAttrsReplyBody
         */
        VersionedListXAttrsReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.VersionedListXAttrsReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.VersionedListXAttrsReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.VersionedListXAttrsReplyBody();
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            if (object.xaNames) {
                if (!Array.isArray(object.xaNames))
                    throw TypeError(".file.VersionedListXAttrsReplyBody.xaNames: array expected");
                message.xaNames = [];
                for (var i = 0; i < object.xaNames.length; ++i)
                    message.xaNames[i] = String(object.xaNames[i]);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedListXAttrsReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.VersionedListXAttrsReplyBody
         * @static
         * @param {file.VersionedListXAttrsReplyBody} message VersionedListXAttrsReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedListXAttrsReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.xaNames = [];
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            if (message.xaNames && message.xaNames.length) {
                object.xaNames = [];
                for (var j = 0; j < message.xaNames.length; ++j)
                    object.xaNames[j] = message.xaNames[j];
            }
            return object;
        };

        /**
         * Converts this VersionedListXAttrsReplyBody to JSON.
         * @function toJSON
         * @memberof file.VersionedListXAttrsReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedListXAttrsReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedListXAttrsReplyBody
         * @function getTypeUrl
         * @memberof file.VersionedListXAttrsReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedListXAttrsReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.VersionedListXAttrsReplyBody";
        };

        return VersionedListXAttrsReplyBody;
    })();

    file.VersionedReadBytesRequestBody = (function() {

        /**
         * Properties of a VersionedReadBytesRequestBody.
         * @memberof file
         * @interface IVersionedReadBytesRequestBody
         * @property {common.IUInt64Value|null} [start] VersionedReadBytesRequestBody start
         * @property {common.IUInt64Value|null} [end] VersionedReadBytesRequestBody end
         * @property {file.IVersionedReadFlags|null} [flags] VersionedReadBytesRequestBody flags
         */

        /**
         * Constructs a new VersionedReadBytesRequestBody.
         * @memberof file
         * @classdesc Represents a VersionedReadBytesRequestBody.
         * @implements IVersionedReadBytesRequestBody
         * @constructor
         * @param {file.IVersionedReadBytesRequestBody=} [properties] Properties to set
         */
        function VersionedReadBytesRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedReadBytesRequestBody start.
         * @member {common.IUInt64Value|null|undefined} start
         * @memberof file.VersionedReadBytesRequestBody
         * @instance
         */
        VersionedReadBytesRequestBody.prototype.start = null;

        /**
         * VersionedReadBytesRequestBody end.
         * @member {common.IUInt64Value|null|undefined} end
         * @memberof file.VersionedReadBytesRequestBody
         * @instance
         */
        VersionedReadBytesRequestBody.prototype.end = null;

        /**
         * VersionedReadBytesRequestBody flags.
         * @member {file.IVersionedReadFlags|null|undefined} flags
         * @memberof file.VersionedReadBytesRequestBody
         * @instance
         */
        VersionedReadBytesRequestBody.prototype.flags = null;

        /**
         * Creates a new VersionedReadBytesRequestBody instance using the specified properties.
         * @function create
         * @memberof file.VersionedReadBytesRequestBody
         * @static
         * @param {file.IVersionedReadBytesRequestBody=} [properties] Properties to set
         * @returns {file.VersionedReadBytesRequestBody} VersionedReadBytesRequestBody instance
         */
        VersionedReadBytesRequestBody.create = function create(properties) {
            return new VersionedReadBytesRequestBody(properties);
        };

        /**
         * Encodes the specified VersionedReadBytesRequestBody message. Does not implicitly {@link file.VersionedReadBytesRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.VersionedReadBytesRequestBody
         * @static
         * @param {file.IVersionedReadBytesRequestBody} message VersionedReadBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadBytesRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.start != null && Object.hasOwnProperty.call(message, "start"))
                $root.common.UInt64Value.encode(message.start, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.end != null && Object.hasOwnProperty.call(message, "end"))
                $root.common.UInt64Value.encode(message.end, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.file.VersionedReadFlags.encode(message.flags, writer.uint32(/* id 10, wireType 2 =*/82).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedReadBytesRequestBody message, length delimited. Does not implicitly {@link file.VersionedReadBytesRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.VersionedReadBytesRequestBody
         * @static
         * @param {file.IVersionedReadBytesRequestBody} message VersionedReadBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadBytesRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedReadBytesRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.VersionedReadBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.VersionedReadBytesRequestBody} VersionedReadBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadBytesRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.VersionedReadBytesRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.start = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.end = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 10: {
                        message.flags = $root.file.VersionedReadFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedReadBytesRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.VersionedReadBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.VersionedReadBytesRequestBody} VersionedReadBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadBytesRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedReadBytesRequestBody message.
         * @function verify
         * @memberof file.VersionedReadBytesRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedReadBytesRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.start != null && Object.hasOwnProperty.call(message, "start")) {
                var error = $root.common.UInt64Value.verify(message.start, long + 1);
                if (error)
                    return "start." + error;
            }
            if (message.end != null && Object.hasOwnProperty.call(message, "end")) {
                var error = $root.common.UInt64Value.verify(message.end, long + 1);
                if (error)
                    return "end." + error;
            }
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.file.VersionedReadFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedReadBytesRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.VersionedReadBytesRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.VersionedReadBytesRequestBody} VersionedReadBytesRequestBody
         */
        VersionedReadBytesRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.VersionedReadBytesRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.VersionedReadBytesRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.VersionedReadBytesRequestBody();
            if (object.start != null) {
                if (!$util.isObject(object.start))
                    throw TypeError(".file.VersionedReadBytesRequestBody.start: object expected");
                message.start = $root.common.UInt64Value.fromObject(object.start, long + 1);
            }
            if (object.end != null) {
                if (!$util.isObject(object.end))
                    throw TypeError(".file.VersionedReadBytesRequestBody.end: object expected");
                message.end = $root.common.UInt64Value.fromObject(object.end, long + 1);
            }
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".file.VersionedReadBytesRequestBody.flags: object expected");
                message.flags = $root.file.VersionedReadFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedReadBytesRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.VersionedReadBytesRequestBody
         * @static
         * @param {file.VersionedReadBytesRequestBody} message VersionedReadBytesRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedReadBytesRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.start = null;
                object.end = null;
                object.flags = null;
            }
            if (message.start != null && Object.hasOwnProperty.call(message, "start"))
                object.start = $root.common.UInt64Value.toObject(message.start, options, q + 1);
            if (message.end != null && Object.hasOwnProperty.call(message, "end"))
                object.end = $root.common.UInt64Value.toObject(message.end, options, q + 1);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.file.VersionedReadFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedReadBytesRequestBody to JSON.
         * @function toJSON
         * @memberof file.VersionedReadBytesRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedReadBytesRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedReadBytesRequestBody
         * @function getTypeUrl
         * @memberof file.VersionedReadBytesRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedReadBytesRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.VersionedReadBytesRequestBody";
        };

        return VersionedReadBytesRequestBody;
    })();

    file.VersionedReadBytesReplyBody = (function() {

        /**
         * Properties of a VersionedReadBytesReplyBody.
         * @memberof file
         * @interface IVersionedReadBytesReplyBody
         * @property {number|Long|null} [version] VersionedReadBytesReplyBody version
         * @property {common.IBytesValue|null} [bytes] VersionedReadBytesReplyBody bytes
         */

        /**
         * Constructs a new VersionedReadBytesReplyBody.
         * @memberof file
         * @classdesc Represents a VersionedReadBytesReplyBody.
         * @implements IVersionedReadBytesReplyBody
         * @constructor
         * @param {file.IVersionedReadBytesReplyBody=} [properties] Properties to set
         */
        function VersionedReadBytesReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedReadBytesReplyBody version.
         * @member {number|Long} version
         * @memberof file.VersionedReadBytesReplyBody
         * @instance
         */
        VersionedReadBytesReplyBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * VersionedReadBytesReplyBody bytes.
         * @member {common.IBytesValue|null|undefined} bytes
         * @memberof file.VersionedReadBytesReplyBody
         * @instance
         */
        VersionedReadBytesReplyBody.prototype.bytes = null;

        /**
         * Creates a new VersionedReadBytesReplyBody instance using the specified properties.
         * @function create
         * @memberof file.VersionedReadBytesReplyBody
         * @static
         * @param {file.IVersionedReadBytesReplyBody=} [properties] Properties to set
         * @returns {file.VersionedReadBytesReplyBody} VersionedReadBytesReplyBody instance
         */
        VersionedReadBytesReplyBody.create = function create(properties) {
            return new VersionedReadBytesReplyBody(properties);
        };

        /**
         * Encodes the specified VersionedReadBytesReplyBody message. Does not implicitly {@link file.VersionedReadBytesReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.VersionedReadBytesReplyBody
         * @static
         * @param {file.IVersionedReadBytesReplyBody} message VersionedReadBytesReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadBytesReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.version);
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                $root.common.BytesValue.encode(message.bytes, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedReadBytesReplyBody message, length delimited. Does not implicitly {@link file.VersionedReadBytesReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.VersionedReadBytesReplyBody
         * @static
         * @param {file.IVersionedReadBytesReplyBody} message VersionedReadBytesReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadBytesReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedReadBytesReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.VersionedReadBytesReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.VersionedReadBytesReplyBody} VersionedReadBytesReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadBytesReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.VersionedReadBytesReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.version = reader.uint64();
                        break;
                    }
                case 2: {
                        message.bytes = $root.common.BytesValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedReadBytesReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.VersionedReadBytesReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.VersionedReadBytesReplyBody} VersionedReadBytesReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadBytesReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedReadBytesReplyBody message.
         * @function verify
         * @memberof file.VersionedReadBytesReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedReadBytesReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes")) {
                var error = $root.common.BytesValue.verify(message.bytes, long + 1);
                if (error)
                    return "bytes." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedReadBytesReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.VersionedReadBytesReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.VersionedReadBytesReplyBody} VersionedReadBytesReplyBody
         */
        VersionedReadBytesReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.VersionedReadBytesReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.VersionedReadBytesReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.VersionedReadBytesReplyBody();
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            if (object.bytes != null) {
                if (!$util.isObject(object.bytes))
                    throw TypeError(".file.VersionedReadBytesReplyBody.bytes: object expected");
                message.bytes = $root.common.BytesValue.fromObject(object.bytes, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedReadBytesReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.VersionedReadBytesReplyBody
         * @static
         * @param {file.VersionedReadBytesReplyBody} message VersionedReadBytesReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedReadBytesReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                object.bytes = null;
            }
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                object.bytes = $root.common.BytesValue.toObject(message.bytes, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedReadBytesReplyBody to JSON.
         * @function toJSON
         * @memberof file.VersionedReadBytesReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedReadBytesReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedReadBytesReplyBody
         * @function getTypeUrl
         * @memberof file.VersionedReadBytesReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedReadBytesReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.VersionedReadBytesReplyBody";
        };

        return VersionedReadBytesReplyBody;
    })();

    file.VersionedReadTxtReplyBody = (function() {

        /**
         * Properties of a VersionedReadTxtReplyBody.
         * @memberof file
         * @interface IVersionedReadTxtReplyBody
         * @property {number|Long|null} [version] VersionedReadTxtReplyBody version
         * @property {string|null} [txt] VersionedReadTxtReplyBody txt
         */

        /**
         * Constructs a new VersionedReadTxtReplyBody.
         * @memberof file
         * @classdesc Represents a VersionedReadTxtReplyBody.
         * @implements IVersionedReadTxtReplyBody
         * @constructor
         * @param {file.IVersionedReadTxtReplyBody=} [properties] Properties to set
         */
        function VersionedReadTxtReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedReadTxtReplyBody version.
         * @member {number|Long} version
         * @memberof file.VersionedReadTxtReplyBody
         * @instance
         */
        VersionedReadTxtReplyBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * VersionedReadTxtReplyBody txt.
         * @member {string} txt
         * @memberof file.VersionedReadTxtReplyBody
         * @instance
         */
        VersionedReadTxtReplyBody.prototype.txt = "";

        /**
         * Creates a new VersionedReadTxtReplyBody instance using the specified properties.
         * @function create
         * @memberof file.VersionedReadTxtReplyBody
         * @static
         * @param {file.IVersionedReadTxtReplyBody=} [properties] Properties to set
         * @returns {file.VersionedReadTxtReplyBody} VersionedReadTxtReplyBody instance
         */
        VersionedReadTxtReplyBody.create = function create(properties) {
            return new VersionedReadTxtReplyBody(properties);
        };

        /**
         * Encodes the specified VersionedReadTxtReplyBody message. Does not implicitly {@link file.VersionedReadTxtReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.VersionedReadTxtReplyBody
         * @static
         * @param {file.IVersionedReadTxtReplyBody} message VersionedReadTxtReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadTxtReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.version);
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.txt);
            return writer;
        };

        /**
         * Encodes the specified VersionedReadTxtReplyBody message, length delimited. Does not implicitly {@link file.VersionedReadTxtReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.VersionedReadTxtReplyBody
         * @static
         * @param {file.IVersionedReadTxtReplyBody} message VersionedReadTxtReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadTxtReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedReadTxtReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.VersionedReadTxtReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.VersionedReadTxtReplyBody} VersionedReadTxtReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadTxtReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.VersionedReadTxtReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.version = reader.uint64();
                        break;
                    }
                case 2: {
                        message.txt = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedReadTxtReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.VersionedReadTxtReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.VersionedReadTxtReplyBody} VersionedReadTxtReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadTxtReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedReadTxtReplyBody message.
         * @function verify
         * @memberof file.VersionedReadTxtReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedReadTxtReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                if (!$util.isString(message.txt))
                    return "txt: string expected";
            return null;
        };

        /**
         * Creates a VersionedReadTxtReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.VersionedReadTxtReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.VersionedReadTxtReplyBody} VersionedReadTxtReplyBody
         */
        VersionedReadTxtReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.VersionedReadTxtReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.VersionedReadTxtReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.VersionedReadTxtReplyBody();
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            if (object.txt != null)
                message.txt = String(object.txt);
            return message;
        };

        /**
         * Creates a plain object from a VersionedReadTxtReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.VersionedReadTxtReplyBody
         * @static
         * @param {file.VersionedReadTxtReplyBody} message VersionedReadTxtReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedReadTxtReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                object.txt = "";
            }
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                object.txt = message.txt;
            return object;
        };

        /**
         * Converts this VersionedReadTxtReplyBody to JSON.
         * @function toJSON
         * @memberof file.VersionedReadTxtReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedReadTxtReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedReadTxtReplyBody
         * @function getTypeUrl
         * @memberof file.VersionedReadTxtReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedReadTxtReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.VersionedReadTxtReplyBody";
        };

        return VersionedReadTxtReplyBody;
    })();

    file.VersionedReadJsonReplyBody = (function() {

        /**
         * Properties of a VersionedReadJsonReplyBody.
         * @memberof file
         * @interface IVersionedReadJsonReplyBody
         * @property {number|Long|null} [version] VersionedReadJsonReplyBody version
         * @property {string|null} [json] VersionedReadJsonReplyBody json
         */

        /**
         * Constructs a new VersionedReadJsonReplyBody.
         * @memberof file
         * @classdesc Represents a VersionedReadJsonReplyBody.
         * @implements IVersionedReadJsonReplyBody
         * @constructor
         * @param {file.IVersionedReadJsonReplyBody=} [properties] Properties to set
         */
        function VersionedReadJsonReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedReadJsonReplyBody version.
         * @member {number|Long} version
         * @memberof file.VersionedReadJsonReplyBody
         * @instance
         */
        VersionedReadJsonReplyBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * VersionedReadJsonReplyBody json.
         * @member {string} json
         * @memberof file.VersionedReadJsonReplyBody
         * @instance
         */
        VersionedReadJsonReplyBody.prototype.json = "";

        /**
         * Creates a new VersionedReadJsonReplyBody instance using the specified properties.
         * @function create
         * @memberof file.VersionedReadJsonReplyBody
         * @static
         * @param {file.IVersionedReadJsonReplyBody=} [properties] Properties to set
         * @returns {file.VersionedReadJsonReplyBody} VersionedReadJsonReplyBody instance
         */
        VersionedReadJsonReplyBody.create = function create(properties) {
            return new VersionedReadJsonReplyBody(properties);
        };

        /**
         * Encodes the specified VersionedReadJsonReplyBody message. Does not implicitly {@link file.VersionedReadJsonReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.VersionedReadJsonReplyBody
         * @static
         * @param {file.IVersionedReadJsonReplyBody} message VersionedReadJsonReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadJsonReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.version);
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.json);
            return writer;
        };

        /**
         * Encodes the specified VersionedReadJsonReplyBody message, length delimited. Does not implicitly {@link file.VersionedReadJsonReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.VersionedReadJsonReplyBody
         * @static
         * @param {file.IVersionedReadJsonReplyBody} message VersionedReadJsonReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadJsonReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedReadJsonReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.VersionedReadJsonReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.VersionedReadJsonReplyBody} VersionedReadJsonReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadJsonReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.VersionedReadJsonReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.version = reader.uint64();
                        break;
                    }
                case 2: {
                        message.json = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedReadJsonReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.VersionedReadJsonReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.VersionedReadJsonReplyBody} VersionedReadJsonReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadJsonReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedReadJsonReplyBody message.
         * @function verify
         * @memberof file.VersionedReadJsonReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedReadJsonReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                if (!$util.isString(message.json))
                    return "json: string expected";
            return null;
        };

        /**
         * Creates a VersionedReadJsonReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.VersionedReadJsonReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.VersionedReadJsonReplyBody} VersionedReadJsonReplyBody
         */
        VersionedReadJsonReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.VersionedReadJsonReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.VersionedReadJsonReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.VersionedReadJsonReplyBody();
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            if (object.json != null)
                message.json = String(object.json);
            return message;
        };

        /**
         * Creates a plain object from a VersionedReadJsonReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.VersionedReadJsonReplyBody
         * @static
         * @param {file.VersionedReadJsonReplyBody} message VersionedReadJsonReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedReadJsonReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                object.json = "";
            }
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                object.json = message.json;
            return object;
        };

        /**
         * Converts this VersionedReadJsonReplyBody to JSON.
         * @function toJSON
         * @memberof file.VersionedReadJsonReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedReadJsonReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedReadJsonReplyBody
         * @function getTypeUrl
         * @memberof file.VersionedReadJsonReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedReadJsonReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.VersionedReadJsonReplyBody";
        };

        return VersionedReadJsonReplyBody;
    })();

    file.VersionedGetByteSourceReplyBody = (function() {

        /**
         * Properties of a VersionedGetByteSourceReplyBody.
         * @memberof file
         * @interface IVersionedGetByteSourceReplyBody
         * @property {number|Long|null} [version] VersionedGetByteSourceReplyBody version
         * @property {common.IObjectReference|null} [src] VersionedGetByteSourceReplyBody src
         */

        /**
         * Constructs a new VersionedGetByteSourceReplyBody.
         * @memberof file
         * @classdesc Represents a VersionedGetByteSourceReplyBody.
         * @implements IVersionedGetByteSourceReplyBody
         * @constructor
         * @param {file.IVersionedGetByteSourceReplyBody=} [properties] Properties to set
         */
        function VersionedGetByteSourceReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedGetByteSourceReplyBody version.
         * @member {number|Long} version
         * @memberof file.VersionedGetByteSourceReplyBody
         * @instance
         */
        VersionedGetByteSourceReplyBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * VersionedGetByteSourceReplyBody src.
         * @member {common.IObjectReference|null|undefined} src
         * @memberof file.VersionedGetByteSourceReplyBody
         * @instance
         */
        VersionedGetByteSourceReplyBody.prototype.src = null;

        /**
         * Creates a new VersionedGetByteSourceReplyBody instance using the specified properties.
         * @function create
         * @memberof file.VersionedGetByteSourceReplyBody
         * @static
         * @param {file.IVersionedGetByteSourceReplyBody=} [properties] Properties to set
         * @returns {file.VersionedGetByteSourceReplyBody} VersionedGetByteSourceReplyBody instance
         */
        VersionedGetByteSourceReplyBody.create = function create(properties) {
            return new VersionedGetByteSourceReplyBody(properties);
        };

        /**
         * Encodes the specified VersionedGetByteSourceReplyBody message. Does not implicitly {@link file.VersionedGetByteSourceReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.VersionedGetByteSourceReplyBody
         * @static
         * @param {file.IVersionedGetByteSourceReplyBody} message VersionedGetByteSourceReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetByteSourceReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.version);
            if (message.src != null && Object.hasOwnProperty.call(message, "src"))
                $root.common.ObjectReference.encode(message.src, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedGetByteSourceReplyBody message, length delimited. Does not implicitly {@link file.VersionedGetByteSourceReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.VersionedGetByteSourceReplyBody
         * @static
         * @param {file.IVersionedGetByteSourceReplyBody} message VersionedGetByteSourceReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetByteSourceReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedGetByteSourceReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.VersionedGetByteSourceReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.VersionedGetByteSourceReplyBody} VersionedGetByteSourceReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetByteSourceReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.VersionedGetByteSourceReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.version = reader.uint64();
                        break;
                    }
                case 2: {
                        message.src = $root.common.ObjectReference.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedGetByteSourceReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.VersionedGetByteSourceReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.VersionedGetByteSourceReplyBody} VersionedGetByteSourceReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetByteSourceReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedGetByteSourceReplyBody message.
         * @function verify
         * @memberof file.VersionedGetByteSourceReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedGetByteSourceReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.src != null && Object.hasOwnProperty.call(message, "src")) {
                var error = $root.common.ObjectReference.verify(message.src, long + 1);
                if (error)
                    return "src." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedGetByteSourceReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.VersionedGetByteSourceReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.VersionedGetByteSourceReplyBody} VersionedGetByteSourceReplyBody
         */
        VersionedGetByteSourceReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.VersionedGetByteSourceReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.VersionedGetByteSourceReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.VersionedGetByteSourceReplyBody();
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            if (object.src != null) {
                if (!$util.isObject(object.src))
                    throw TypeError(".file.VersionedGetByteSourceReplyBody.src: object expected");
                message.src = $root.common.ObjectReference.fromObject(object.src, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedGetByteSourceReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.VersionedGetByteSourceReplyBody
         * @static
         * @param {file.VersionedGetByteSourceReplyBody} message VersionedGetByteSourceReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedGetByteSourceReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                object.src = null;
            }
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            if (message.src != null && Object.hasOwnProperty.call(message, "src"))
                object.src = $root.common.ObjectReference.toObject(message.src, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedGetByteSourceReplyBody to JSON.
         * @function toJSON
         * @memberof file.VersionedGetByteSourceReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedGetByteSourceReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedGetByteSourceReplyBody
         * @function getTypeUrl
         * @memberof file.VersionedGetByteSourceReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedGetByteSourceReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.VersionedGetByteSourceReplyBody";
        };

        return VersionedGetByteSourceReplyBody;
    })();

    file.ListVersionsReplyBody = (function() {

        /**
         * Properties of a ListVersionsReplyBody.
         * @memberof file
         * @interface IListVersionsReplyBody
         * @property {common.IUInt64Value|null} [current] ListVersionsReplyBody current
         * @property {Array.<number|Long>|null} [archived] ListVersionsReplyBody archived
         */

        /**
         * Constructs a new ListVersionsReplyBody.
         * @memberof file
         * @classdesc Represents a ListVersionsReplyBody.
         * @implements IListVersionsReplyBody
         * @constructor
         * @param {file.IListVersionsReplyBody=} [properties] Properties to set
         */
        function ListVersionsReplyBody(properties) {
            this.archived = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * ListVersionsReplyBody current.
         * @member {common.IUInt64Value|null|undefined} current
         * @memberof file.ListVersionsReplyBody
         * @instance
         */
        ListVersionsReplyBody.prototype.current = null;

        /**
         * ListVersionsReplyBody archived.
         * @member {Array.<number|Long>} archived
         * @memberof file.ListVersionsReplyBody
         * @instance
         */
        ListVersionsReplyBody.prototype.archived = $util.emptyArray;

        /**
         * Creates a new ListVersionsReplyBody instance using the specified properties.
         * @function create
         * @memberof file.ListVersionsReplyBody
         * @static
         * @param {file.IListVersionsReplyBody=} [properties] Properties to set
         * @returns {file.ListVersionsReplyBody} ListVersionsReplyBody instance
         */
        ListVersionsReplyBody.create = function create(properties) {
            return new ListVersionsReplyBody(properties);
        };

        /**
         * Encodes the specified ListVersionsReplyBody message. Does not implicitly {@link file.ListVersionsReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.ListVersionsReplyBody
         * @static
         * @param {file.IListVersionsReplyBody} message ListVersionsReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ListVersionsReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.current != null && Object.hasOwnProperty.call(message, "current"))
                $root.common.UInt64Value.encode(message.current, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.archived != null && message.archived.length) {
                writer.uint32(/* id 2, wireType 2 =*/18).fork();
                for (var i = 0; i < message.archived.length; ++i)
                    writer.uint64(message.archived[i]);
                writer.ldelim();
            }
            return writer;
        };

        /**
         * Encodes the specified ListVersionsReplyBody message, length delimited. Does not implicitly {@link file.ListVersionsReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.ListVersionsReplyBody
         * @static
         * @param {file.IListVersionsReplyBody} message ListVersionsReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ListVersionsReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a ListVersionsReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.ListVersionsReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.ListVersionsReplyBody} ListVersionsReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ListVersionsReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.ListVersionsReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.current = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        if (!(message.archived && message.archived.length))
                            message.archived = [];
                        if ((tag & 7) === 2) {
                            var end2 = reader.uint32() + reader.pos;
                            while (reader.pos < end2)
                                message.archived.push(reader.uint64());
                        } else
                            message.archived.push(reader.uint64());
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a ListVersionsReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.ListVersionsReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.ListVersionsReplyBody} ListVersionsReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ListVersionsReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a ListVersionsReplyBody message.
         * @function verify
         * @memberof file.ListVersionsReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        ListVersionsReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.current != null && Object.hasOwnProperty.call(message, "current")) {
                var error = $root.common.UInt64Value.verify(message.current, long + 1);
                if (error)
                    return "current." + error;
            }
            if (message.archived != null && Object.hasOwnProperty.call(message, "archived")) {
                if (!Array.isArray(message.archived))
                    return "archived: array expected";
                for (var i = 0; i < message.archived.length; ++i)
                    if (!$util.isInteger(message.archived[i]) && !(message.archived[i] && $util.isInteger(message.archived[i].low) && $util.isInteger(message.archived[i].high)))
                        return "archived: integer|Long[] expected";
            }
            return null;
        };

        /**
         * Creates a ListVersionsReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.ListVersionsReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.ListVersionsReplyBody} ListVersionsReplyBody
         */
        ListVersionsReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.ListVersionsReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.ListVersionsReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.ListVersionsReplyBody();
            if (object.current != null) {
                if (!$util.isObject(object.current))
                    throw TypeError(".file.ListVersionsReplyBody.current: object expected");
                message.current = $root.common.UInt64Value.fromObject(object.current, long + 1);
            }
            if (object.archived) {
                if (!Array.isArray(object.archived))
                    throw TypeError(".file.ListVersionsReplyBody.archived: array expected");
                message.archived = [];
                for (var i = 0; i < object.archived.length; ++i)
                    if ($util.Long)
                        message.archived[i] = $util.Long.fromValue(object.archived[i], true);
                    else if (typeof object.archived[i] === "string")
                        message.archived[i] = parseInt(object.archived[i], 10);
                    else if (typeof object.archived[i] === "number")
                        message.archived[i] = object.archived[i];
                    else if (typeof object.archived[i] === "object")
                        message.archived[i] = new $util.LongBits(object.archived[i].low >>> 0, object.archived[i].high >>> 0).toNumber(true);
            }
            return message;
        };

        /**
         * Creates a plain object from a ListVersionsReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.ListVersionsReplyBody
         * @static
         * @param {file.ListVersionsReplyBody} message ListVersionsReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        ListVersionsReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.archived = [];
            if (options.defaults)
                object.current = null;
            if (message.current != null && Object.hasOwnProperty.call(message, "current"))
                object.current = $root.common.UInt64Value.toObject(message.current, options, q + 1);
            if (message.archived && message.archived.length) {
                object.archived = [];
                for (var j = 0; j < message.archived.length; ++j)
                    if (typeof BigInt !== "undefined" && options.longs === BigInt)
                        object.archived[j] = typeof message.archived[j] === "number" ? BigInt(message.archived[j]) : $util.Long.fromBits(message.archived[j].low >>> 0, message.archived[j].high >>> 0, true).toBigInt();
                    else if (typeof message.archived[j] === "number")
                        object.archived[j] = options.longs === String ? String(message.archived[j]) : message.archived[j];
                    else
                        object.archived[j] = options.longs === String ? $util.Long.prototype.toString.call(message.archived[j]) : options.longs === Number ? new $util.LongBits(message.archived[j].low >>> 0, message.archived[j].high >>> 0).toNumber(true) : message.archived[j];
            }
            return object;
        };

        /**
         * Converts this ListVersionsReplyBody to JSON.
         * @function toJSON
         * @memberof file.ListVersionsReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        ListVersionsReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for ListVersionsReplyBody
         * @function getTypeUrl
         * @memberof file.ListVersionsReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        ListVersionsReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.ListVersionsReplyBody";
        };

        return ListVersionsReplyBody;
    })();

    file.UpdateXAttrsRequestBody = (function() {

        /**
         * Properties of an UpdateXAttrsRequestBody.
         * @memberof file
         * @interface IUpdateXAttrsRequestBody
         * @property {file.IXAttrsChanges|null} [changes] UpdateXAttrsRequestBody changes
         */

        /**
         * Constructs a new UpdateXAttrsRequestBody.
         * @memberof file
         * @classdesc Represents an UpdateXAttrsRequestBody.
         * @implements IUpdateXAttrsRequestBody
         * @constructor
         * @param {file.IUpdateXAttrsRequestBody=} [properties] Properties to set
         */
        function UpdateXAttrsRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UpdateXAttrsRequestBody changes.
         * @member {file.IXAttrsChanges|null|undefined} changes
         * @memberof file.UpdateXAttrsRequestBody
         * @instance
         */
        UpdateXAttrsRequestBody.prototype.changes = null;

        /**
         * Creates a new UpdateXAttrsRequestBody instance using the specified properties.
         * @function create
         * @memberof file.UpdateXAttrsRequestBody
         * @static
         * @param {file.IUpdateXAttrsRequestBody=} [properties] Properties to set
         * @returns {file.UpdateXAttrsRequestBody} UpdateXAttrsRequestBody instance
         */
        UpdateXAttrsRequestBody.create = function create(properties) {
            return new UpdateXAttrsRequestBody(properties);
        };

        /**
         * Encodes the specified UpdateXAttrsRequestBody message. Does not implicitly {@link file.UpdateXAttrsRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.UpdateXAttrsRequestBody
         * @static
         * @param {file.IUpdateXAttrsRequestBody} message UpdateXAttrsRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UpdateXAttrsRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.changes != null && Object.hasOwnProperty.call(message, "changes"))
                $root.file.XAttrsChanges.encode(message.changes, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified UpdateXAttrsRequestBody message, length delimited. Does not implicitly {@link file.UpdateXAttrsRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.UpdateXAttrsRequestBody
         * @static
         * @param {file.IUpdateXAttrsRequestBody} message UpdateXAttrsRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UpdateXAttrsRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an UpdateXAttrsRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.UpdateXAttrsRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.UpdateXAttrsRequestBody} UpdateXAttrsRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UpdateXAttrsRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.UpdateXAttrsRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.changes = $root.file.XAttrsChanges.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an UpdateXAttrsRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.UpdateXAttrsRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.UpdateXAttrsRequestBody} UpdateXAttrsRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UpdateXAttrsRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an UpdateXAttrsRequestBody message.
         * @function verify
         * @memberof file.UpdateXAttrsRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UpdateXAttrsRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.changes != null && Object.hasOwnProperty.call(message, "changes")) {
                var error = $root.file.XAttrsChanges.verify(message.changes, long + 1);
                if (error)
                    return "changes." + error;
            }
            return null;
        };

        /**
         * Creates an UpdateXAttrsRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.UpdateXAttrsRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.UpdateXAttrsRequestBody} UpdateXAttrsRequestBody
         */
        UpdateXAttrsRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.UpdateXAttrsRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.UpdateXAttrsRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.UpdateXAttrsRequestBody();
            if (object.changes != null) {
                if (!$util.isObject(object.changes))
                    throw TypeError(".file.UpdateXAttrsRequestBody.changes: object expected");
                message.changes = $root.file.XAttrsChanges.fromObject(object.changes, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an UpdateXAttrsRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.UpdateXAttrsRequestBody
         * @static
         * @param {file.UpdateXAttrsRequestBody} message UpdateXAttrsRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UpdateXAttrsRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.changes = null;
            if (message.changes != null && Object.hasOwnProperty.call(message, "changes"))
                object.changes = $root.file.XAttrsChanges.toObject(message.changes, options, q + 1);
            return object;
        };

        /**
         * Converts this UpdateXAttrsRequestBody to JSON.
         * @function toJSON
         * @memberof file.UpdateXAttrsRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UpdateXAttrsRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for UpdateXAttrsRequestBody
         * @function getTypeUrl
         * @memberof file.UpdateXAttrsRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        UpdateXAttrsRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.UpdateXAttrsRequestBody";
        };

        return UpdateXAttrsRequestBody;
    })();

    file.NameAndXAttrValue = (function() {

        /**
         * Properties of a NameAndXAttrValue.
         * @memberof file
         * @interface INameAndXAttrValue
         * @property {string|null} [xaName] NameAndXAttrValue xaName
         * @property {common.IStringValue|null} [str] NameAndXAttrValue str
         * @property {common.IStringValue|null} [json] NameAndXAttrValue json
         * @property {common.IBytesValue|null} [bytes] NameAndXAttrValue bytes
         */

        /**
         * Constructs a new NameAndXAttrValue.
         * @memberof file
         * @classdesc Represents a NameAndXAttrValue.
         * @implements INameAndXAttrValue
         * @constructor
         * @param {file.INameAndXAttrValue=} [properties] Properties to set
         */
        function NameAndXAttrValue(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * NameAndXAttrValue xaName.
         * @member {string} xaName
         * @memberof file.NameAndXAttrValue
         * @instance
         */
        NameAndXAttrValue.prototype.xaName = "";

        /**
         * NameAndXAttrValue str.
         * @member {common.IStringValue|null|undefined} str
         * @memberof file.NameAndXAttrValue
         * @instance
         */
        NameAndXAttrValue.prototype.str = null;

        /**
         * NameAndXAttrValue json.
         * @member {common.IStringValue|null|undefined} json
         * @memberof file.NameAndXAttrValue
         * @instance
         */
        NameAndXAttrValue.prototype.json = null;

        /**
         * NameAndXAttrValue bytes.
         * @member {common.IBytesValue|null|undefined} bytes
         * @memberof file.NameAndXAttrValue
         * @instance
         */
        NameAndXAttrValue.prototype.bytes = null;

        /**
         * Creates a new NameAndXAttrValue instance using the specified properties.
         * @function create
         * @memberof file.NameAndXAttrValue
         * @static
         * @param {file.INameAndXAttrValue=} [properties] Properties to set
         * @returns {file.NameAndXAttrValue} NameAndXAttrValue instance
         */
        NameAndXAttrValue.create = function create(properties) {
            return new NameAndXAttrValue(properties);
        };

        /**
         * Encodes the specified NameAndXAttrValue message. Does not implicitly {@link file.NameAndXAttrValue.verify|verify} messages.
         * @function encode
         * @memberof file.NameAndXAttrValue
         * @static
         * @param {file.INameAndXAttrValue} message NameAndXAttrValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        NameAndXAttrValue.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.xaName);
            if (message.str != null && Object.hasOwnProperty.call(message, "str"))
                $root.common.StringValue.encode(message.str, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                $root.common.StringValue.encode(message.json, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                $root.common.BytesValue.encode(message.bytes, writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified NameAndXAttrValue message, length delimited. Does not implicitly {@link file.NameAndXAttrValue.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.NameAndXAttrValue
         * @static
         * @param {file.INameAndXAttrValue} message NameAndXAttrValue message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        NameAndXAttrValue.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a NameAndXAttrValue message from the specified reader or buffer.
         * @function decode
         * @memberof file.NameAndXAttrValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.NameAndXAttrValue} NameAndXAttrValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        NameAndXAttrValue.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.NameAndXAttrValue();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.xaName = reader.string();
                        break;
                    }
                case 2: {
                        message.str = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.json = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 4: {
                        message.bytes = $root.common.BytesValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a NameAndXAttrValue message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.NameAndXAttrValue
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.NameAndXAttrValue} NameAndXAttrValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        NameAndXAttrValue.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a NameAndXAttrValue message.
         * @function verify
         * @memberof file.NameAndXAttrValue
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        NameAndXAttrValue.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                if (!$util.isString(message.xaName))
                    return "xaName: string expected";
            if (message.str != null && Object.hasOwnProperty.call(message, "str")) {
                var error = $root.common.StringValue.verify(message.str, long + 1);
                if (error)
                    return "str." + error;
            }
            if (message.json != null && Object.hasOwnProperty.call(message, "json")) {
                var error = $root.common.StringValue.verify(message.json, long + 1);
                if (error)
                    return "json." + error;
            }
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes")) {
                var error = $root.common.BytesValue.verify(message.bytes, long + 1);
                if (error)
                    return "bytes." + error;
            }
            return null;
        };

        /**
         * Creates a NameAndXAttrValue message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.NameAndXAttrValue
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.NameAndXAttrValue} NameAndXAttrValue
         */
        NameAndXAttrValue.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.NameAndXAttrValue)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.NameAndXAttrValue: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.NameAndXAttrValue();
            if (object.xaName != null)
                message.xaName = String(object.xaName);
            if (object.str != null) {
                if (!$util.isObject(object.str))
                    throw TypeError(".file.NameAndXAttrValue.str: object expected");
                message.str = $root.common.StringValue.fromObject(object.str, long + 1);
            }
            if (object.json != null) {
                if (!$util.isObject(object.json))
                    throw TypeError(".file.NameAndXAttrValue.json: object expected");
                message.json = $root.common.StringValue.fromObject(object.json, long + 1);
            }
            if (object.bytes != null) {
                if (!$util.isObject(object.bytes))
                    throw TypeError(".file.NameAndXAttrValue.bytes: object expected");
                message.bytes = $root.common.BytesValue.fromObject(object.bytes, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a NameAndXAttrValue message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.NameAndXAttrValue
         * @static
         * @param {file.NameAndXAttrValue} message NameAndXAttrValue
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        NameAndXAttrValue.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.xaName = "";
                object.str = null;
                object.json = null;
                object.bytes = null;
            }
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                object.xaName = message.xaName;
            if (message.str != null && Object.hasOwnProperty.call(message, "str"))
                object.str = $root.common.StringValue.toObject(message.str, options, q + 1);
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                object.json = $root.common.StringValue.toObject(message.json, options, q + 1);
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                object.bytes = $root.common.BytesValue.toObject(message.bytes, options, q + 1);
            return object;
        };

        /**
         * Converts this NameAndXAttrValue to JSON.
         * @function toJSON
         * @memberof file.NameAndXAttrValue
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        NameAndXAttrValue.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for NameAndXAttrValue
         * @function getTypeUrl
         * @memberof file.NameAndXAttrValue
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        NameAndXAttrValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.NameAndXAttrValue";
        };

        return NameAndXAttrValue;
    })();

    file.XAttrsChanges = (function() {

        /**
         * Properties of a XAttrsChanges.
         * @memberof file
         * @interface IXAttrsChanges
         * @property {Array.<file.INameAndXAttrValue>|null} [set] XAttrsChanges set
         * @property {Array.<string>|null} [remove] XAttrsChanges remove
         */

        /**
         * Constructs a new XAttrsChanges.
         * @memberof file
         * @classdesc Represents a XAttrsChanges.
         * @implements IXAttrsChanges
         * @constructor
         * @param {file.IXAttrsChanges=} [properties] Properties to set
         */
        function XAttrsChanges(properties) {
            this.set = [];
            this.remove = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * XAttrsChanges set.
         * @member {Array.<file.INameAndXAttrValue>} set
         * @memberof file.XAttrsChanges
         * @instance
         */
        XAttrsChanges.prototype.set = $util.emptyArray;

        /**
         * XAttrsChanges remove.
         * @member {Array.<string>} remove
         * @memberof file.XAttrsChanges
         * @instance
         */
        XAttrsChanges.prototype.remove = $util.emptyArray;

        /**
         * Creates a new XAttrsChanges instance using the specified properties.
         * @function create
         * @memberof file.XAttrsChanges
         * @static
         * @param {file.IXAttrsChanges=} [properties] Properties to set
         * @returns {file.XAttrsChanges} XAttrsChanges instance
         */
        XAttrsChanges.create = function create(properties) {
            return new XAttrsChanges(properties);
        };

        /**
         * Encodes the specified XAttrsChanges message. Does not implicitly {@link file.XAttrsChanges.verify|verify} messages.
         * @function encode
         * @memberof file.XAttrsChanges
         * @static
         * @param {file.IXAttrsChanges} message XAttrsChanges message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        XAttrsChanges.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.set != null && message.set.length)
                for (var i = 0; i < message.set.length; ++i)
                    $root.file.NameAndXAttrValue.encode(message.set[i], writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.remove != null && message.remove.length)
                for (var i = 0; i < message.remove.length; ++i)
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.remove[i]);
            return writer;
        };

        /**
         * Encodes the specified XAttrsChanges message, length delimited. Does not implicitly {@link file.XAttrsChanges.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.XAttrsChanges
         * @static
         * @param {file.IXAttrsChanges} message XAttrsChanges message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        XAttrsChanges.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a XAttrsChanges message from the specified reader or buffer.
         * @function decode
         * @memberof file.XAttrsChanges
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.XAttrsChanges} XAttrsChanges
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        XAttrsChanges.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.XAttrsChanges();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        if (!(message.set && message.set.length))
                            message.set = [];
                        message.set.push($root.file.NameAndXAttrValue.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                case 2: {
                        if (!(message.remove && message.remove.length))
                            message.remove = [];
                        message.remove.push(reader.string());
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a XAttrsChanges message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.XAttrsChanges
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.XAttrsChanges} XAttrsChanges
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        XAttrsChanges.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a XAttrsChanges message.
         * @function verify
         * @memberof file.XAttrsChanges
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        XAttrsChanges.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.set != null && Object.hasOwnProperty.call(message, "set")) {
                if (!Array.isArray(message.set))
                    return "set: array expected";
                for (var i = 0; i < message.set.length; ++i) {
                    var error = $root.file.NameAndXAttrValue.verify(message.set[i], long + 1);
                    if (error)
                        return "set." + error;
                }
            }
            if (message.remove != null && Object.hasOwnProperty.call(message, "remove")) {
                if (!Array.isArray(message.remove))
                    return "remove: array expected";
                for (var i = 0; i < message.remove.length; ++i)
                    if (!$util.isString(message.remove[i]))
                        return "remove: string[] expected";
            }
            return null;
        };

        /**
         * Creates a XAttrsChanges message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.XAttrsChanges
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.XAttrsChanges} XAttrsChanges
         */
        XAttrsChanges.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.XAttrsChanges)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.XAttrsChanges: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.XAttrsChanges();
            if (object.set) {
                if (!Array.isArray(object.set))
                    throw TypeError(".file.XAttrsChanges.set: array expected");
                message.set = [];
                for (var i = 0; i < object.set.length; ++i) {
                    if (!$util.isObject(object.set[i]))
                        throw TypeError(".file.XAttrsChanges.set: object expected");
                    message.set[i] = $root.file.NameAndXAttrValue.fromObject(object.set[i], long + 1);
                }
            }
            if (object.remove) {
                if (!Array.isArray(object.remove))
                    throw TypeError(".file.XAttrsChanges.remove: array expected");
                message.remove = [];
                for (var i = 0; i < object.remove.length; ++i)
                    message.remove[i] = String(object.remove[i]);
            }
            return message;
        };

        /**
         * Creates a plain object from a XAttrsChanges message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.XAttrsChanges
         * @static
         * @param {file.XAttrsChanges} message XAttrsChanges
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        XAttrsChanges.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults) {
                object.set = [];
                object.remove = [];
            }
            if (message.set && message.set.length) {
                object.set = [];
                for (var j = 0; j < message.set.length; ++j)
                    object.set[j] = $root.file.NameAndXAttrValue.toObject(message.set[j], options, q + 1);
            }
            if (message.remove && message.remove.length) {
                object.remove = [];
                for (var j = 0; j < message.remove.length; ++j)
                    object.remove[j] = message.remove[j];
            }
            return object;
        };

        /**
         * Converts this XAttrsChanges to JSON.
         * @function toJSON
         * @memberof file.XAttrsChanges
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        XAttrsChanges.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for XAttrsChanges
         * @function getTypeUrl
         * @memberof file.XAttrsChanges
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        XAttrsChanges.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.XAttrsChanges";
        };

        return XAttrsChanges;
    })();

    file.WriteBytesRequestBody = (function() {

        /**
         * Properties of a WriteBytesRequestBody.
         * @memberof file
         * @interface IWriteBytesRequestBody
         * @property {Uint8Array|null} [bytes] WriteBytesRequestBody bytes
         */

        /**
         * Constructs a new WriteBytesRequestBody.
         * @memberof file
         * @classdesc Represents a WriteBytesRequestBody.
         * @implements IWriteBytesRequestBody
         * @constructor
         * @param {file.IWriteBytesRequestBody=} [properties] Properties to set
         */
        function WriteBytesRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * WriteBytesRequestBody bytes.
         * @member {Uint8Array} bytes
         * @memberof file.WriteBytesRequestBody
         * @instance
         */
        WriteBytesRequestBody.prototype.bytes = $util.newBuffer([]);

        /**
         * Creates a new WriteBytesRequestBody instance using the specified properties.
         * @function create
         * @memberof file.WriteBytesRequestBody
         * @static
         * @param {file.IWriteBytesRequestBody=} [properties] Properties to set
         * @returns {file.WriteBytesRequestBody} WriteBytesRequestBody instance
         */
        WriteBytesRequestBody.create = function create(properties) {
            return new WriteBytesRequestBody(properties);
        };

        /**
         * Encodes the specified WriteBytesRequestBody message. Does not implicitly {@link file.WriteBytesRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.WriteBytesRequestBody
         * @static
         * @param {file.IWriteBytesRequestBody} message WriteBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteBytesRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                writer.uint32(/* id 1, wireType 2 =*/10).bytes(message.bytes);
            return writer;
        };

        /**
         * Encodes the specified WriteBytesRequestBody message, length delimited. Does not implicitly {@link file.WriteBytesRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.WriteBytesRequestBody
         * @static
         * @param {file.IWriteBytesRequestBody} message WriteBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteBytesRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a WriteBytesRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.WriteBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.WriteBytesRequestBody} WriteBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteBytesRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.WriteBytesRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.bytes = reader.bytes();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a WriteBytesRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.WriteBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.WriteBytesRequestBody} WriteBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteBytesRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a WriteBytesRequestBody message.
         * @function verify
         * @memberof file.WriteBytesRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        WriteBytesRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                if (!(message.bytes && typeof message.bytes.length === "number" || $util.isString(message.bytes)))
                    return "bytes: buffer expected";
            return null;
        };

        /**
         * Creates a WriteBytesRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.WriteBytesRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.WriteBytesRequestBody} WriteBytesRequestBody
         */
        WriteBytesRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.WriteBytesRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.WriteBytesRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.WriteBytesRequestBody();
            if (object.bytes != null)
                if (typeof object.bytes === "string")
                    $util.base64.decode(object.bytes, message.bytes = $util.newBuffer($util.base64.length(object.bytes)), 0);
                else if (object.bytes.length >= 0)
                    message.bytes = object.bytes;
            return message;
        };

        /**
         * Creates a plain object from a WriteBytesRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.WriteBytesRequestBody
         * @static
         * @param {file.WriteBytesRequestBody} message WriteBytesRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        WriteBytesRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                if (options.bytes === String)
                    object.bytes = "";
                else {
                    object.bytes = [];
                    if (options.bytes !== Array)
                        object.bytes = $util.newBuffer(object.bytes);
                }
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                object.bytes = options.bytes === String ? $util.base64.encode(message.bytes, 0, message.bytes.length) : options.bytes === Array ? Array.prototype.slice.call(message.bytes) : message.bytes;
            return object;
        };

        /**
         * Converts this WriteBytesRequestBody to JSON.
         * @function toJSON
         * @memberof file.WriteBytesRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        WriteBytesRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for WriteBytesRequestBody
         * @function getTypeUrl
         * @memberof file.WriteBytesRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        WriteBytesRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.WriteBytesRequestBody";
        };

        return WriteBytesRequestBody;
    })();

    file.WriteTxtRequestBody = (function() {

        /**
         * Properties of a WriteTxtRequestBody.
         * @memberof file
         * @interface IWriteTxtRequestBody
         * @property {string|null} [txt] WriteTxtRequestBody txt
         */

        /**
         * Constructs a new WriteTxtRequestBody.
         * @memberof file
         * @classdesc Represents a WriteTxtRequestBody.
         * @implements IWriteTxtRequestBody
         * @constructor
         * @param {file.IWriteTxtRequestBody=} [properties] Properties to set
         */
        function WriteTxtRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * WriteTxtRequestBody txt.
         * @member {string} txt
         * @memberof file.WriteTxtRequestBody
         * @instance
         */
        WriteTxtRequestBody.prototype.txt = "";

        /**
         * Creates a new WriteTxtRequestBody instance using the specified properties.
         * @function create
         * @memberof file.WriteTxtRequestBody
         * @static
         * @param {file.IWriteTxtRequestBody=} [properties] Properties to set
         * @returns {file.WriteTxtRequestBody} WriteTxtRequestBody instance
         */
        WriteTxtRequestBody.create = function create(properties) {
            return new WriteTxtRequestBody(properties);
        };

        /**
         * Encodes the specified WriteTxtRequestBody message. Does not implicitly {@link file.WriteTxtRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.WriteTxtRequestBody
         * @static
         * @param {file.IWriteTxtRequestBody} message WriteTxtRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteTxtRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.txt);
            return writer;
        };

        /**
         * Encodes the specified WriteTxtRequestBody message, length delimited. Does not implicitly {@link file.WriteTxtRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.WriteTxtRequestBody
         * @static
         * @param {file.IWriteTxtRequestBody} message WriteTxtRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteTxtRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a WriteTxtRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.WriteTxtRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.WriteTxtRequestBody} WriteTxtRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteTxtRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.WriteTxtRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.txt = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a WriteTxtRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.WriteTxtRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.WriteTxtRequestBody} WriteTxtRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteTxtRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a WriteTxtRequestBody message.
         * @function verify
         * @memberof file.WriteTxtRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        WriteTxtRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                if (!$util.isString(message.txt))
                    return "txt: string expected";
            return null;
        };

        /**
         * Creates a WriteTxtRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.WriteTxtRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.WriteTxtRequestBody} WriteTxtRequestBody
         */
        WriteTxtRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.WriteTxtRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.WriteTxtRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.WriteTxtRequestBody();
            if (object.txt != null)
                message.txt = String(object.txt);
            return message;
        };

        /**
         * Creates a plain object from a WriteTxtRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.WriteTxtRequestBody
         * @static
         * @param {file.WriteTxtRequestBody} message WriteTxtRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        WriteTxtRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.txt = "";
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                object.txt = message.txt;
            return object;
        };

        /**
         * Converts this WriteTxtRequestBody to JSON.
         * @function toJSON
         * @memberof file.WriteTxtRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        WriteTxtRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for WriteTxtRequestBody
         * @function getTypeUrl
         * @memberof file.WriteTxtRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        WriteTxtRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.WriteTxtRequestBody";
        };

        return WriteTxtRequestBody;
    })();

    file.WriteJsonRequestBody = (function() {

        /**
         * Properties of a WriteJsonRequestBody.
         * @memberof file
         * @interface IWriteJsonRequestBody
         * @property {string|null} [json] WriteJsonRequestBody json
         */

        /**
         * Constructs a new WriteJsonRequestBody.
         * @memberof file
         * @classdesc Represents a WriteJsonRequestBody.
         * @implements IWriteJsonRequestBody
         * @constructor
         * @param {file.IWriteJsonRequestBody=} [properties] Properties to set
         */
        function WriteJsonRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * WriteJsonRequestBody json.
         * @member {string} json
         * @memberof file.WriteJsonRequestBody
         * @instance
         */
        WriteJsonRequestBody.prototype.json = "";

        /**
         * Creates a new WriteJsonRequestBody instance using the specified properties.
         * @function create
         * @memberof file.WriteJsonRequestBody
         * @static
         * @param {file.IWriteJsonRequestBody=} [properties] Properties to set
         * @returns {file.WriteJsonRequestBody} WriteJsonRequestBody instance
         */
        WriteJsonRequestBody.create = function create(properties) {
            return new WriteJsonRequestBody(properties);
        };

        /**
         * Encodes the specified WriteJsonRequestBody message. Does not implicitly {@link file.WriteJsonRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.WriteJsonRequestBody
         * @static
         * @param {file.IWriteJsonRequestBody} message WriteJsonRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteJsonRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.json);
            return writer;
        };

        /**
         * Encodes the specified WriteJsonRequestBody message, length delimited. Does not implicitly {@link file.WriteJsonRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.WriteJsonRequestBody
         * @static
         * @param {file.IWriteJsonRequestBody} message WriteJsonRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteJsonRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a WriteJsonRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.WriteJsonRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.WriteJsonRequestBody} WriteJsonRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteJsonRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.WriteJsonRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.json = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a WriteJsonRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.WriteJsonRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.WriteJsonRequestBody} WriteJsonRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteJsonRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a WriteJsonRequestBody message.
         * @function verify
         * @memberof file.WriteJsonRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        WriteJsonRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                if (!$util.isString(message.json))
                    return "json: string expected";
            return null;
        };

        /**
         * Creates a WriteJsonRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.WriteJsonRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.WriteJsonRequestBody} WriteJsonRequestBody
         */
        WriteJsonRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.WriteJsonRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.WriteJsonRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.WriteJsonRequestBody();
            if (object.json != null)
                message.json = String(object.json);
            return message;
        };

        /**
         * Creates a plain object from a WriteJsonRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.WriteJsonRequestBody
         * @static
         * @param {file.WriteJsonRequestBody} message WriteJsonRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        WriteJsonRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.json = "";
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                object.json = message.json;
            return object;
        };

        /**
         * Converts this WriteJsonRequestBody to JSON.
         * @function toJSON
         * @memberof file.WriteJsonRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        WriteJsonRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for WriteJsonRequestBody
         * @function getTypeUrl
         * @memberof file.WriteJsonRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        WriteJsonRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.WriteJsonRequestBody";
        };

        return WriteJsonRequestBody;
    })();

    file.GetByteSinkRequestBody = (function() {

        /**
         * Properties of a GetByteSinkRequestBody.
         * @memberof file
         * @interface IGetByteSinkRequestBody
         * @property {common.IBooleanValue|null} [truncateFile] GetByteSinkRequestBody truncateFile
         */

        /**
         * Constructs a new GetByteSinkRequestBody.
         * @memberof file
         * @classdesc Represents a GetByteSinkRequestBody.
         * @implements IGetByteSinkRequestBody
         * @constructor
         * @param {file.IGetByteSinkRequestBody=} [properties] Properties to set
         */
        function GetByteSinkRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * GetByteSinkRequestBody truncateFile.
         * @member {common.IBooleanValue|null|undefined} truncateFile
         * @memberof file.GetByteSinkRequestBody
         * @instance
         */
        GetByteSinkRequestBody.prototype.truncateFile = null;

        /**
         * Creates a new GetByteSinkRequestBody instance using the specified properties.
         * @function create
         * @memberof file.GetByteSinkRequestBody
         * @static
         * @param {file.IGetByteSinkRequestBody=} [properties] Properties to set
         * @returns {file.GetByteSinkRequestBody} GetByteSinkRequestBody instance
         */
        GetByteSinkRequestBody.create = function create(properties) {
            return new GetByteSinkRequestBody(properties);
        };

        /**
         * Encodes the specified GetByteSinkRequestBody message. Does not implicitly {@link file.GetByteSinkRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.GetByteSinkRequestBody
         * @static
         * @param {file.IGetByteSinkRequestBody} message GetByteSinkRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GetByteSinkRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.truncateFile != null && Object.hasOwnProperty.call(message, "truncateFile"))
                $root.common.BooleanValue.encode(message.truncateFile, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified GetByteSinkRequestBody message, length delimited. Does not implicitly {@link file.GetByteSinkRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.GetByteSinkRequestBody
         * @static
         * @param {file.IGetByteSinkRequestBody} message GetByteSinkRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GetByteSinkRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a GetByteSinkRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.GetByteSinkRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.GetByteSinkRequestBody} GetByteSinkRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GetByteSinkRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.GetByteSinkRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.truncateFile = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a GetByteSinkRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.GetByteSinkRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.GetByteSinkRequestBody} GetByteSinkRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GetByteSinkRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a GetByteSinkRequestBody message.
         * @function verify
         * @memberof file.GetByteSinkRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        GetByteSinkRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.truncateFile != null && Object.hasOwnProperty.call(message, "truncateFile")) {
                var error = $root.common.BooleanValue.verify(message.truncateFile, long + 1);
                if (error)
                    return "truncateFile." + error;
            }
            return null;
        };

        /**
         * Creates a GetByteSinkRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.GetByteSinkRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.GetByteSinkRequestBody} GetByteSinkRequestBody
         */
        GetByteSinkRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.GetByteSinkRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.GetByteSinkRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.GetByteSinkRequestBody();
            if (object.truncateFile != null) {
                if (!$util.isObject(object.truncateFile))
                    throw TypeError(".file.GetByteSinkRequestBody.truncateFile: object expected");
                message.truncateFile = $root.common.BooleanValue.fromObject(object.truncateFile, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a GetByteSinkRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.GetByteSinkRequestBody
         * @static
         * @param {file.GetByteSinkRequestBody} message GetByteSinkRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        GetByteSinkRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.truncateFile = null;
            if (message.truncateFile != null && Object.hasOwnProperty.call(message, "truncateFile"))
                object.truncateFile = $root.common.BooleanValue.toObject(message.truncateFile, options, q + 1);
            return object;
        };

        /**
         * Converts this GetByteSinkRequestBody to JSON.
         * @function toJSON
         * @memberof file.GetByteSinkRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        GetByteSinkRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for GetByteSinkRequestBody
         * @function getTypeUrl
         * @memberof file.GetByteSinkRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        GetByteSinkRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.GetByteSinkRequestBody";
        };

        return GetByteSinkRequestBody;
    })();

    file.CopyRequestBody = (function() {

        /**
         * Properties of a CopyRequestBody.
         * @memberof file
         * @interface ICopyRequestBody
         * @property {common.IObjectReference|null} [file] CopyRequestBody file
         */

        /**
         * Constructs a new CopyRequestBody.
         * @memberof file
         * @classdesc Represents a CopyRequestBody.
         * @implements ICopyRequestBody
         * @constructor
         * @param {file.ICopyRequestBody=} [properties] Properties to set
         */
        function CopyRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * CopyRequestBody file.
         * @member {common.IObjectReference|null|undefined} file
         * @memberof file.CopyRequestBody
         * @instance
         */
        CopyRequestBody.prototype.file = null;

        /**
         * Creates a new CopyRequestBody instance using the specified properties.
         * @function create
         * @memberof file.CopyRequestBody
         * @static
         * @param {file.ICopyRequestBody=} [properties] Properties to set
         * @returns {file.CopyRequestBody} CopyRequestBody instance
         */
        CopyRequestBody.create = function create(properties) {
            return new CopyRequestBody(properties);
        };

        /**
         * Encodes the specified CopyRequestBody message. Does not implicitly {@link file.CopyRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.CopyRequestBody
         * @static
         * @param {file.ICopyRequestBody} message CopyRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CopyRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.file != null && Object.hasOwnProperty.call(message, "file"))
                $root.common.ObjectReference.encode(message.file, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified CopyRequestBody message, length delimited. Does not implicitly {@link file.CopyRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.CopyRequestBody
         * @static
         * @param {file.ICopyRequestBody} message CopyRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CopyRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a CopyRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.CopyRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.CopyRequestBody} CopyRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CopyRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.CopyRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.file = $root.common.ObjectReference.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a CopyRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.CopyRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.CopyRequestBody} CopyRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CopyRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a CopyRequestBody message.
         * @function verify
         * @memberof file.CopyRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CopyRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.file != null && Object.hasOwnProperty.call(message, "file")) {
                var error = $root.common.ObjectReference.verify(message.file, long + 1);
                if (error)
                    return "file." + error;
            }
            return null;
        };

        /**
         * Creates a CopyRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.CopyRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.CopyRequestBody} CopyRequestBody
         */
        CopyRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.CopyRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.CopyRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.CopyRequestBody();
            if (object.file != null) {
                if (!$util.isObject(object.file))
                    throw TypeError(".file.CopyRequestBody.file: object expected");
                message.file = $root.common.ObjectReference.fromObject(object.file, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a CopyRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.CopyRequestBody
         * @static
         * @param {file.CopyRequestBody} message CopyRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CopyRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.file = null;
            if (message.file != null && Object.hasOwnProperty.call(message, "file"))
                object.file = $root.common.ObjectReference.toObject(message.file, options, q + 1);
            return object;
        };

        /**
         * Converts this CopyRequestBody to JSON.
         * @function toJSON
         * @memberof file.CopyRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CopyRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for CopyRequestBody
         * @function getTypeUrl
         * @memberof file.CopyRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        CopyRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.CopyRequestBody";
        };

        return CopyRequestBody;
    })();

    file.VersionedGetByteSinkRequestBody = (function() {

        /**
         * Properties of a VersionedGetByteSinkRequestBody.
         * @memberof file
         * @interface IVersionedGetByteSinkRequestBody
         * @property {common.IBooleanValue|null} [truncateFile] VersionedGetByteSinkRequestBody truncateFile
         * @property {common.IUInt64Value|null} [currentVersion] VersionedGetByteSinkRequestBody currentVersion
         */

        /**
         * Constructs a new VersionedGetByteSinkRequestBody.
         * @memberof file
         * @classdesc Represents a VersionedGetByteSinkRequestBody.
         * @implements IVersionedGetByteSinkRequestBody
         * @constructor
         * @param {file.IVersionedGetByteSinkRequestBody=} [properties] Properties to set
         */
        function VersionedGetByteSinkRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedGetByteSinkRequestBody truncateFile.
         * @member {common.IBooleanValue|null|undefined} truncateFile
         * @memberof file.VersionedGetByteSinkRequestBody
         * @instance
         */
        VersionedGetByteSinkRequestBody.prototype.truncateFile = null;

        /**
         * VersionedGetByteSinkRequestBody currentVersion.
         * @member {common.IUInt64Value|null|undefined} currentVersion
         * @memberof file.VersionedGetByteSinkRequestBody
         * @instance
         */
        VersionedGetByteSinkRequestBody.prototype.currentVersion = null;

        /**
         * Creates a new VersionedGetByteSinkRequestBody instance using the specified properties.
         * @function create
         * @memberof file.VersionedGetByteSinkRequestBody
         * @static
         * @param {file.IVersionedGetByteSinkRequestBody=} [properties] Properties to set
         * @returns {file.VersionedGetByteSinkRequestBody} VersionedGetByteSinkRequestBody instance
         */
        VersionedGetByteSinkRequestBody.create = function create(properties) {
            return new VersionedGetByteSinkRequestBody(properties);
        };

        /**
         * Encodes the specified VersionedGetByteSinkRequestBody message. Does not implicitly {@link file.VersionedGetByteSinkRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.VersionedGetByteSinkRequestBody
         * @static
         * @param {file.IVersionedGetByteSinkRequestBody} message VersionedGetByteSinkRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetByteSinkRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.truncateFile != null && Object.hasOwnProperty.call(message, "truncateFile"))
                $root.common.BooleanValue.encode(message.truncateFile, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion"))
                $root.common.UInt64Value.encode(message.currentVersion, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedGetByteSinkRequestBody message, length delimited. Does not implicitly {@link file.VersionedGetByteSinkRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.VersionedGetByteSinkRequestBody
         * @static
         * @param {file.IVersionedGetByteSinkRequestBody} message VersionedGetByteSinkRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetByteSinkRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedGetByteSinkRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.VersionedGetByteSinkRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.VersionedGetByteSinkRequestBody} VersionedGetByteSinkRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetByteSinkRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.VersionedGetByteSinkRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.truncateFile = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.currentVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedGetByteSinkRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.VersionedGetByteSinkRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.VersionedGetByteSinkRequestBody} VersionedGetByteSinkRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetByteSinkRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedGetByteSinkRequestBody message.
         * @function verify
         * @memberof file.VersionedGetByteSinkRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedGetByteSinkRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.truncateFile != null && Object.hasOwnProperty.call(message, "truncateFile")) {
                var error = $root.common.BooleanValue.verify(message.truncateFile, long + 1);
                if (error)
                    return "truncateFile." + error;
            }
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion")) {
                var error = $root.common.UInt64Value.verify(message.currentVersion, long + 1);
                if (error)
                    return "currentVersion." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedGetByteSinkRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.VersionedGetByteSinkRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.VersionedGetByteSinkRequestBody} VersionedGetByteSinkRequestBody
         */
        VersionedGetByteSinkRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.VersionedGetByteSinkRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.VersionedGetByteSinkRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.VersionedGetByteSinkRequestBody();
            if (object.truncateFile != null) {
                if (!$util.isObject(object.truncateFile))
                    throw TypeError(".file.VersionedGetByteSinkRequestBody.truncateFile: object expected");
                message.truncateFile = $root.common.BooleanValue.fromObject(object.truncateFile, long + 1);
            }
            if (object.currentVersion != null) {
                if (!$util.isObject(object.currentVersion))
                    throw TypeError(".file.VersionedGetByteSinkRequestBody.currentVersion: object expected");
                message.currentVersion = $root.common.UInt64Value.fromObject(object.currentVersion, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedGetByteSinkRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.VersionedGetByteSinkRequestBody
         * @static
         * @param {file.VersionedGetByteSinkRequestBody} message VersionedGetByteSinkRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedGetByteSinkRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.truncateFile = null;
                object.currentVersion = null;
            }
            if (message.truncateFile != null && Object.hasOwnProperty.call(message, "truncateFile"))
                object.truncateFile = $root.common.BooleanValue.toObject(message.truncateFile, options, q + 1);
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion"))
                object.currentVersion = $root.common.UInt64Value.toObject(message.currentVersion, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedGetByteSinkRequestBody to JSON.
         * @function toJSON
         * @memberof file.VersionedGetByteSinkRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedGetByteSinkRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedGetByteSinkRequestBody
         * @function getTypeUrl
         * @memberof file.VersionedGetByteSinkRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedGetByteSinkRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.VersionedGetByteSinkRequestBody";
        };

        return VersionedGetByteSinkRequestBody;
    })();

    file.VersionedGetByteSinkReplyBody = (function() {

        /**
         * Properties of a VersionedGetByteSinkReplyBody.
         * @memberof file
         * @interface IVersionedGetByteSinkReplyBody
         * @property {number|Long|null} [version] VersionedGetByteSinkReplyBody version
         * @property {common.IObjectReference|null} [sink] VersionedGetByteSinkReplyBody sink
         */

        /**
         * Constructs a new VersionedGetByteSinkReplyBody.
         * @memberof file
         * @classdesc Represents a VersionedGetByteSinkReplyBody.
         * @implements IVersionedGetByteSinkReplyBody
         * @constructor
         * @param {file.IVersionedGetByteSinkReplyBody=} [properties] Properties to set
         */
        function VersionedGetByteSinkReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedGetByteSinkReplyBody version.
         * @member {number|Long} version
         * @memberof file.VersionedGetByteSinkReplyBody
         * @instance
         */
        VersionedGetByteSinkReplyBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * VersionedGetByteSinkReplyBody sink.
         * @member {common.IObjectReference|null|undefined} sink
         * @memberof file.VersionedGetByteSinkReplyBody
         * @instance
         */
        VersionedGetByteSinkReplyBody.prototype.sink = null;

        /**
         * Creates a new VersionedGetByteSinkReplyBody instance using the specified properties.
         * @function create
         * @memberof file.VersionedGetByteSinkReplyBody
         * @static
         * @param {file.IVersionedGetByteSinkReplyBody=} [properties] Properties to set
         * @returns {file.VersionedGetByteSinkReplyBody} VersionedGetByteSinkReplyBody instance
         */
        VersionedGetByteSinkReplyBody.create = function create(properties) {
            return new VersionedGetByteSinkReplyBody(properties);
        };

        /**
         * Encodes the specified VersionedGetByteSinkReplyBody message. Does not implicitly {@link file.VersionedGetByteSinkReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.VersionedGetByteSinkReplyBody
         * @static
         * @param {file.IVersionedGetByteSinkReplyBody} message VersionedGetByteSinkReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetByteSinkReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.version);
            if (message.sink != null && Object.hasOwnProperty.call(message, "sink"))
                $root.common.ObjectReference.encode(message.sink, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedGetByteSinkReplyBody message, length delimited. Does not implicitly {@link file.VersionedGetByteSinkReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.VersionedGetByteSinkReplyBody
         * @static
         * @param {file.IVersionedGetByteSinkReplyBody} message VersionedGetByteSinkReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetByteSinkReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedGetByteSinkReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.VersionedGetByteSinkReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.VersionedGetByteSinkReplyBody} VersionedGetByteSinkReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetByteSinkReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.VersionedGetByteSinkReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.version = reader.uint64();
                        break;
                    }
                case 2: {
                        message.sink = $root.common.ObjectReference.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedGetByteSinkReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.VersionedGetByteSinkReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.VersionedGetByteSinkReplyBody} VersionedGetByteSinkReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetByteSinkReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedGetByteSinkReplyBody message.
         * @function verify
         * @memberof file.VersionedGetByteSinkReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedGetByteSinkReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.sink != null && Object.hasOwnProperty.call(message, "sink")) {
                var error = $root.common.ObjectReference.verify(message.sink, long + 1);
                if (error)
                    return "sink." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedGetByteSinkReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.VersionedGetByteSinkReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.VersionedGetByteSinkReplyBody} VersionedGetByteSinkReplyBody
         */
        VersionedGetByteSinkReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.VersionedGetByteSinkReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.VersionedGetByteSinkReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.VersionedGetByteSinkReplyBody();
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            if (object.sink != null) {
                if (!$util.isObject(object.sink))
                    throw TypeError(".file.VersionedGetByteSinkReplyBody.sink: object expected");
                message.sink = $root.common.ObjectReference.fromObject(object.sink, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedGetByteSinkReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.VersionedGetByteSinkReplyBody
         * @static
         * @param {file.VersionedGetByteSinkReplyBody} message VersionedGetByteSinkReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedGetByteSinkReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                object.sink = null;
            }
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            if (message.sink != null && Object.hasOwnProperty.call(message, "sink"))
                object.sink = $root.common.ObjectReference.toObject(message.sink, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedGetByteSinkReplyBody to JSON.
         * @function toJSON
         * @memberof file.VersionedGetByteSinkReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedGetByteSinkReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedGetByteSinkReplyBody
         * @function getTypeUrl
         * @memberof file.VersionedGetByteSinkReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedGetByteSinkReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.VersionedGetByteSinkReplyBody";
        };

        return VersionedGetByteSinkReplyBody;
    })();

    file.ArchiveCurrentRequestBody = (function() {

        /**
         * Properties of an ArchiveCurrentRequestBody.
         * @memberof file
         * @interface IArchiveCurrentRequestBody
         * @property {common.IUInt64Value|null} [version] ArchiveCurrentRequestBody version
         */

        /**
         * Constructs a new ArchiveCurrentRequestBody.
         * @memberof file
         * @classdesc Represents an ArchiveCurrentRequestBody.
         * @implements IArchiveCurrentRequestBody
         * @constructor
         * @param {file.IArchiveCurrentRequestBody=} [properties] Properties to set
         */
        function ArchiveCurrentRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * ArchiveCurrentRequestBody version.
         * @member {common.IUInt64Value|null|undefined} version
         * @memberof file.ArchiveCurrentRequestBody
         * @instance
         */
        ArchiveCurrentRequestBody.prototype.version = null;

        /**
         * Creates a new ArchiveCurrentRequestBody instance using the specified properties.
         * @function create
         * @memberof file.ArchiveCurrentRequestBody
         * @static
         * @param {file.IArchiveCurrentRequestBody=} [properties] Properties to set
         * @returns {file.ArchiveCurrentRequestBody} ArchiveCurrentRequestBody instance
         */
        ArchiveCurrentRequestBody.create = function create(properties) {
            return new ArchiveCurrentRequestBody(properties);
        };

        /**
         * Encodes the specified ArchiveCurrentRequestBody message. Does not implicitly {@link file.ArchiveCurrentRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.ArchiveCurrentRequestBody
         * @static
         * @param {file.IArchiveCurrentRequestBody} message ArchiveCurrentRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ArchiveCurrentRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                $root.common.UInt64Value.encode(message.version, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified ArchiveCurrentRequestBody message, length delimited. Does not implicitly {@link file.ArchiveCurrentRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.ArchiveCurrentRequestBody
         * @static
         * @param {file.IArchiveCurrentRequestBody} message ArchiveCurrentRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ArchiveCurrentRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an ArchiveCurrentRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.ArchiveCurrentRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.ArchiveCurrentRequestBody} ArchiveCurrentRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ArchiveCurrentRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.ArchiveCurrentRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.version = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an ArchiveCurrentRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.ArchiveCurrentRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.ArchiveCurrentRequestBody} ArchiveCurrentRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ArchiveCurrentRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an ArchiveCurrentRequestBody message.
         * @function verify
         * @memberof file.ArchiveCurrentRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        ArchiveCurrentRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.version != null && Object.hasOwnProperty.call(message, "version")) {
                var error = $root.common.UInt64Value.verify(message.version, long + 1);
                if (error)
                    return "version." + error;
            }
            return null;
        };

        /**
         * Creates an ArchiveCurrentRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.ArchiveCurrentRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.ArchiveCurrentRequestBody} ArchiveCurrentRequestBody
         */
        ArchiveCurrentRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.ArchiveCurrentRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.ArchiveCurrentRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.ArchiveCurrentRequestBody();
            if (object.version != null) {
                if (!$util.isObject(object.version))
                    throw TypeError(".file.ArchiveCurrentRequestBody.version: object expected");
                message.version = $root.common.UInt64Value.fromObject(object.version, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an ArchiveCurrentRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.ArchiveCurrentRequestBody
         * @static
         * @param {file.ArchiveCurrentRequestBody} message ArchiveCurrentRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        ArchiveCurrentRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.version = null;
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                object.version = $root.common.UInt64Value.toObject(message.version, options, q + 1);
            return object;
        };

        /**
         * Converts this ArchiveCurrentRequestBody to JSON.
         * @function toJSON
         * @memberof file.ArchiveCurrentRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        ArchiveCurrentRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for ArchiveCurrentRequestBody
         * @function getTypeUrl
         * @memberof file.ArchiveCurrentRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        ArchiveCurrentRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.ArchiveCurrentRequestBody";
        };

        return ArchiveCurrentRequestBody;
    })();

    file.FileSyncIsOnDiskRequestBody = (function() {

        /**
         * Properties of a FileSyncIsOnDiskRequestBody.
         * @memberof file
         * @interface IFileSyncIsOnDiskRequestBody
         * @property {number|Long|null} [version] FileSyncIsOnDiskRequestBody version
         */

        /**
         * Constructs a new FileSyncIsOnDiskRequestBody.
         * @memberof file
         * @classdesc Represents a FileSyncIsOnDiskRequestBody.
         * @implements IFileSyncIsOnDiskRequestBody
         * @constructor
         * @param {file.IFileSyncIsOnDiskRequestBody=} [properties] Properties to set
         */
        function FileSyncIsOnDiskRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FileSyncIsOnDiskRequestBody version.
         * @member {number|Long} version
         * @memberof file.FileSyncIsOnDiskRequestBody
         * @instance
         */
        FileSyncIsOnDiskRequestBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new FileSyncIsOnDiskRequestBody instance using the specified properties.
         * @function create
         * @memberof file.FileSyncIsOnDiskRequestBody
         * @static
         * @param {file.IFileSyncIsOnDiskRequestBody=} [properties] Properties to set
         * @returns {file.FileSyncIsOnDiskRequestBody} FileSyncIsOnDiskRequestBody instance
         */
        FileSyncIsOnDiskRequestBody.create = function create(properties) {
            return new FileSyncIsOnDiskRequestBody(properties);
        };

        /**
         * Encodes the specified FileSyncIsOnDiskRequestBody message. Does not implicitly {@link file.FileSyncIsOnDiskRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.FileSyncIsOnDiskRequestBody
         * @static
         * @param {file.IFileSyncIsOnDiskRequestBody} message FileSyncIsOnDiskRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncIsOnDiskRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.version);
            return writer;
        };

        /**
         * Encodes the specified FileSyncIsOnDiskRequestBody message, length delimited. Does not implicitly {@link file.FileSyncIsOnDiskRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.FileSyncIsOnDiskRequestBody
         * @static
         * @param {file.IFileSyncIsOnDiskRequestBody} message FileSyncIsOnDiskRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncIsOnDiskRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FileSyncIsOnDiskRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.FileSyncIsOnDiskRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.FileSyncIsOnDiskRequestBody} FileSyncIsOnDiskRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncIsOnDiskRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.FileSyncIsOnDiskRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.version = reader.uint64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FileSyncIsOnDiskRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.FileSyncIsOnDiskRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.FileSyncIsOnDiskRequestBody} FileSyncIsOnDiskRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncIsOnDiskRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FileSyncIsOnDiskRequestBody message.
         * @function verify
         * @memberof file.FileSyncIsOnDiskRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FileSyncIsOnDiskRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            return null;
        };

        /**
         * Creates a FileSyncIsOnDiskRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.FileSyncIsOnDiskRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.FileSyncIsOnDiskRequestBody} FileSyncIsOnDiskRequestBody
         */
        FileSyncIsOnDiskRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.FileSyncIsOnDiskRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.FileSyncIsOnDiskRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.FileSyncIsOnDiskRequestBody();
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a FileSyncIsOnDiskRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.FileSyncIsOnDiskRequestBody
         * @static
         * @param {file.FileSyncIsOnDiskRequestBody} message FileSyncIsOnDiskRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FileSyncIsOnDiskRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            return object;
        };

        /**
         * Converts this FileSyncIsOnDiskRequestBody to JSON.
         * @function toJSON
         * @memberof file.FileSyncIsOnDiskRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FileSyncIsOnDiskRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FileSyncIsOnDiskRequestBody
         * @function getTypeUrl
         * @memberof file.FileSyncIsOnDiskRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FileSyncIsOnDiskRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.FileSyncIsOnDiskRequestBody";
        };

        return FileSyncIsOnDiskRequestBody;
    })();

    file.FileSyncIsOnDiskReplyBody = (function() {

        /**
         * Properties of a FileSyncIsOnDiskReplyBody.
         * @memberof file
         * @interface IFileSyncIsOnDiskReplyBody
         * @property {string|null} [status] FileSyncIsOnDiskReplyBody status
         */

        /**
         * Constructs a new FileSyncIsOnDiskReplyBody.
         * @memberof file
         * @classdesc Represents a FileSyncIsOnDiskReplyBody.
         * @implements IFileSyncIsOnDiskReplyBody
         * @constructor
         * @param {file.IFileSyncIsOnDiskReplyBody=} [properties] Properties to set
         */
        function FileSyncIsOnDiskReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FileSyncIsOnDiskReplyBody status.
         * @member {string} status
         * @memberof file.FileSyncIsOnDiskReplyBody
         * @instance
         */
        FileSyncIsOnDiskReplyBody.prototype.status = "";

        /**
         * Creates a new FileSyncIsOnDiskReplyBody instance using the specified properties.
         * @function create
         * @memberof file.FileSyncIsOnDiskReplyBody
         * @static
         * @param {file.IFileSyncIsOnDiskReplyBody=} [properties] Properties to set
         * @returns {file.FileSyncIsOnDiskReplyBody} FileSyncIsOnDiskReplyBody instance
         */
        FileSyncIsOnDiskReplyBody.create = function create(properties) {
            return new FileSyncIsOnDiskReplyBody(properties);
        };

        /**
         * Encodes the specified FileSyncIsOnDiskReplyBody message. Does not implicitly {@link file.FileSyncIsOnDiskReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.FileSyncIsOnDiskReplyBody
         * @static
         * @param {file.IFileSyncIsOnDiskReplyBody} message FileSyncIsOnDiskReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncIsOnDiskReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.status != null && Object.hasOwnProperty.call(message, "status"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.status);
            return writer;
        };

        /**
         * Encodes the specified FileSyncIsOnDiskReplyBody message, length delimited. Does not implicitly {@link file.FileSyncIsOnDiskReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.FileSyncIsOnDiskReplyBody
         * @static
         * @param {file.IFileSyncIsOnDiskReplyBody} message FileSyncIsOnDiskReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncIsOnDiskReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FileSyncIsOnDiskReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.FileSyncIsOnDiskReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.FileSyncIsOnDiskReplyBody} FileSyncIsOnDiskReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncIsOnDiskReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.FileSyncIsOnDiskReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.status = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FileSyncIsOnDiskReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.FileSyncIsOnDiskReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.FileSyncIsOnDiskReplyBody} FileSyncIsOnDiskReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncIsOnDiskReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FileSyncIsOnDiskReplyBody message.
         * @function verify
         * @memberof file.FileSyncIsOnDiskReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FileSyncIsOnDiskReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.status != null && Object.hasOwnProperty.call(message, "status"))
                if (!$util.isString(message.status))
                    return "status: string expected";
            return null;
        };

        /**
         * Creates a FileSyncIsOnDiskReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.FileSyncIsOnDiskReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.FileSyncIsOnDiskReplyBody} FileSyncIsOnDiskReplyBody
         */
        FileSyncIsOnDiskReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.FileSyncIsOnDiskReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.FileSyncIsOnDiskReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.FileSyncIsOnDiskReplyBody();
            if (object.status != null)
                message.status = String(object.status);
            return message;
        };

        /**
         * Creates a plain object from a FileSyncIsOnDiskReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.FileSyncIsOnDiskReplyBody
         * @static
         * @param {file.FileSyncIsOnDiskReplyBody} message FileSyncIsOnDiskReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FileSyncIsOnDiskReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.status = "";
            if (message.status != null && Object.hasOwnProperty.call(message, "status"))
                object.status = message.status;
            return object;
        };

        /**
         * Converts this FileSyncIsOnDiskReplyBody to JSON.
         * @function toJSON
         * @memberof file.FileSyncIsOnDiskReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FileSyncIsOnDiskReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FileSyncIsOnDiskReplyBody
         * @function getTypeUrl
         * @memberof file.FileSyncIsOnDiskReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FileSyncIsOnDiskReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.FileSyncIsOnDiskReplyBody";
        };

        return FileSyncIsOnDiskReplyBody;
    })();

    file.FileSyncStartDownloadRequestBody = (function() {

        /**
         * Properties of a FileSyncStartDownloadRequestBody.
         * @memberof file
         * @interface IFileSyncStartDownloadRequestBody
         * @property {number|Long|null} [version] FileSyncStartDownloadRequestBody version
         */

        /**
         * Constructs a new FileSyncStartDownloadRequestBody.
         * @memberof file
         * @classdesc Represents a FileSyncStartDownloadRequestBody.
         * @implements IFileSyncStartDownloadRequestBody
         * @constructor
         * @param {file.IFileSyncStartDownloadRequestBody=} [properties] Properties to set
         */
        function FileSyncStartDownloadRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FileSyncStartDownloadRequestBody version.
         * @member {number|Long} version
         * @memberof file.FileSyncStartDownloadRequestBody
         * @instance
         */
        FileSyncStartDownloadRequestBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new FileSyncStartDownloadRequestBody instance using the specified properties.
         * @function create
         * @memberof file.FileSyncStartDownloadRequestBody
         * @static
         * @param {file.IFileSyncStartDownloadRequestBody=} [properties] Properties to set
         * @returns {file.FileSyncStartDownloadRequestBody} FileSyncStartDownloadRequestBody instance
         */
        FileSyncStartDownloadRequestBody.create = function create(properties) {
            return new FileSyncStartDownloadRequestBody(properties);
        };

        /**
         * Encodes the specified FileSyncStartDownloadRequestBody message. Does not implicitly {@link file.FileSyncStartDownloadRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.FileSyncStartDownloadRequestBody
         * @static
         * @param {file.IFileSyncStartDownloadRequestBody} message FileSyncStartDownloadRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncStartDownloadRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.version);
            return writer;
        };

        /**
         * Encodes the specified FileSyncStartDownloadRequestBody message, length delimited. Does not implicitly {@link file.FileSyncStartDownloadRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.FileSyncStartDownloadRequestBody
         * @static
         * @param {file.IFileSyncStartDownloadRequestBody} message FileSyncStartDownloadRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncStartDownloadRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FileSyncStartDownloadRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.FileSyncStartDownloadRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.FileSyncStartDownloadRequestBody} FileSyncStartDownloadRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncStartDownloadRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.FileSyncStartDownloadRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.version = reader.uint64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FileSyncStartDownloadRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.FileSyncStartDownloadRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.FileSyncStartDownloadRequestBody} FileSyncStartDownloadRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncStartDownloadRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FileSyncStartDownloadRequestBody message.
         * @function verify
         * @memberof file.FileSyncStartDownloadRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FileSyncStartDownloadRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            return null;
        };

        /**
         * Creates a FileSyncStartDownloadRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.FileSyncStartDownloadRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.FileSyncStartDownloadRequestBody} FileSyncStartDownloadRequestBody
         */
        FileSyncStartDownloadRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.FileSyncStartDownloadRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.FileSyncStartDownloadRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.FileSyncStartDownloadRequestBody();
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a FileSyncStartDownloadRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.FileSyncStartDownloadRequestBody
         * @static
         * @param {file.FileSyncStartDownloadRequestBody} message FileSyncStartDownloadRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FileSyncStartDownloadRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            return object;
        };

        /**
         * Converts this FileSyncStartDownloadRequestBody to JSON.
         * @function toJSON
         * @memberof file.FileSyncStartDownloadRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FileSyncStartDownloadRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FileSyncStartDownloadRequestBody
         * @function getTypeUrl
         * @memberof file.FileSyncStartDownloadRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FileSyncStartDownloadRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.FileSyncStartDownloadRequestBody";
        };

        return FileSyncStartDownloadRequestBody;
    })();

    file.FileSyncStartDownloadReplyBody = (function() {

        /**
         * Properties of a FileSyncStartDownloadReplyBody.
         * @memberof file
         * @interface IFileSyncStartDownloadReplyBody
         * @property {file.FileSyncStartDownloadReplyBody.IDownloadInfo|null} [startedDownload] FileSyncStartDownloadReplyBody startedDownload
         */

        /**
         * Constructs a new FileSyncStartDownloadReplyBody.
         * @memberof file
         * @classdesc Represents a FileSyncStartDownloadReplyBody.
         * @implements IFileSyncStartDownloadReplyBody
         * @constructor
         * @param {file.IFileSyncStartDownloadReplyBody=} [properties] Properties to set
         */
        function FileSyncStartDownloadReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FileSyncStartDownloadReplyBody startedDownload.
         * @member {file.FileSyncStartDownloadReplyBody.IDownloadInfo|null|undefined} startedDownload
         * @memberof file.FileSyncStartDownloadReplyBody
         * @instance
         */
        FileSyncStartDownloadReplyBody.prototype.startedDownload = null;

        /**
         * Creates a new FileSyncStartDownloadReplyBody instance using the specified properties.
         * @function create
         * @memberof file.FileSyncStartDownloadReplyBody
         * @static
         * @param {file.IFileSyncStartDownloadReplyBody=} [properties] Properties to set
         * @returns {file.FileSyncStartDownloadReplyBody} FileSyncStartDownloadReplyBody instance
         */
        FileSyncStartDownloadReplyBody.create = function create(properties) {
            return new FileSyncStartDownloadReplyBody(properties);
        };

        /**
         * Encodes the specified FileSyncStartDownloadReplyBody message. Does not implicitly {@link file.FileSyncStartDownloadReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.FileSyncStartDownloadReplyBody
         * @static
         * @param {file.IFileSyncStartDownloadReplyBody} message FileSyncStartDownloadReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncStartDownloadReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.startedDownload != null && Object.hasOwnProperty.call(message, "startedDownload"))
                $root.file.FileSyncStartDownloadReplyBody.DownloadInfo.encode(message.startedDownload, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified FileSyncStartDownloadReplyBody message, length delimited. Does not implicitly {@link file.FileSyncStartDownloadReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.FileSyncStartDownloadReplyBody
         * @static
         * @param {file.IFileSyncStartDownloadReplyBody} message FileSyncStartDownloadReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncStartDownloadReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FileSyncStartDownloadReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.FileSyncStartDownloadReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.FileSyncStartDownloadReplyBody} FileSyncStartDownloadReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncStartDownloadReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.FileSyncStartDownloadReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.startedDownload = $root.file.FileSyncStartDownloadReplyBody.DownloadInfo.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FileSyncStartDownloadReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.FileSyncStartDownloadReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.FileSyncStartDownloadReplyBody} FileSyncStartDownloadReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncStartDownloadReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FileSyncStartDownloadReplyBody message.
         * @function verify
         * @memberof file.FileSyncStartDownloadReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FileSyncStartDownloadReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.startedDownload != null && Object.hasOwnProperty.call(message, "startedDownload")) {
                var error = $root.file.FileSyncStartDownloadReplyBody.DownloadInfo.verify(message.startedDownload, long + 1);
                if (error)
                    return "startedDownload." + error;
            }
            return null;
        };

        /**
         * Creates a FileSyncStartDownloadReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.FileSyncStartDownloadReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.FileSyncStartDownloadReplyBody} FileSyncStartDownloadReplyBody
         */
        FileSyncStartDownloadReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.FileSyncStartDownloadReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.FileSyncStartDownloadReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.FileSyncStartDownloadReplyBody();
            if (object.startedDownload != null) {
                if (!$util.isObject(object.startedDownload))
                    throw TypeError(".file.FileSyncStartDownloadReplyBody.startedDownload: object expected");
                message.startedDownload = $root.file.FileSyncStartDownloadReplyBody.DownloadInfo.fromObject(object.startedDownload, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a FileSyncStartDownloadReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.FileSyncStartDownloadReplyBody
         * @static
         * @param {file.FileSyncStartDownloadReplyBody} message FileSyncStartDownloadReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FileSyncStartDownloadReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.startedDownload = null;
            if (message.startedDownload != null && Object.hasOwnProperty.call(message, "startedDownload"))
                object.startedDownload = $root.file.FileSyncStartDownloadReplyBody.DownloadInfo.toObject(message.startedDownload, options, q + 1);
            return object;
        };

        /**
         * Converts this FileSyncStartDownloadReplyBody to JSON.
         * @function toJSON
         * @memberof file.FileSyncStartDownloadReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FileSyncStartDownloadReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FileSyncStartDownloadReplyBody
         * @function getTypeUrl
         * @memberof file.FileSyncStartDownloadReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FileSyncStartDownloadReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.FileSyncStartDownloadReplyBody";
        };

        FileSyncStartDownloadReplyBody.DownloadInfo = (function() {

            /**
             * Properties of a DownloadInfo.
             * @memberof file.FileSyncStartDownloadReplyBody
             * @interface IDownloadInfo
             * @property {number|Long|null} [downloadTaskId] DownloadInfo downloadTaskId
             */

            /**
             * Constructs a new DownloadInfo.
             * @memberof file.FileSyncStartDownloadReplyBody
             * @classdesc Represents a DownloadInfo.
             * @implements IDownloadInfo
             * @constructor
             * @param {file.FileSyncStartDownloadReplyBody.IDownloadInfo=} [properties] Properties to set
             */
            function DownloadInfo(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                            this[keys[i]] = properties[keys[i]];
            }

            /**
             * DownloadInfo downloadTaskId.
             * @member {number|Long} downloadTaskId
             * @memberof file.FileSyncStartDownloadReplyBody.DownloadInfo
             * @instance
             */
            DownloadInfo.prototype.downloadTaskId = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

            /**
             * Creates a new DownloadInfo instance using the specified properties.
             * @function create
             * @memberof file.FileSyncStartDownloadReplyBody.DownloadInfo
             * @static
             * @param {file.FileSyncStartDownloadReplyBody.IDownloadInfo=} [properties] Properties to set
             * @returns {file.FileSyncStartDownloadReplyBody.DownloadInfo} DownloadInfo instance
             */
            DownloadInfo.create = function create(properties) {
                return new DownloadInfo(properties);
            };

            /**
             * Encodes the specified DownloadInfo message. Does not implicitly {@link file.FileSyncStartDownloadReplyBody.DownloadInfo.verify|verify} messages.
             * @function encode
             * @memberof file.FileSyncStartDownloadReplyBody.DownloadInfo
             * @static
             * @param {file.FileSyncStartDownloadReplyBody.IDownloadInfo} message DownloadInfo message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            DownloadInfo.encode = function encode(message, writer, q) {
                if (!writer)
                    writer = $Writer.create();
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                if (message.downloadTaskId != null && Object.hasOwnProperty.call(message, "downloadTaskId"))
                    writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.downloadTaskId);
                return writer;
            };

            /**
             * Encodes the specified DownloadInfo message, length delimited. Does not implicitly {@link file.FileSyncStartDownloadReplyBody.DownloadInfo.verify|verify} messages.
             * @function encodeDelimited
             * @memberof file.FileSyncStartDownloadReplyBody.DownloadInfo
             * @static
             * @param {file.FileSyncStartDownloadReplyBody.IDownloadInfo} message DownloadInfo message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            DownloadInfo.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
            };

            /**
             * Decodes a DownloadInfo message from the specified reader or buffer.
             * @function decode
             * @memberof file.FileSyncStartDownloadReplyBody.DownloadInfo
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {file.FileSyncStartDownloadReplyBody.DownloadInfo} DownloadInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            DownloadInfo.decode = function decode(reader, length, error, long) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                if (long === undefined)
                    long = 0;
                if (long > $Reader.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.FileSyncStartDownloadReplyBody.DownloadInfo();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    if (tag === error)
                        break;
                    switch (tag >>> 3) {
                    case 2: {
                            message.downloadTaskId = reader.uint64();
                            break;
                        }
                    default:
                        reader.skipType(tag & 7, long);
                        break;
                    }
                }
                return message;
            };

            /**
             * Decodes a DownloadInfo message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof file.FileSyncStartDownloadReplyBody.DownloadInfo
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {file.FileSyncStartDownloadReplyBody.DownloadInfo} DownloadInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            DownloadInfo.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };

            /**
             * Verifies a DownloadInfo message.
             * @function verify
             * @memberof file.FileSyncStartDownloadReplyBody.DownloadInfo
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            DownloadInfo.verify = function verify(message, long) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    return "maximum nesting depth exceeded";
                if (message.downloadTaskId != null && Object.hasOwnProperty.call(message, "downloadTaskId"))
                    if (!$util.isInteger(message.downloadTaskId) && !(message.downloadTaskId && $util.isInteger(message.downloadTaskId.low) && $util.isInteger(message.downloadTaskId.high)))
                        return "downloadTaskId: integer|Long expected";
                return null;
            };

            /**
             * Creates a DownloadInfo message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof file.FileSyncStartDownloadReplyBody.DownloadInfo
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {file.FileSyncStartDownloadReplyBody.DownloadInfo} DownloadInfo
             */
            DownloadInfo.fromObject = function fromObject(object, long) {
                if (object instanceof $root.file.FileSyncStartDownloadReplyBody.DownloadInfo)
                    return object;
                if (!$util.isObject(object))
                    throw TypeError(".file.FileSyncStartDownloadReplyBody.DownloadInfo: object expected");
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var message = new $root.file.FileSyncStartDownloadReplyBody.DownloadInfo();
                if (object.downloadTaskId != null)
                    if ($util.Long)
                        message.downloadTaskId = $util.Long.fromValue(object.downloadTaskId, true);
                    else if (typeof object.downloadTaskId === "string")
                        message.downloadTaskId = parseInt(object.downloadTaskId, 10);
                    else if (typeof object.downloadTaskId === "number")
                        message.downloadTaskId = object.downloadTaskId;
                    else if (typeof object.downloadTaskId === "object")
                        message.downloadTaskId = new $util.LongBits(object.downloadTaskId.low >>> 0, object.downloadTaskId.high >>> 0).toNumber(true);
                return message;
            };

            /**
             * Creates a plain object from a DownloadInfo message. Also converts values to other types if specified.
             * @function toObject
             * @memberof file.FileSyncStartDownloadReplyBody.DownloadInfo
             * @static
             * @param {file.FileSyncStartDownloadReplyBody.DownloadInfo} message DownloadInfo
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            DownloadInfo.toObject = function toObject(message, options, q) {
                if (!options)
                    options = {};
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                var object = {};
                if (options.defaults)
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.downloadTaskId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                    } else
                        object.downloadTaskId = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                if (message.downloadTaskId != null && Object.hasOwnProperty.call(message, "downloadTaskId"))
                    if (typeof BigInt !== "undefined" && options.longs === BigInt)
                        object.downloadTaskId = typeof message.downloadTaskId === "number" ? BigInt(message.downloadTaskId) : $util.Long.fromBits(message.downloadTaskId.low >>> 0, message.downloadTaskId.high >>> 0, true).toBigInt();
                    else if (typeof message.downloadTaskId === "number")
                        object.downloadTaskId = options.longs === String ? String(message.downloadTaskId) : message.downloadTaskId;
                    else
                        object.downloadTaskId = options.longs === String ? $util.Long.prototype.toString.call(message.downloadTaskId) : options.longs === Number ? new $util.LongBits(message.downloadTaskId.low >>> 0, message.downloadTaskId.high >>> 0).toNumber(true) : message.downloadTaskId;
                return object;
            };

            /**
             * Converts this DownloadInfo to JSON.
             * @function toJSON
             * @memberof file.FileSyncStartDownloadReplyBody.DownloadInfo
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            DownloadInfo.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };

            /**
             * Gets the default type url for DownloadInfo
             * @function getTypeUrl
             * @memberof file.FileSyncStartDownloadReplyBody.DownloadInfo
             * @static
             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns {string} The default type url
             */
            DownloadInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
                if (typeUrlPrefix === undefined) {
                    typeUrlPrefix = "type.googleapis.com";
                }
                return typeUrlPrefix + "/file.FileSyncStartDownloadReplyBody.DownloadInfo";
            };

            return DownloadInfo;
        })();

        return FileSyncStartDownloadReplyBody;
    })();

    file.AdoptRemoteRequestBody = (function() {

        /**
         * Properties of an AdoptRemoteRequestBody.
         * @memberof file
         * @interface IAdoptRemoteRequestBody
         * @property {file.IOptionsToAdopteRemote|null} [opts] AdoptRemoteRequestBody opts
         */

        /**
         * Constructs a new AdoptRemoteRequestBody.
         * @memberof file
         * @classdesc Represents an AdoptRemoteRequestBody.
         * @implements IAdoptRemoteRequestBody
         * @constructor
         * @param {file.IAdoptRemoteRequestBody=} [properties] Properties to set
         */
        function AdoptRemoteRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * AdoptRemoteRequestBody opts.
         * @member {file.IOptionsToAdopteRemote|null|undefined} opts
         * @memberof file.AdoptRemoteRequestBody
         * @instance
         */
        AdoptRemoteRequestBody.prototype.opts = null;

        /**
         * Creates a new AdoptRemoteRequestBody instance using the specified properties.
         * @function create
         * @memberof file.AdoptRemoteRequestBody
         * @static
         * @param {file.IAdoptRemoteRequestBody=} [properties] Properties to set
         * @returns {file.AdoptRemoteRequestBody} AdoptRemoteRequestBody instance
         */
        AdoptRemoteRequestBody.create = function create(properties) {
            return new AdoptRemoteRequestBody(properties);
        };

        /**
         * Encodes the specified AdoptRemoteRequestBody message. Does not implicitly {@link file.AdoptRemoteRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.AdoptRemoteRequestBody
         * @static
         * @param {file.IAdoptRemoteRequestBody} message AdoptRemoteRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AdoptRemoteRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                $root.file.OptionsToAdopteRemote.encode(message.opts, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified AdoptRemoteRequestBody message, length delimited. Does not implicitly {@link file.AdoptRemoteRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.AdoptRemoteRequestBody
         * @static
         * @param {file.IAdoptRemoteRequestBody} message AdoptRemoteRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AdoptRemoteRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an AdoptRemoteRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.AdoptRemoteRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.AdoptRemoteRequestBody} AdoptRemoteRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AdoptRemoteRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.AdoptRemoteRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.opts = $root.file.OptionsToAdopteRemote.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an AdoptRemoteRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.AdoptRemoteRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.AdoptRemoteRequestBody} AdoptRemoteRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AdoptRemoteRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an AdoptRemoteRequestBody message.
         * @function verify
         * @memberof file.AdoptRemoteRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        AdoptRemoteRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts")) {
                var error = $root.file.OptionsToAdopteRemote.verify(message.opts, long + 1);
                if (error)
                    return "opts." + error;
            }
            return null;
        };

        /**
         * Creates an AdoptRemoteRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.AdoptRemoteRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.AdoptRemoteRequestBody} AdoptRemoteRequestBody
         */
        AdoptRemoteRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.AdoptRemoteRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.AdoptRemoteRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.AdoptRemoteRequestBody();
            if (object.opts != null) {
                if (!$util.isObject(object.opts))
                    throw TypeError(".file.AdoptRemoteRequestBody.opts: object expected");
                message.opts = $root.file.OptionsToAdopteRemote.fromObject(object.opts, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an AdoptRemoteRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.AdoptRemoteRequestBody
         * @static
         * @param {file.AdoptRemoteRequestBody} message AdoptRemoteRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        AdoptRemoteRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.opts = null;
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                object.opts = $root.file.OptionsToAdopteRemote.toObject(message.opts, options, q + 1);
            return object;
        };

        /**
         * Converts this AdoptRemoteRequestBody to JSON.
         * @function toJSON
         * @memberof file.AdoptRemoteRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        AdoptRemoteRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for AdoptRemoteRequestBody
         * @function getTypeUrl
         * @memberof file.AdoptRemoteRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        AdoptRemoteRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.AdoptRemoteRequestBody";
        };

        return AdoptRemoteRequestBody;
    })();

    file.OptionsToAdopteRemote = (function() {

        /**
         * Properties of an OptionsToAdopteRemote.
         * @memberof file
         * @interface IOptionsToAdopteRemote
         * @property {common.IBooleanValue|null} [dropLocalVer] OptionsToAdopteRemote dropLocalVer
         * @property {common.IUInt64Value|null} [remoteVersion] OptionsToAdopteRemote remoteVersion
         */

        /**
         * Constructs a new OptionsToAdopteRemote.
         * @memberof file
         * @classdesc Represents an OptionsToAdopteRemote.
         * @implements IOptionsToAdopteRemote
         * @constructor
         * @param {file.IOptionsToAdopteRemote=} [properties] Properties to set
         */
        function OptionsToAdopteRemote(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * OptionsToAdopteRemote dropLocalVer.
         * @member {common.IBooleanValue|null|undefined} dropLocalVer
         * @memberof file.OptionsToAdopteRemote
         * @instance
         */
        OptionsToAdopteRemote.prototype.dropLocalVer = null;

        /**
         * OptionsToAdopteRemote remoteVersion.
         * @member {common.IUInt64Value|null|undefined} remoteVersion
         * @memberof file.OptionsToAdopteRemote
         * @instance
         */
        OptionsToAdopteRemote.prototype.remoteVersion = null;

        /**
         * Creates a new OptionsToAdopteRemote instance using the specified properties.
         * @function create
         * @memberof file.OptionsToAdopteRemote
         * @static
         * @param {file.IOptionsToAdopteRemote=} [properties] Properties to set
         * @returns {file.OptionsToAdopteRemote} OptionsToAdopteRemote instance
         */
        OptionsToAdopteRemote.create = function create(properties) {
            return new OptionsToAdopteRemote(properties);
        };

        /**
         * Encodes the specified OptionsToAdopteRemote message. Does not implicitly {@link file.OptionsToAdopteRemote.verify|verify} messages.
         * @function encode
         * @memberof file.OptionsToAdopteRemote
         * @static
         * @param {file.IOptionsToAdopteRemote} message OptionsToAdopteRemote message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OptionsToAdopteRemote.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.dropLocalVer != null && Object.hasOwnProperty.call(message, "dropLocalVer"))
                $root.common.BooleanValue.encode(message.dropLocalVer, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                $root.common.UInt64Value.encode(message.remoteVersion, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified OptionsToAdopteRemote message, length delimited. Does not implicitly {@link file.OptionsToAdopteRemote.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.OptionsToAdopteRemote
         * @static
         * @param {file.IOptionsToAdopteRemote} message OptionsToAdopteRemote message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OptionsToAdopteRemote.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an OptionsToAdopteRemote message from the specified reader or buffer.
         * @function decode
         * @memberof file.OptionsToAdopteRemote
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.OptionsToAdopteRemote} OptionsToAdopteRemote
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OptionsToAdopteRemote.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.OptionsToAdopteRemote();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.dropLocalVer = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.remoteVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an OptionsToAdopteRemote message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.OptionsToAdopteRemote
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.OptionsToAdopteRemote} OptionsToAdopteRemote
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OptionsToAdopteRemote.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an OptionsToAdopteRemote message.
         * @function verify
         * @memberof file.OptionsToAdopteRemote
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        OptionsToAdopteRemote.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.dropLocalVer != null && Object.hasOwnProperty.call(message, "dropLocalVer")) {
                var error = $root.common.BooleanValue.verify(message.dropLocalVer, long + 1);
                if (error)
                    return "dropLocalVer." + error;
            }
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion")) {
                var error = $root.common.UInt64Value.verify(message.remoteVersion, long + 1);
                if (error)
                    return "remoteVersion." + error;
            }
            return null;
        };

        /**
         * Creates an OptionsToAdopteRemote message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.OptionsToAdopteRemote
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.OptionsToAdopteRemote} OptionsToAdopteRemote
         */
        OptionsToAdopteRemote.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.OptionsToAdopteRemote)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.OptionsToAdopteRemote: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.OptionsToAdopteRemote();
            if (object.dropLocalVer != null) {
                if (!$util.isObject(object.dropLocalVer))
                    throw TypeError(".file.OptionsToAdopteRemote.dropLocalVer: object expected");
                message.dropLocalVer = $root.common.BooleanValue.fromObject(object.dropLocalVer, long + 1);
            }
            if (object.remoteVersion != null) {
                if (!$util.isObject(object.remoteVersion))
                    throw TypeError(".file.OptionsToAdopteRemote.remoteVersion: object expected");
                message.remoteVersion = $root.common.UInt64Value.fromObject(object.remoteVersion, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an OptionsToAdopteRemote message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.OptionsToAdopteRemote
         * @static
         * @param {file.OptionsToAdopteRemote} message OptionsToAdopteRemote
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        OptionsToAdopteRemote.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.dropLocalVer = null;
                object.remoteVersion = null;
            }
            if (message.dropLocalVer != null && Object.hasOwnProperty.call(message, "dropLocalVer"))
                object.dropLocalVer = $root.common.BooleanValue.toObject(message.dropLocalVer, options, q + 1);
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                object.remoteVersion = $root.common.UInt64Value.toObject(message.remoteVersion, options, q + 1);
            return object;
        };

        /**
         * Converts this OptionsToAdopteRemote to JSON.
         * @function toJSON
         * @memberof file.OptionsToAdopteRemote
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        OptionsToAdopteRemote.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for OptionsToAdopteRemote
         * @function getTypeUrl
         * @memberof file.OptionsToAdopteRemote
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        OptionsToAdopteRemote.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.OptionsToAdopteRemote";
        };

        return OptionsToAdopteRemote;
    })();

    file.DiffCurrentAndRemoteRequestBody = (function() {

        /**
         * Properties of a DiffCurrentAndRemoteRequestBody.
         * @memberof file
         * @interface IDiffCurrentAndRemoteRequestBody
         * @property {file.IOptionsToDiffFileVersions|null} [opts] DiffCurrentAndRemoteRequestBody opts
         */

        /**
         * Constructs a new DiffCurrentAndRemoteRequestBody.
         * @memberof file
         * @classdesc Represents a DiffCurrentAndRemoteRequestBody.
         * @implements IDiffCurrentAndRemoteRequestBody
         * @constructor
         * @param {file.IDiffCurrentAndRemoteRequestBody=} [properties] Properties to set
         */
        function DiffCurrentAndRemoteRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DiffCurrentAndRemoteRequestBody opts.
         * @member {file.IOptionsToDiffFileVersions|null|undefined} opts
         * @memberof file.DiffCurrentAndRemoteRequestBody
         * @instance
         */
        DiffCurrentAndRemoteRequestBody.prototype.opts = null;

        /**
         * Creates a new DiffCurrentAndRemoteRequestBody instance using the specified properties.
         * @function create
         * @memberof file.DiffCurrentAndRemoteRequestBody
         * @static
         * @param {file.IDiffCurrentAndRemoteRequestBody=} [properties] Properties to set
         * @returns {file.DiffCurrentAndRemoteRequestBody} DiffCurrentAndRemoteRequestBody instance
         */
        DiffCurrentAndRemoteRequestBody.create = function create(properties) {
            return new DiffCurrentAndRemoteRequestBody(properties);
        };

        /**
         * Encodes the specified DiffCurrentAndRemoteRequestBody message. Does not implicitly {@link file.DiffCurrentAndRemoteRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.DiffCurrentAndRemoteRequestBody
         * @static
         * @param {file.IDiffCurrentAndRemoteRequestBody} message DiffCurrentAndRemoteRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DiffCurrentAndRemoteRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                $root.file.OptionsToDiffFileVersions.encode(message.opts, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DiffCurrentAndRemoteRequestBody message, length delimited. Does not implicitly {@link file.DiffCurrentAndRemoteRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.DiffCurrentAndRemoteRequestBody
         * @static
         * @param {file.IDiffCurrentAndRemoteRequestBody} message DiffCurrentAndRemoteRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DiffCurrentAndRemoteRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a DiffCurrentAndRemoteRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.DiffCurrentAndRemoteRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.DiffCurrentAndRemoteRequestBody} DiffCurrentAndRemoteRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DiffCurrentAndRemoteRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.DiffCurrentAndRemoteRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.opts = $root.file.OptionsToDiffFileVersions.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DiffCurrentAndRemoteRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.DiffCurrentAndRemoteRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.DiffCurrentAndRemoteRequestBody} DiffCurrentAndRemoteRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DiffCurrentAndRemoteRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DiffCurrentAndRemoteRequestBody message.
         * @function verify
         * @memberof file.DiffCurrentAndRemoteRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DiffCurrentAndRemoteRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts")) {
                var error = $root.file.OptionsToDiffFileVersions.verify(message.opts, long + 1);
                if (error)
                    return "opts." + error;
            }
            return null;
        };

        /**
         * Creates a DiffCurrentAndRemoteRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.DiffCurrentAndRemoteRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.DiffCurrentAndRemoteRequestBody} DiffCurrentAndRemoteRequestBody
         */
        DiffCurrentAndRemoteRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.DiffCurrentAndRemoteRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.DiffCurrentAndRemoteRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.DiffCurrentAndRemoteRequestBody();
            if (object.opts != null) {
                if (!$util.isObject(object.opts))
                    throw TypeError(".file.DiffCurrentAndRemoteRequestBody.opts: object expected");
                message.opts = $root.file.OptionsToDiffFileVersions.fromObject(object.opts, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a DiffCurrentAndRemoteRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.DiffCurrentAndRemoteRequestBody
         * @static
         * @param {file.DiffCurrentAndRemoteRequestBody} message DiffCurrentAndRemoteRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DiffCurrentAndRemoteRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.opts = null;
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                object.opts = $root.file.OptionsToDiffFileVersions.toObject(message.opts, options, q + 1);
            return object;
        };

        /**
         * Converts this DiffCurrentAndRemoteRequestBody to JSON.
         * @function toJSON
         * @memberof file.DiffCurrentAndRemoteRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DiffCurrentAndRemoteRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DiffCurrentAndRemoteRequestBody
         * @function getTypeUrl
         * @memberof file.DiffCurrentAndRemoteRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DiffCurrentAndRemoteRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.DiffCurrentAndRemoteRequestBody";
        };

        return DiffCurrentAndRemoteRequestBody;
    })();

    file.DiffCurrentAndRemoteReplyBody = (function() {

        /**
         * Properties of a DiffCurrentAndRemoteReplyBody.
         * @memberof file
         * @interface IDiffCurrentAndRemoteReplyBody
         * @property {file.IFileDiff|null} [diff] DiffCurrentAndRemoteReplyBody diff
         */

        /**
         * Constructs a new DiffCurrentAndRemoteReplyBody.
         * @memberof file
         * @classdesc Represents a DiffCurrentAndRemoteReplyBody.
         * @implements IDiffCurrentAndRemoteReplyBody
         * @constructor
         * @param {file.IDiffCurrentAndRemoteReplyBody=} [properties] Properties to set
         */
        function DiffCurrentAndRemoteReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DiffCurrentAndRemoteReplyBody diff.
         * @member {file.IFileDiff|null|undefined} diff
         * @memberof file.DiffCurrentAndRemoteReplyBody
         * @instance
         */
        DiffCurrentAndRemoteReplyBody.prototype.diff = null;

        /**
         * Creates a new DiffCurrentAndRemoteReplyBody instance using the specified properties.
         * @function create
         * @memberof file.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {file.IDiffCurrentAndRemoteReplyBody=} [properties] Properties to set
         * @returns {file.DiffCurrentAndRemoteReplyBody} DiffCurrentAndRemoteReplyBody instance
         */
        DiffCurrentAndRemoteReplyBody.create = function create(properties) {
            return new DiffCurrentAndRemoteReplyBody(properties);
        };

        /**
         * Encodes the specified DiffCurrentAndRemoteReplyBody message. Does not implicitly {@link file.DiffCurrentAndRemoteReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {file.IDiffCurrentAndRemoteReplyBody} message DiffCurrentAndRemoteReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DiffCurrentAndRemoteReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.diff != null && Object.hasOwnProperty.call(message, "diff"))
                $root.file.FileDiff.encode(message.diff, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DiffCurrentAndRemoteReplyBody message, length delimited. Does not implicitly {@link file.DiffCurrentAndRemoteReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {file.IDiffCurrentAndRemoteReplyBody} message DiffCurrentAndRemoteReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DiffCurrentAndRemoteReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a DiffCurrentAndRemoteReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.DiffCurrentAndRemoteReplyBody} DiffCurrentAndRemoteReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DiffCurrentAndRemoteReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.DiffCurrentAndRemoteReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.diff = $root.file.FileDiff.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DiffCurrentAndRemoteReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.DiffCurrentAndRemoteReplyBody} DiffCurrentAndRemoteReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DiffCurrentAndRemoteReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DiffCurrentAndRemoteReplyBody message.
         * @function verify
         * @memberof file.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DiffCurrentAndRemoteReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.diff != null && Object.hasOwnProperty.call(message, "diff")) {
                var error = $root.file.FileDiff.verify(message.diff, long + 1);
                if (error)
                    return "diff." + error;
            }
            return null;
        };

        /**
         * Creates a DiffCurrentAndRemoteReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.DiffCurrentAndRemoteReplyBody} DiffCurrentAndRemoteReplyBody
         */
        DiffCurrentAndRemoteReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.DiffCurrentAndRemoteReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.DiffCurrentAndRemoteReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.DiffCurrentAndRemoteReplyBody();
            if (object.diff != null) {
                if (!$util.isObject(object.diff))
                    throw TypeError(".file.DiffCurrentAndRemoteReplyBody.diff: object expected");
                message.diff = $root.file.FileDiff.fromObject(object.diff, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a DiffCurrentAndRemoteReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {file.DiffCurrentAndRemoteReplyBody} message DiffCurrentAndRemoteReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DiffCurrentAndRemoteReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.diff = null;
            if (message.diff != null && Object.hasOwnProperty.call(message, "diff"))
                object.diff = $root.file.FileDiff.toObject(message.diff, options, q + 1);
            return object;
        };

        /**
         * Converts this DiffCurrentAndRemoteReplyBody to JSON.
         * @function toJSON
         * @memberof file.DiffCurrentAndRemoteReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DiffCurrentAndRemoteReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DiffCurrentAndRemoteReplyBody
         * @function getTypeUrl
         * @memberof file.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DiffCurrentAndRemoteReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.DiffCurrentAndRemoteReplyBody";
        };

        return DiffCurrentAndRemoteReplyBody;
    })();

    file.OptionsToDiffFileVersions = (function() {

        /**
         * Properties of an OptionsToDiffFileVersions.
         * @memberof file
         * @interface IOptionsToDiffFileVersions
         * @property {common.IUInt64Value|null} [remoteVersion] OptionsToDiffFileVersions remoteVersion
         * @property {common.IBooleanValue|null} [compareContentIfSameMTime] OptionsToDiffFileVersions compareContentIfSameMTime
         */

        /**
         * Constructs a new OptionsToDiffFileVersions.
         * @memberof file
         * @classdesc Represents an OptionsToDiffFileVersions.
         * @implements IOptionsToDiffFileVersions
         * @constructor
         * @param {file.IOptionsToDiffFileVersions=} [properties] Properties to set
         */
        function OptionsToDiffFileVersions(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * OptionsToDiffFileVersions remoteVersion.
         * @member {common.IUInt64Value|null|undefined} remoteVersion
         * @memberof file.OptionsToDiffFileVersions
         * @instance
         */
        OptionsToDiffFileVersions.prototype.remoteVersion = null;

        /**
         * OptionsToDiffFileVersions compareContentIfSameMTime.
         * @member {common.IBooleanValue|null|undefined} compareContentIfSameMTime
         * @memberof file.OptionsToDiffFileVersions
         * @instance
         */
        OptionsToDiffFileVersions.prototype.compareContentIfSameMTime = null;

        /**
         * Creates a new OptionsToDiffFileVersions instance using the specified properties.
         * @function create
         * @memberof file.OptionsToDiffFileVersions
         * @static
         * @param {file.IOptionsToDiffFileVersions=} [properties] Properties to set
         * @returns {file.OptionsToDiffFileVersions} OptionsToDiffFileVersions instance
         */
        OptionsToDiffFileVersions.create = function create(properties) {
            return new OptionsToDiffFileVersions(properties);
        };

        /**
         * Encodes the specified OptionsToDiffFileVersions message. Does not implicitly {@link file.OptionsToDiffFileVersions.verify|verify} messages.
         * @function encode
         * @memberof file.OptionsToDiffFileVersions
         * @static
         * @param {file.IOptionsToDiffFileVersions} message OptionsToDiffFileVersions message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OptionsToDiffFileVersions.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                $root.common.UInt64Value.encode(message.remoteVersion, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.compareContentIfSameMTime != null && Object.hasOwnProperty.call(message, "compareContentIfSameMTime"))
                $root.common.BooleanValue.encode(message.compareContentIfSameMTime, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified OptionsToDiffFileVersions message, length delimited. Does not implicitly {@link file.OptionsToDiffFileVersions.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.OptionsToDiffFileVersions
         * @static
         * @param {file.IOptionsToDiffFileVersions} message OptionsToDiffFileVersions message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OptionsToDiffFileVersions.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an OptionsToDiffFileVersions message from the specified reader or buffer.
         * @function decode
         * @memberof file.OptionsToDiffFileVersions
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.OptionsToDiffFileVersions} OptionsToDiffFileVersions
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OptionsToDiffFileVersions.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.OptionsToDiffFileVersions();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.remoteVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.compareContentIfSameMTime = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an OptionsToDiffFileVersions message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.OptionsToDiffFileVersions
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.OptionsToDiffFileVersions} OptionsToDiffFileVersions
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OptionsToDiffFileVersions.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an OptionsToDiffFileVersions message.
         * @function verify
         * @memberof file.OptionsToDiffFileVersions
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        OptionsToDiffFileVersions.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion")) {
                var error = $root.common.UInt64Value.verify(message.remoteVersion, long + 1);
                if (error)
                    return "remoteVersion." + error;
            }
            if (message.compareContentIfSameMTime != null && Object.hasOwnProperty.call(message, "compareContentIfSameMTime")) {
                var error = $root.common.BooleanValue.verify(message.compareContentIfSameMTime, long + 1);
                if (error)
                    return "compareContentIfSameMTime." + error;
            }
            return null;
        };

        /**
         * Creates an OptionsToDiffFileVersions message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.OptionsToDiffFileVersions
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.OptionsToDiffFileVersions} OptionsToDiffFileVersions
         */
        OptionsToDiffFileVersions.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.OptionsToDiffFileVersions)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.OptionsToDiffFileVersions: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.OptionsToDiffFileVersions();
            if (object.remoteVersion != null) {
                if (!$util.isObject(object.remoteVersion))
                    throw TypeError(".file.OptionsToDiffFileVersions.remoteVersion: object expected");
                message.remoteVersion = $root.common.UInt64Value.fromObject(object.remoteVersion, long + 1);
            }
            if (object.compareContentIfSameMTime != null) {
                if (!$util.isObject(object.compareContentIfSameMTime))
                    throw TypeError(".file.OptionsToDiffFileVersions.compareContentIfSameMTime: object expected");
                message.compareContentIfSameMTime = $root.common.BooleanValue.fromObject(object.compareContentIfSameMTime, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an OptionsToDiffFileVersions message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.OptionsToDiffFileVersions
         * @static
         * @param {file.OptionsToDiffFileVersions} message OptionsToDiffFileVersions
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        OptionsToDiffFileVersions.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.remoteVersion = null;
                object.compareContentIfSameMTime = null;
            }
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                object.remoteVersion = $root.common.UInt64Value.toObject(message.remoteVersion, options, q + 1);
            if (message.compareContentIfSameMTime != null && Object.hasOwnProperty.call(message, "compareContentIfSameMTime"))
                object.compareContentIfSameMTime = $root.common.BooleanValue.toObject(message.compareContentIfSameMTime, options, q + 1);
            return object;
        };

        /**
         * Converts this OptionsToDiffFileVersions to JSON.
         * @function toJSON
         * @memberof file.OptionsToDiffFileVersions
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        OptionsToDiffFileVersions.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for OptionsToDiffFileVersions
         * @function getTypeUrl
         * @memberof file.OptionsToDiffFileVersions
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        OptionsToDiffFileVersions.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.OptionsToDiffFileVersions";
        };

        return OptionsToDiffFileVersions;
    })();

    file.TimeStampsDiff = (function() {

        /**
         * Properties of a TimeStampsDiff.
         * @memberof file
         * @interface ITimeStampsDiff
         * @property {number|Long|null} [current] TimeStampsDiff current
         * @property {number|Long|null} [remote] TimeStampsDiff remote
         * @property {number|Long|null} [synced] TimeStampsDiff synced
         */

        /**
         * Constructs a new TimeStampsDiff.
         * @memberof file
         * @classdesc Represents a TimeStampsDiff.
         * @implements ITimeStampsDiff
         * @constructor
         * @param {file.ITimeStampsDiff=} [properties] Properties to set
         */
        function TimeStampsDiff(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * TimeStampsDiff current.
         * @member {number|Long} current
         * @memberof file.TimeStampsDiff
         * @instance
         */
        TimeStampsDiff.prototype.current = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * TimeStampsDiff remote.
         * @member {number|Long} remote
         * @memberof file.TimeStampsDiff
         * @instance
         */
        TimeStampsDiff.prototype.remote = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * TimeStampsDiff synced.
         * @member {number|Long} synced
         * @memberof file.TimeStampsDiff
         * @instance
         */
        TimeStampsDiff.prototype.synced = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new TimeStampsDiff instance using the specified properties.
         * @function create
         * @memberof file.TimeStampsDiff
         * @static
         * @param {file.ITimeStampsDiff=} [properties] Properties to set
         * @returns {file.TimeStampsDiff} TimeStampsDiff instance
         */
        TimeStampsDiff.create = function create(properties) {
            return new TimeStampsDiff(properties);
        };

        /**
         * Encodes the specified TimeStampsDiff message. Does not implicitly {@link file.TimeStampsDiff.verify|verify} messages.
         * @function encode
         * @memberof file.TimeStampsDiff
         * @static
         * @param {file.ITimeStampsDiff} message TimeStampsDiff message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        TimeStampsDiff.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.current != null && Object.hasOwnProperty.call(message, "current"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.current);
            if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.remote);
            if (message.synced != null && Object.hasOwnProperty.call(message, "synced"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint64(message.synced);
            return writer;
        };

        /**
         * Encodes the specified TimeStampsDiff message, length delimited. Does not implicitly {@link file.TimeStampsDiff.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.TimeStampsDiff
         * @static
         * @param {file.ITimeStampsDiff} message TimeStampsDiff message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        TimeStampsDiff.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a TimeStampsDiff message from the specified reader or buffer.
         * @function decode
         * @memberof file.TimeStampsDiff
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.TimeStampsDiff} TimeStampsDiff
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        TimeStampsDiff.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.TimeStampsDiff();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.current = reader.uint64();
                        break;
                    }
                case 2: {
                        message.remote = reader.uint64();
                        break;
                    }
                case 3: {
                        message.synced = reader.uint64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a TimeStampsDiff message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.TimeStampsDiff
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.TimeStampsDiff} TimeStampsDiff
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        TimeStampsDiff.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a TimeStampsDiff message.
         * @function verify
         * @memberof file.TimeStampsDiff
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        TimeStampsDiff.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.current != null && Object.hasOwnProperty.call(message, "current"))
                if (!$util.isInteger(message.current) && !(message.current && $util.isInteger(message.current.low) && $util.isInteger(message.current.high)))
                    return "current: integer|Long expected";
            if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                if (!$util.isInteger(message.remote) && !(message.remote && $util.isInteger(message.remote.low) && $util.isInteger(message.remote.high)))
                    return "remote: integer|Long expected";
            if (message.synced != null && Object.hasOwnProperty.call(message, "synced"))
                if (!$util.isInteger(message.synced) && !(message.synced && $util.isInteger(message.synced.low) && $util.isInteger(message.synced.high)))
                    return "synced: integer|Long expected";
            return null;
        };

        /**
         * Creates a TimeStampsDiff message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.TimeStampsDiff
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.TimeStampsDiff} TimeStampsDiff
         */
        TimeStampsDiff.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.TimeStampsDiff)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.TimeStampsDiff: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.TimeStampsDiff();
            if (object.current != null)
                if ($util.Long)
                    message.current = $util.Long.fromValue(object.current, true);
                else if (typeof object.current === "string")
                    message.current = parseInt(object.current, 10);
                else if (typeof object.current === "number")
                    message.current = object.current;
                else if (typeof object.current === "object")
                    message.current = new $util.LongBits(object.current.low >>> 0, object.current.high >>> 0).toNumber(true);
            if (object.remote != null)
                if ($util.Long)
                    message.remote = $util.Long.fromValue(object.remote, true);
                else if (typeof object.remote === "string")
                    message.remote = parseInt(object.remote, 10);
                else if (typeof object.remote === "number")
                    message.remote = object.remote;
                else if (typeof object.remote === "object")
                    message.remote = new $util.LongBits(object.remote.low >>> 0, object.remote.high >>> 0).toNumber(true);
            if (object.synced != null)
                if ($util.Long)
                    message.synced = $util.Long.fromValue(object.synced, true);
                else if (typeof object.synced === "string")
                    message.synced = parseInt(object.synced, 10);
                else if (typeof object.synced === "number")
                    message.synced = object.synced;
                else if (typeof object.synced === "object")
                    message.synced = new $util.LongBits(object.synced.low >>> 0, object.synced.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a TimeStampsDiff message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.TimeStampsDiff
         * @static
         * @param {file.TimeStampsDiff} message TimeStampsDiff
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        TimeStampsDiff.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.current = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.current = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.remote = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.remote = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.synced = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.synced = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
            }
            if (message.current != null && Object.hasOwnProperty.call(message, "current"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.current = typeof message.current === "number" ? BigInt(message.current) : $util.Long.fromBits(message.current.low >>> 0, message.current.high >>> 0, true).toBigInt();
                else if (typeof message.current === "number")
                    object.current = options.longs === String ? String(message.current) : message.current;
                else
                    object.current = options.longs === String ? $util.Long.prototype.toString.call(message.current) : options.longs === Number ? new $util.LongBits(message.current.low >>> 0, message.current.high >>> 0).toNumber(true) : message.current;
            if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.remote = typeof message.remote === "number" ? BigInt(message.remote) : $util.Long.fromBits(message.remote.low >>> 0, message.remote.high >>> 0, true).toBigInt();
                else if (typeof message.remote === "number")
                    object.remote = options.longs === String ? String(message.remote) : message.remote;
                else
                    object.remote = options.longs === String ? $util.Long.prototype.toString.call(message.remote) : options.longs === Number ? new $util.LongBits(message.remote.low >>> 0, message.remote.high >>> 0).toNumber(true) : message.remote;
            if (message.synced != null && Object.hasOwnProperty.call(message, "synced"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.synced = typeof message.synced === "number" ? BigInt(message.synced) : $util.Long.fromBits(message.synced.low >>> 0, message.synced.high >>> 0, true).toBigInt();
                else if (typeof message.synced === "number")
                    object.synced = options.longs === String ? String(message.synced) : message.synced;
                else
                    object.synced = options.longs === String ? $util.Long.prototype.toString.call(message.synced) : options.longs === Number ? new $util.LongBits(message.synced.low >>> 0, message.synced.high >>> 0).toNumber(true) : message.synced;
            return object;
        };

        /**
         * Converts this TimeStampsDiff to JSON.
         * @function toJSON
         * @memberof file.TimeStampsDiff
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        TimeStampsDiff.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for TimeStampsDiff
         * @function getTypeUrl
         * @memberof file.TimeStampsDiff
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        TimeStampsDiff.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.TimeStampsDiff";
        };

        return TimeStampsDiff;
    })();

    file.XAttrDiff = (function() {

        /**
         * Properties of a XAttrDiff.
         * @memberof file
         * @interface IXAttrDiff
         * @property {string|null} [name] XAttrDiff name
         * @property {common.IStringValue|null} [addedIn] XAttrDiff addedIn
         * @property {common.IStringValue|null} [removedIn] XAttrDiff removedIn
         * @property {common.IStringValue|null} [changedIn] XAttrDiff changedIn
         */

        /**
         * Constructs a new XAttrDiff.
         * @memberof file
         * @classdesc Represents a XAttrDiff.
         * @implements IXAttrDiff
         * @constructor
         * @param {file.IXAttrDiff=} [properties] Properties to set
         */
        function XAttrDiff(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * XAttrDiff name.
         * @member {string} name
         * @memberof file.XAttrDiff
         * @instance
         */
        XAttrDiff.prototype.name = "";

        /**
         * XAttrDiff addedIn.
         * @member {common.IStringValue|null|undefined} addedIn
         * @memberof file.XAttrDiff
         * @instance
         */
        XAttrDiff.prototype.addedIn = null;

        /**
         * XAttrDiff removedIn.
         * @member {common.IStringValue|null|undefined} removedIn
         * @memberof file.XAttrDiff
         * @instance
         */
        XAttrDiff.prototype.removedIn = null;

        /**
         * XAttrDiff changedIn.
         * @member {common.IStringValue|null|undefined} changedIn
         * @memberof file.XAttrDiff
         * @instance
         */
        XAttrDiff.prototype.changedIn = null;

        /**
         * Creates a new XAttrDiff instance using the specified properties.
         * @function create
         * @memberof file.XAttrDiff
         * @static
         * @param {file.IXAttrDiff=} [properties] Properties to set
         * @returns {file.XAttrDiff} XAttrDiff instance
         */
        XAttrDiff.create = function create(properties) {
            return new XAttrDiff(properties);
        };

        /**
         * Encodes the specified XAttrDiff message. Does not implicitly {@link file.XAttrDiff.verify|verify} messages.
         * @function encode
         * @memberof file.XAttrDiff
         * @static
         * @param {file.IXAttrDiff} message XAttrDiff message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        XAttrDiff.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
            if (message.addedIn != null && Object.hasOwnProperty.call(message, "addedIn"))
                $root.common.StringValue.encode(message.addedIn, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.removedIn != null && Object.hasOwnProperty.call(message, "removedIn"))
                $root.common.StringValue.encode(message.removedIn, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.changedIn != null && Object.hasOwnProperty.call(message, "changedIn"))
                $root.common.StringValue.encode(message.changedIn, writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified XAttrDiff message, length delimited. Does not implicitly {@link file.XAttrDiff.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.XAttrDiff
         * @static
         * @param {file.IXAttrDiff} message XAttrDiff message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        XAttrDiff.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a XAttrDiff message from the specified reader or buffer.
         * @function decode
         * @memberof file.XAttrDiff
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.XAttrDiff} XAttrDiff
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        XAttrDiff.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.XAttrDiff();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.name = reader.string();
                        break;
                    }
                case 2: {
                        message.addedIn = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.removedIn = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 4: {
                        message.changedIn = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a XAttrDiff message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.XAttrDiff
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.XAttrDiff} XAttrDiff
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        XAttrDiff.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a XAttrDiff message.
         * @function verify
         * @memberof file.XAttrDiff
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        XAttrDiff.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                if (!$util.isString(message.name))
                    return "name: string expected";
            if (message.addedIn != null && Object.hasOwnProperty.call(message, "addedIn")) {
                var error = $root.common.StringValue.verify(message.addedIn, long + 1);
                if (error)
                    return "addedIn." + error;
            }
            if (message.removedIn != null && Object.hasOwnProperty.call(message, "removedIn")) {
                var error = $root.common.StringValue.verify(message.removedIn, long + 1);
                if (error)
                    return "removedIn." + error;
            }
            if (message.changedIn != null && Object.hasOwnProperty.call(message, "changedIn")) {
                var error = $root.common.StringValue.verify(message.changedIn, long + 1);
                if (error)
                    return "changedIn." + error;
            }
            return null;
        };

        /**
         * Creates a XAttrDiff message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.XAttrDiff
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.XAttrDiff} XAttrDiff
         */
        XAttrDiff.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.XAttrDiff)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.XAttrDiff: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.XAttrDiff();
            if (object.name != null)
                message.name = String(object.name);
            if (object.addedIn != null) {
                if (!$util.isObject(object.addedIn))
                    throw TypeError(".file.XAttrDiff.addedIn: object expected");
                message.addedIn = $root.common.StringValue.fromObject(object.addedIn, long + 1);
            }
            if (object.removedIn != null) {
                if (!$util.isObject(object.removedIn))
                    throw TypeError(".file.XAttrDiff.removedIn: object expected");
                message.removedIn = $root.common.StringValue.fromObject(object.removedIn, long + 1);
            }
            if (object.changedIn != null) {
                if (!$util.isObject(object.changedIn))
                    throw TypeError(".file.XAttrDiff.changedIn: object expected");
                message.changedIn = $root.common.StringValue.fromObject(object.changedIn, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a XAttrDiff message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.XAttrDiff
         * @static
         * @param {file.XAttrDiff} message XAttrDiff
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        XAttrDiff.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.name = "";
                object.addedIn = null;
                object.removedIn = null;
                object.changedIn = null;
            }
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                object.name = message.name;
            if (message.addedIn != null && Object.hasOwnProperty.call(message, "addedIn"))
                object.addedIn = $root.common.StringValue.toObject(message.addedIn, options, q + 1);
            if (message.removedIn != null && Object.hasOwnProperty.call(message, "removedIn"))
                object.removedIn = $root.common.StringValue.toObject(message.removedIn, options, q + 1);
            if (message.changedIn != null && Object.hasOwnProperty.call(message, "changedIn"))
                object.changedIn = $root.common.StringValue.toObject(message.changedIn, options, q + 1);
            return object;
        };

        /**
         * Converts this XAttrDiff to JSON.
         * @function toJSON
         * @memberof file.XAttrDiff
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        XAttrDiff.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for XAttrDiff
         * @function getTypeUrl
         * @memberof file.XAttrDiff
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        XAttrDiff.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.XAttrDiff";
        };

        return XAttrDiff;
    })();

    file.FileDiff = (function() {

        /**
         * Properties of a FileDiff.
         * @memberof file
         * @interface IFileDiff
         * @property {number|Long|null} [currentVersion] FileDiff currentVersion
         * @property {boolean|null} [isCurrentLocal] FileDiff isCurrentLocal
         * @property {common.IUInt64Value|null} [remoteVersion] FileDiff remoteVersion
         * @property {common.IUInt64Value|null} [syncedVersion] FileDiff syncedVersion
         * @property {boolean|null} [isRemoteRemoved] FileDiff isRemoteRemoved
         * @property {file.ITimeStampsDiff|null} [ctime] FileDiff ctime
         * @property {file.ITimeStampsDiff|null} [mtime] FileDiff mtime
         * @property {Array.<file.IXAttrDiff>|null} [xattrs] FileDiff xattrs
         * @property {boolean|null} [areContentsSame] FileDiff areContentsSame
         * @property {file.FileDiff.ISize|null} [size] FileDiff size
         */

        /**
         * Constructs a new FileDiff.
         * @memberof file
         * @classdesc Represents a FileDiff.
         * @implements IFileDiff
         * @constructor
         * @param {file.IFileDiff=} [properties] Properties to set
         */
        function FileDiff(properties) {
            this.xattrs = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FileDiff currentVersion.
         * @member {number|Long} currentVersion
         * @memberof file.FileDiff
         * @instance
         */
        FileDiff.prototype.currentVersion = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * FileDiff isCurrentLocal.
         * @member {boolean} isCurrentLocal
         * @memberof file.FileDiff
         * @instance
         */
        FileDiff.prototype.isCurrentLocal = false;

        /**
         * FileDiff remoteVersion.
         * @member {common.IUInt64Value|null|undefined} remoteVersion
         * @memberof file.FileDiff
         * @instance
         */
        FileDiff.prototype.remoteVersion = null;

        /**
         * FileDiff syncedVersion.
         * @member {common.IUInt64Value|null|undefined} syncedVersion
         * @memberof file.FileDiff
         * @instance
         */
        FileDiff.prototype.syncedVersion = null;

        /**
         * FileDiff isRemoteRemoved.
         * @member {boolean} isRemoteRemoved
         * @memberof file.FileDiff
         * @instance
         */
        FileDiff.prototype.isRemoteRemoved = false;

        /**
         * FileDiff ctime.
         * @member {file.ITimeStampsDiff|null|undefined} ctime
         * @memberof file.FileDiff
         * @instance
         */
        FileDiff.prototype.ctime = null;

        /**
         * FileDiff mtime.
         * @member {file.ITimeStampsDiff|null|undefined} mtime
         * @memberof file.FileDiff
         * @instance
         */
        FileDiff.prototype.mtime = null;

        /**
         * FileDiff xattrs.
         * @member {Array.<file.IXAttrDiff>} xattrs
         * @memberof file.FileDiff
         * @instance
         */
        FileDiff.prototype.xattrs = $util.emptyArray;

        /**
         * FileDiff areContentsSame.
         * @member {boolean} areContentsSame
         * @memberof file.FileDiff
         * @instance
         */
        FileDiff.prototype.areContentsSame = false;

        /**
         * FileDiff size.
         * @member {file.FileDiff.ISize|null|undefined} size
         * @memberof file.FileDiff
         * @instance
         */
        FileDiff.prototype.size = null;

        /**
         * Creates a new FileDiff instance using the specified properties.
         * @function create
         * @memberof file.FileDiff
         * @static
         * @param {file.IFileDiff=} [properties] Properties to set
         * @returns {file.FileDiff} FileDiff instance
         */
        FileDiff.create = function create(properties) {
            return new FileDiff(properties);
        };

        /**
         * Encodes the specified FileDiff message. Does not implicitly {@link file.FileDiff.verify|verify} messages.
         * @function encode
         * @memberof file.FileDiff
         * @static
         * @param {file.IFileDiff} message FileDiff message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileDiff.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.currentVersion);
            if (message.isCurrentLocal != null && Object.hasOwnProperty.call(message, "isCurrentLocal"))
                writer.uint32(/* id 2, wireType 0 =*/16).bool(message.isCurrentLocal);
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                $root.common.UInt64Value.encode(message.remoteVersion, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.syncedVersion != null && Object.hasOwnProperty.call(message, "syncedVersion"))
                $root.common.UInt64Value.encode(message.syncedVersion, writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
            if (message.isRemoteRemoved != null && Object.hasOwnProperty.call(message, "isRemoteRemoved"))
                writer.uint32(/* id 5, wireType 0 =*/40).bool(message.isRemoteRemoved);
            if (message.ctime != null && Object.hasOwnProperty.call(message, "ctime"))
                $root.file.TimeStampsDiff.encode(message.ctime, writer.uint32(/* id 6, wireType 2 =*/50).fork(), q + 1).ldelim();
            if (message.mtime != null && Object.hasOwnProperty.call(message, "mtime"))
                $root.file.TimeStampsDiff.encode(message.mtime, writer.uint32(/* id 7, wireType 2 =*/58).fork(), q + 1).ldelim();
            if (message.xattrs != null && message.xattrs.length)
                for (var i = 0; i < message.xattrs.length; ++i)
                    $root.file.XAttrDiff.encode(message.xattrs[i], writer.uint32(/* id 8, wireType 2 =*/66).fork(), q + 1).ldelim();
            if (message.areContentsSame != null && Object.hasOwnProperty.call(message, "areContentsSame"))
                writer.uint32(/* id 11, wireType 0 =*/88).bool(message.areContentsSame);
            if (message.size != null && Object.hasOwnProperty.call(message, "size"))
                $root.file.FileDiff.Size.encode(message.size, writer.uint32(/* id 12, wireType 2 =*/98).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified FileDiff message, length delimited. Does not implicitly {@link file.FileDiff.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.FileDiff
         * @static
         * @param {file.IFileDiff} message FileDiff message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileDiff.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FileDiff message from the specified reader or buffer.
         * @function decode
         * @memberof file.FileDiff
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.FileDiff} FileDiff
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileDiff.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.FileDiff();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.currentVersion = reader.uint64();
                        break;
                    }
                case 2: {
                        message.isCurrentLocal = reader.bool();
                        break;
                    }
                case 3: {
                        message.remoteVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 4: {
                        message.syncedVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 5: {
                        message.isRemoteRemoved = reader.bool();
                        break;
                    }
                case 6: {
                        message.ctime = $root.file.TimeStampsDiff.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 7: {
                        message.mtime = $root.file.TimeStampsDiff.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 8: {
                        if (!(message.xattrs && message.xattrs.length))
                            message.xattrs = [];
                        message.xattrs.push($root.file.XAttrDiff.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                case 11: {
                        message.areContentsSame = reader.bool();
                        break;
                    }
                case 12: {
                        message.size = $root.file.FileDiff.Size.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FileDiff message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.FileDiff
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.FileDiff} FileDiff
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileDiff.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FileDiff message.
         * @function verify
         * @memberof file.FileDiff
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FileDiff.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion"))
                if (!$util.isInteger(message.currentVersion) && !(message.currentVersion && $util.isInteger(message.currentVersion.low) && $util.isInteger(message.currentVersion.high)))
                    return "currentVersion: integer|Long expected";
            if (message.isCurrentLocal != null && Object.hasOwnProperty.call(message, "isCurrentLocal"))
                if (typeof message.isCurrentLocal !== "boolean")
                    return "isCurrentLocal: boolean expected";
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion")) {
                var error = $root.common.UInt64Value.verify(message.remoteVersion, long + 1);
                if (error)
                    return "remoteVersion." + error;
            }
            if (message.syncedVersion != null && Object.hasOwnProperty.call(message, "syncedVersion")) {
                var error = $root.common.UInt64Value.verify(message.syncedVersion, long + 1);
                if (error)
                    return "syncedVersion." + error;
            }
            if (message.isRemoteRemoved != null && Object.hasOwnProperty.call(message, "isRemoteRemoved"))
                if (typeof message.isRemoteRemoved !== "boolean")
                    return "isRemoteRemoved: boolean expected";
            if (message.ctime != null && Object.hasOwnProperty.call(message, "ctime")) {
                var error = $root.file.TimeStampsDiff.verify(message.ctime, long + 1);
                if (error)
                    return "ctime." + error;
            }
            if (message.mtime != null && Object.hasOwnProperty.call(message, "mtime")) {
                var error = $root.file.TimeStampsDiff.verify(message.mtime, long + 1);
                if (error)
                    return "mtime." + error;
            }
            if (message.xattrs != null && Object.hasOwnProperty.call(message, "xattrs")) {
                if (!Array.isArray(message.xattrs))
                    return "xattrs: array expected";
                for (var i = 0; i < message.xattrs.length; ++i) {
                    var error = $root.file.XAttrDiff.verify(message.xattrs[i], long + 1);
                    if (error)
                        return "xattrs." + error;
                }
            }
            if (message.areContentsSame != null && Object.hasOwnProperty.call(message, "areContentsSame"))
                if (typeof message.areContentsSame !== "boolean")
                    return "areContentsSame: boolean expected";
            if (message.size != null && Object.hasOwnProperty.call(message, "size")) {
                var error = $root.file.FileDiff.Size.verify(message.size, long + 1);
                if (error)
                    return "size." + error;
            }
            return null;
        };

        /**
         * Creates a FileDiff message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.FileDiff
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.FileDiff} FileDiff
         */
        FileDiff.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.FileDiff)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.FileDiff: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.FileDiff();
            if (object.currentVersion != null)
                if ($util.Long)
                    message.currentVersion = $util.Long.fromValue(object.currentVersion, true);
                else if (typeof object.currentVersion === "string")
                    message.currentVersion = parseInt(object.currentVersion, 10);
                else if (typeof object.currentVersion === "number")
                    message.currentVersion = object.currentVersion;
                else if (typeof object.currentVersion === "object")
                    message.currentVersion = new $util.LongBits(object.currentVersion.low >>> 0, object.currentVersion.high >>> 0).toNumber(true);
            if (object.isCurrentLocal != null)
                message.isCurrentLocal = Boolean(object.isCurrentLocal);
            if (object.remoteVersion != null) {
                if (!$util.isObject(object.remoteVersion))
                    throw TypeError(".file.FileDiff.remoteVersion: object expected");
                message.remoteVersion = $root.common.UInt64Value.fromObject(object.remoteVersion, long + 1);
            }
            if (object.syncedVersion != null) {
                if (!$util.isObject(object.syncedVersion))
                    throw TypeError(".file.FileDiff.syncedVersion: object expected");
                message.syncedVersion = $root.common.UInt64Value.fromObject(object.syncedVersion, long + 1);
            }
            if (object.isRemoteRemoved != null)
                message.isRemoteRemoved = Boolean(object.isRemoteRemoved);
            if (object.ctime != null) {
                if (!$util.isObject(object.ctime))
                    throw TypeError(".file.FileDiff.ctime: object expected");
                message.ctime = $root.file.TimeStampsDiff.fromObject(object.ctime, long + 1);
            }
            if (object.mtime != null) {
                if (!$util.isObject(object.mtime))
                    throw TypeError(".file.FileDiff.mtime: object expected");
                message.mtime = $root.file.TimeStampsDiff.fromObject(object.mtime, long + 1);
            }
            if (object.xattrs) {
                if (!Array.isArray(object.xattrs))
                    throw TypeError(".file.FileDiff.xattrs: array expected");
                message.xattrs = [];
                for (var i = 0; i < object.xattrs.length; ++i) {
                    if (!$util.isObject(object.xattrs[i]))
                        throw TypeError(".file.FileDiff.xattrs: object expected");
                    message.xattrs[i] = $root.file.XAttrDiff.fromObject(object.xattrs[i], long + 1);
                }
            }
            if (object.areContentsSame != null)
                message.areContentsSame = Boolean(object.areContentsSame);
            if (object.size != null) {
                if (!$util.isObject(object.size))
                    throw TypeError(".file.FileDiff.size: object expected");
                message.size = $root.file.FileDiff.Size.fromObject(object.size, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a FileDiff message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.FileDiff
         * @static
         * @param {file.FileDiff} message FileDiff
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FileDiff.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.xattrs = [];
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.currentVersion = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.currentVersion = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                object.isCurrentLocal = false;
                object.remoteVersion = null;
                object.syncedVersion = null;
                object.isRemoteRemoved = false;
                object.ctime = null;
                object.mtime = null;
                object.areContentsSame = false;
                object.size = null;
            }
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.currentVersion = typeof message.currentVersion === "number" ? BigInt(message.currentVersion) : $util.Long.fromBits(message.currentVersion.low >>> 0, message.currentVersion.high >>> 0, true).toBigInt();
                else if (typeof message.currentVersion === "number")
                    object.currentVersion = options.longs === String ? String(message.currentVersion) : message.currentVersion;
                else
                    object.currentVersion = options.longs === String ? $util.Long.prototype.toString.call(message.currentVersion) : options.longs === Number ? new $util.LongBits(message.currentVersion.low >>> 0, message.currentVersion.high >>> 0).toNumber(true) : message.currentVersion;
            if (message.isCurrentLocal != null && Object.hasOwnProperty.call(message, "isCurrentLocal"))
                object.isCurrentLocal = message.isCurrentLocal;
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                object.remoteVersion = $root.common.UInt64Value.toObject(message.remoteVersion, options, q + 1);
            if (message.syncedVersion != null && Object.hasOwnProperty.call(message, "syncedVersion"))
                object.syncedVersion = $root.common.UInt64Value.toObject(message.syncedVersion, options, q + 1);
            if (message.isRemoteRemoved != null && Object.hasOwnProperty.call(message, "isRemoteRemoved"))
                object.isRemoteRemoved = message.isRemoteRemoved;
            if (message.ctime != null && Object.hasOwnProperty.call(message, "ctime"))
                object.ctime = $root.file.TimeStampsDiff.toObject(message.ctime, options, q + 1);
            if (message.mtime != null && Object.hasOwnProperty.call(message, "mtime"))
                object.mtime = $root.file.TimeStampsDiff.toObject(message.mtime, options, q + 1);
            if (message.xattrs && message.xattrs.length) {
                object.xattrs = [];
                for (var j = 0; j < message.xattrs.length; ++j)
                    object.xattrs[j] = $root.file.XAttrDiff.toObject(message.xattrs[j], options, q + 1);
            }
            if (message.areContentsSame != null && Object.hasOwnProperty.call(message, "areContentsSame"))
                object.areContentsSame = message.areContentsSame;
            if (message.size != null && Object.hasOwnProperty.call(message, "size"))
                object.size = $root.file.FileDiff.Size.toObject(message.size, options, q + 1);
            return object;
        };

        /**
         * Converts this FileDiff to JSON.
         * @function toJSON
         * @memberof file.FileDiff
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FileDiff.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FileDiff
         * @function getTypeUrl
         * @memberof file.FileDiff
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FileDiff.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.FileDiff";
        };

        FileDiff.Size = (function() {

            /**
             * Properties of a Size.
             * @memberof file.FileDiff
             * @interface ISize
             * @property {number|Long|null} [current] Size current
             * @property {number|Long|null} [remote] Size remote
             */

            /**
             * Constructs a new Size.
             * @memberof file.FileDiff
             * @classdesc Represents a Size.
             * @implements ISize
             * @constructor
             * @param {file.FileDiff.ISize=} [properties] Properties to set
             */
            function Size(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                            this[keys[i]] = properties[keys[i]];
            }

            /**
             * Size current.
             * @member {number|Long} current
             * @memberof file.FileDiff.Size
             * @instance
             */
            Size.prototype.current = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

            /**
             * Size remote.
             * @member {number|Long} remote
             * @memberof file.FileDiff.Size
             * @instance
             */
            Size.prototype.remote = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

            /**
             * Creates a new Size instance using the specified properties.
             * @function create
             * @memberof file.FileDiff.Size
             * @static
             * @param {file.FileDiff.ISize=} [properties] Properties to set
             * @returns {file.FileDiff.Size} Size instance
             */
            Size.create = function create(properties) {
                return new Size(properties);
            };

            /**
             * Encodes the specified Size message. Does not implicitly {@link file.FileDiff.Size.verify|verify} messages.
             * @function encode
             * @memberof file.FileDiff.Size
             * @static
             * @param {file.FileDiff.ISize} message Size message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Size.encode = function encode(message, writer, q) {
                if (!writer)
                    writer = $Writer.create();
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                if (message.current != null && Object.hasOwnProperty.call(message, "current"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.current);
                if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                    writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.remote);
                return writer;
            };

            /**
             * Encodes the specified Size message, length delimited. Does not implicitly {@link file.FileDiff.Size.verify|verify} messages.
             * @function encodeDelimited
             * @memberof file.FileDiff.Size
             * @static
             * @param {file.FileDiff.ISize} message Size message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Size.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
            };

            /**
             * Decodes a Size message from the specified reader or buffer.
             * @function decode
             * @memberof file.FileDiff.Size
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {file.FileDiff.Size} Size
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Size.decode = function decode(reader, length, error, long) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                if (long === undefined)
                    long = 0;
                if (long > $Reader.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.FileDiff.Size();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    if (tag === error)
                        break;
                    switch (tag >>> 3) {
                    case 1: {
                            message.current = reader.uint64();
                            break;
                        }
                    case 2: {
                            message.remote = reader.uint64();
                            break;
                        }
                    default:
                        reader.skipType(tag & 7, long);
                        break;
                    }
                }
                return message;
            };

            /**
             * Decodes a Size message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof file.FileDiff.Size
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {file.FileDiff.Size} Size
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Size.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };

            /**
             * Verifies a Size message.
             * @function verify
             * @memberof file.FileDiff.Size
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            Size.verify = function verify(message, long) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    return "maximum nesting depth exceeded";
                if (message.current != null && Object.hasOwnProperty.call(message, "current"))
                    if (!$util.isInteger(message.current) && !(message.current && $util.isInteger(message.current.low) && $util.isInteger(message.current.high)))
                        return "current: integer|Long expected";
                if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                    if (!$util.isInteger(message.remote) && !(message.remote && $util.isInteger(message.remote.low) && $util.isInteger(message.remote.high)))
                        return "remote: integer|Long expected";
                return null;
            };

            /**
             * Creates a Size message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof file.FileDiff.Size
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {file.FileDiff.Size} Size
             */
            Size.fromObject = function fromObject(object, long) {
                if (object instanceof $root.file.FileDiff.Size)
                    return object;
                if (!$util.isObject(object))
                    throw TypeError(".file.FileDiff.Size: object expected");
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var message = new $root.file.FileDiff.Size();
                if (object.current != null)
                    if ($util.Long)
                        message.current = $util.Long.fromValue(object.current, true);
                    else if (typeof object.current === "string")
                        message.current = parseInt(object.current, 10);
                    else if (typeof object.current === "number")
                        message.current = object.current;
                    else if (typeof object.current === "object")
                        message.current = new $util.LongBits(object.current.low >>> 0, object.current.high >>> 0).toNumber(true);
                if (object.remote != null)
                    if ($util.Long)
                        message.remote = $util.Long.fromValue(object.remote, true);
                    else if (typeof object.remote === "string")
                        message.remote = parseInt(object.remote, 10);
                    else if (typeof object.remote === "number")
                        message.remote = object.remote;
                    else if (typeof object.remote === "object")
                        message.remote = new $util.LongBits(object.remote.low >>> 0, object.remote.high >>> 0).toNumber(true);
                return message;
            };

            /**
             * Creates a plain object from a Size message. Also converts values to other types if specified.
             * @function toObject
             * @memberof file.FileDiff.Size
             * @static
             * @param {file.FileDiff.Size} message Size
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            Size.toObject = function toObject(message, options, q) {
                if (!options)
                    options = {};
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                var object = {};
                if (options.defaults) {
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.current = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                    } else
                        object.current = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.remote = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                    } else
                        object.remote = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                }
                if (message.current != null && Object.hasOwnProperty.call(message, "current"))
                    if (typeof BigInt !== "undefined" && options.longs === BigInt)
                        object.current = typeof message.current === "number" ? BigInt(message.current) : $util.Long.fromBits(message.current.low >>> 0, message.current.high >>> 0, true).toBigInt();
                    else if (typeof message.current === "number")
                        object.current = options.longs === String ? String(message.current) : message.current;
                    else
                        object.current = options.longs === String ? $util.Long.prototype.toString.call(message.current) : options.longs === Number ? new $util.LongBits(message.current.low >>> 0, message.current.high >>> 0).toNumber(true) : message.current;
                if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                    if (typeof BigInt !== "undefined" && options.longs === BigInt)
                        object.remote = typeof message.remote === "number" ? BigInt(message.remote) : $util.Long.fromBits(message.remote.low >>> 0, message.remote.high >>> 0, true).toBigInt();
                    else if (typeof message.remote === "number")
                        object.remote = options.longs === String ? String(message.remote) : message.remote;
                    else
                        object.remote = options.longs === String ? $util.Long.prototype.toString.call(message.remote) : options.longs === Number ? new $util.LongBits(message.remote.low >>> 0, message.remote.high >>> 0).toNumber(true) : message.remote;
                return object;
            };

            /**
             * Converts this Size to JSON.
             * @function toJSON
             * @memberof file.FileDiff.Size
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            Size.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };

            /**
             * Gets the default type url for Size
             * @function getTypeUrl
             * @memberof file.FileDiff.Size
             * @static
             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns {string} The default type url
             */
            Size.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
                if (typeUrlPrefix === undefined) {
                    typeUrlPrefix = "type.googleapis.com";
                }
                return typeUrlPrefix + "/file.FileDiff.Size";
            };

            return Size;
        })();

        return FileDiff;
    })();

    file.FileSyncUploadRequestBody = (function() {

        /**
         * Properties of a FileSyncUploadRequestBody.
         * @memberof file
         * @interface IFileSyncUploadRequestBody
         * @property {file.IOptionsToUploadLocal|null} [opts] FileSyncUploadRequestBody opts
         */

        /**
         * Constructs a new FileSyncUploadRequestBody.
         * @memberof file
         * @classdesc Represents a FileSyncUploadRequestBody.
         * @implements IFileSyncUploadRequestBody
         * @constructor
         * @param {file.IFileSyncUploadRequestBody=} [properties] Properties to set
         */
        function FileSyncUploadRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FileSyncUploadRequestBody opts.
         * @member {file.IOptionsToUploadLocal|null|undefined} opts
         * @memberof file.FileSyncUploadRequestBody
         * @instance
         */
        FileSyncUploadRequestBody.prototype.opts = null;

        /**
         * Creates a new FileSyncUploadRequestBody instance using the specified properties.
         * @function create
         * @memberof file.FileSyncUploadRequestBody
         * @static
         * @param {file.IFileSyncUploadRequestBody=} [properties] Properties to set
         * @returns {file.FileSyncUploadRequestBody} FileSyncUploadRequestBody instance
         */
        FileSyncUploadRequestBody.create = function create(properties) {
            return new FileSyncUploadRequestBody(properties);
        };

        /**
         * Encodes the specified FileSyncUploadRequestBody message. Does not implicitly {@link file.FileSyncUploadRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.FileSyncUploadRequestBody
         * @static
         * @param {file.IFileSyncUploadRequestBody} message FileSyncUploadRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncUploadRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                $root.file.OptionsToUploadLocal.encode(message.opts, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified FileSyncUploadRequestBody message, length delimited. Does not implicitly {@link file.FileSyncUploadRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.FileSyncUploadRequestBody
         * @static
         * @param {file.IFileSyncUploadRequestBody} message FileSyncUploadRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncUploadRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FileSyncUploadRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.FileSyncUploadRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.FileSyncUploadRequestBody} FileSyncUploadRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncUploadRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.FileSyncUploadRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.opts = $root.file.OptionsToUploadLocal.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FileSyncUploadRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.FileSyncUploadRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.FileSyncUploadRequestBody} FileSyncUploadRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncUploadRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FileSyncUploadRequestBody message.
         * @function verify
         * @memberof file.FileSyncUploadRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FileSyncUploadRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts")) {
                var error = $root.file.OptionsToUploadLocal.verify(message.opts, long + 1);
                if (error)
                    return "opts." + error;
            }
            return null;
        };

        /**
         * Creates a FileSyncUploadRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.FileSyncUploadRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.FileSyncUploadRequestBody} FileSyncUploadRequestBody
         */
        FileSyncUploadRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.FileSyncUploadRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.FileSyncUploadRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.FileSyncUploadRequestBody();
            if (object.opts != null) {
                if (!$util.isObject(object.opts))
                    throw TypeError(".file.FileSyncUploadRequestBody.opts: object expected");
                message.opts = $root.file.OptionsToUploadLocal.fromObject(object.opts, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a FileSyncUploadRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.FileSyncUploadRequestBody
         * @static
         * @param {file.FileSyncUploadRequestBody} message FileSyncUploadRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FileSyncUploadRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.opts = null;
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                object.opts = $root.file.OptionsToUploadLocal.toObject(message.opts, options, q + 1);
            return object;
        };

        /**
         * Converts this FileSyncUploadRequestBody to JSON.
         * @function toJSON
         * @memberof file.FileSyncUploadRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FileSyncUploadRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FileSyncUploadRequestBody
         * @function getTypeUrl
         * @memberof file.FileSyncUploadRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FileSyncUploadRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.FileSyncUploadRequestBody";
        };

        return FileSyncUploadRequestBody;
    })();

    file.FileSyncUploadReplyBody = (function() {

        /**
         * Properties of a FileSyncUploadReplyBody.
         * @memberof file
         * @interface IFileSyncUploadReplyBody
         * @property {common.IUInt64Value|null} [uploadedVersion] FileSyncUploadReplyBody uploadedVersion
         */

        /**
         * Constructs a new FileSyncUploadReplyBody.
         * @memberof file
         * @classdesc Represents a FileSyncUploadReplyBody.
         * @implements IFileSyncUploadReplyBody
         * @constructor
         * @param {file.IFileSyncUploadReplyBody=} [properties] Properties to set
         */
        function FileSyncUploadReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FileSyncUploadReplyBody uploadedVersion.
         * @member {common.IUInt64Value|null|undefined} uploadedVersion
         * @memberof file.FileSyncUploadReplyBody
         * @instance
         */
        FileSyncUploadReplyBody.prototype.uploadedVersion = null;

        /**
         * Creates a new FileSyncUploadReplyBody instance using the specified properties.
         * @function create
         * @memberof file.FileSyncUploadReplyBody
         * @static
         * @param {file.IFileSyncUploadReplyBody=} [properties] Properties to set
         * @returns {file.FileSyncUploadReplyBody} FileSyncUploadReplyBody instance
         */
        FileSyncUploadReplyBody.create = function create(properties) {
            return new FileSyncUploadReplyBody(properties);
        };

        /**
         * Encodes the specified FileSyncUploadReplyBody message. Does not implicitly {@link file.FileSyncUploadReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.FileSyncUploadReplyBody
         * @static
         * @param {file.IFileSyncUploadReplyBody} message FileSyncUploadReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncUploadReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.uploadedVersion != null && Object.hasOwnProperty.call(message, "uploadedVersion"))
                $root.common.UInt64Value.encode(message.uploadedVersion, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified FileSyncUploadReplyBody message, length delimited. Does not implicitly {@link file.FileSyncUploadReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.FileSyncUploadReplyBody
         * @static
         * @param {file.IFileSyncUploadReplyBody} message FileSyncUploadReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncUploadReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FileSyncUploadReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.FileSyncUploadReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.FileSyncUploadReplyBody} FileSyncUploadReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncUploadReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.FileSyncUploadReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.uploadedVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FileSyncUploadReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.FileSyncUploadReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.FileSyncUploadReplyBody} FileSyncUploadReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncUploadReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FileSyncUploadReplyBody message.
         * @function verify
         * @memberof file.FileSyncUploadReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FileSyncUploadReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.uploadedVersion != null && Object.hasOwnProperty.call(message, "uploadedVersion")) {
                var error = $root.common.UInt64Value.verify(message.uploadedVersion, long + 1);
                if (error)
                    return "uploadedVersion." + error;
            }
            return null;
        };

        /**
         * Creates a FileSyncUploadReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.FileSyncUploadReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.FileSyncUploadReplyBody} FileSyncUploadReplyBody
         */
        FileSyncUploadReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.FileSyncUploadReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.FileSyncUploadReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.FileSyncUploadReplyBody();
            if (object.uploadedVersion != null) {
                if (!$util.isObject(object.uploadedVersion))
                    throw TypeError(".file.FileSyncUploadReplyBody.uploadedVersion: object expected");
                message.uploadedVersion = $root.common.UInt64Value.fromObject(object.uploadedVersion, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a FileSyncUploadReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.FileSyncUploadReplyBody
         * @static
         * @param {file.FileSyncUploadReplyBody} message FileSyncUploadReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FileSyncUploadReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.uploadedVersion = null;
            if (message.uploadedVersion != null && Object.hasOwnProperty.call(message, "uploadedVersion"))
                object.uploadedVersion = $root.common.UInt64Value.toObject(message.uploadedVersion, options, q + 1);
            return object;
        };

        /**
         * Converts this FileSyncUploadReplyBody to JSON.
         * @function toJSON
         * @memberof file.FileSyncUploadReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FileSyncUploadReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FileSyncUploadReplyBody
         * @function getTypeUrl
         * @memberof file.FileSyncUploadReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FileSyncUploadReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.FileSyncUploadReplyBody";
        };

        return FileSyncUploadReplyBody;
    })();

    file.FileSyncStartUploadReplyBody = (function() {

        /**
         * Properties of a FileSyncStartUploadReplyBody.
         * @memberof file
         * @interface IFileSyncStartUploadReplyBody
         * @property {file.FileSyncStartUploadReplyBody.IUploadInfo|null} [startedUpload] FileSyncStartUploadReplyBody startedUpload
         */

        /**
         * Constructs a new FileSyncStartUploadReplyBody.
         * @memberof file
         * @classdesc Represents a FileSyncStartUploadReplyBody.
         * @implements IFileSyncStartUploadReplyBody
         * @constructor
         * @param {file.IFileSyncStartUploadReplyBody=} [properties] Properties to set
         */
        function FileSyncStartUploadReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FileSyncStartUploadReplyBody startedUpload.
         * @member {file.FileSyncStartUploadReplyBody.IUploadInfo|null|undefined} startedUpload
         * @memberof file.FileSyncStartUploadReplyBody
         * @instance
         */
        FileSyncStartUploadReplyBody.prototype.startedUpload = null;

        /**
         * Creates a new FileSyncStartUploadReplyBody instance using the specified properties.
         * @function create
         * @memberof file.FileSyncStartUploadReplyBody
         * @static
         * @param {file.IFileSyncStartUploadReplyBody=} [properties] Properties to set
         * @returns {file.FileSyncStartUploadReplyBody} FileSyncStartUploadReplyBody instance
         */
        FileSyncStartUploadReplyBody.create = function create(properties) {
            return new FileSyncStartUploadReplyBody(properties);
        };

        /**
         * Encodes the specified FileSyncStartUploadReplyBody message. Does not implicitly {@link file.FileSyncStartUploadReplyBody.verify|verify} messages.
         * @function encode
         * @memberof file.FileSyncStartUploadReplyBody
         * @static
         * @param {file.IFileSyncStartUploadReplyBody} message FileSyncStartUploadReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncStartUploadReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.startedUpload != null && Object.hasOwnProperty.call(message, "startedUpload"))
                $root.file.FileSyncStartUploadReplyBody.UploadInfo.encode(message.startedUpload, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified FileSyncStartUploadReplyBody message, length delimited. Does not implicitly {@link file.FileSyncStartUploadReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.FileSyncStartUploadReplyBody
         * @static
         * @param {file.IFileSyncStartUploadReplyBody} message FileSyncStartUploadReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileSyncStartUploadReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FileSyncStartUploadReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.FileSyncStartUploadReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.FileSyncStartUploadReplyBody} FileSyncStartUploadReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncStartUploadReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.FileSyncStartUploadReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.startedUpload = $root.file.FileSyncStartUploadReplyBody.UploadInfo.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FileSyncStartUploadReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.FileSyncStartUploadReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.FileSyncStartUploadReplyBody} FileSyncStartUploadReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileSyncStartUploadReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FileSyncStartUploadReplyBody message.
         * @function verify
         * @memberof file.FileSyncStartUploadReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FileSyncStartUploadReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.startedUpload != null && Object.hasOwnProperty.call(message, "startedUpload")) {
                var error = $root.file.FileSyncStartUploadReplyBody.UploadInfo.verify(message.startedUpload, long + 1);
                if (error)
                    return "startedUpload." + error;
            }
            return null;
        };

        /**
         * Creates a FileSyncStartUploadReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.FileSyncStartUploadReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.FileSyncStartUploadReplyBody} FileSyncStartUploadReplyBody
         */
        FileSyncStartUploadReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.FileSyncStartUploadReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.FileSyncStartUploadReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.FileSyncStartUploadReplyBody();
            if (object.startedUpload != null) {
                if (!$util.isObject(object.startedUpload))
                    throw TypeError(".file.FileSyncStartUploadReplyBody.startedUpload: object expected");
                message.startedUpload = $root.file.FileSyncStartUploadReplyBody.UploadInfo.fromObject(object.startedUpload, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a FileSyncStartUploadReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.FileSyncStartUploadReplyBody
         * @static
         * @param {file.FileSyncStartUploadReplyBody} message FileSyncStartUploadReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FileSyncStartUploadReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.startedUpload = null;
            if (message.startedUpload != null && Object.hasOwnProperty.call(message, "startedUpload"))
                object.startedUpload = $root.file.FileSyncStartUploadReplyBody.UploadInfo.toObject(message.startedUpload, options, q + 1);
            return object;
        };

        /**
         * Converts this FileSyncStartUploadReplyBody to JSON.
         * @function toJSON
         * @memberof file.FileSyncStartUploadReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FileSyncStartUploadReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FileSyncStartUploadReplyBody
         * @function getTypeUrl
         * @memberof file.FileSyncStartUploadReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FileSyncStartUploadReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.FileSyncStartUploadReplyBody";
        };

        FileSyncStartUploadReplyBody.UploadInfo = (function() {

            /**
             * Properties of an UploadInfo.
             * @memberof file.FileSyncStartUploadReplyBody
             * @interface IUploadInfo
             * @property {number|Long|null} [uploadVersion] UploadInfo uploadVersion
             * @property {number|Long|null} [uploadTaskId] UploadInfo uploadTaskId
             */

            /**
             * Constructs a new UploadInfo.
             * @memberof file.FileSyncStartUploadReplyBody
             * @classdesc Represents an UploadInfo.
             * @implements IUploadInfo
             * @constructor
             * @param {file.FileSyncStartUploadReplyBody.IUploadInfo=} [properties] Properties to set
             */
            function UploadInfo(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                            this[keys[i]] = properties[keys[i]];
            }

            /**
             * UploadInfo uploadVersion.
             * @member {number|Long} uploadVersion
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @instance
             */
            UploadInfo.prototype.uploadVersion = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

            /**
             * UploadInfo uploadTaskId.
             * @member {number|Long} uploadTaskId
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @instance
             */
            UploadInfo.prototype.uploadTaskId = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

            /**
             * Creates a new UploadInfo instance using the specified properties.
             * @function create
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @static
             * @param {file.FileSyncStartUploadReplyBody.IUploadInfo=} [properties] Properties to set
             * @returns {file.FileSyncStartUploadReplyBody.UploadInfo} UploadInfo instance
             */
            UploadInfo.create = function create(properties) {
                return new UploadInfo(properties);
            };

            /**
             * Encodes the specified UploadInfo message. Does not implicitly {@link file.FileSyncStartUploadReplyBody.UploadInfo.verify|verify} messages.
             * @function encode
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @static
             * @param {file.FileSyncStartUploadReplyBody.IUploadInfo} message UploadInfo message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            UploadInfo.encode = function encode(message, writer, q) {
                if (!writer)
                    writer = $Writer.create();
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.uploadVersion);
                if (message.uploadTaskId != null && Object.hasOwnProperty.call(message, "uploadTaskId"))
                    writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.uploadTaskId);
                return writer;
            };

            /**
             * Encodes the specified UploadInfo message, length delimited. Does not implicitly {@link file.FileSyncStartUploadReplyBody.UploadInfo.verify|verify} messages.
             * @function encodeDelimited
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @static
             * @param {file.FileSyncStartUploadReplyBody.IUploadInfo} message UploadInfo message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            UploadInfo.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
            };

            /**
             * Decodes an UploadInfo message from the specified reader or buffer.
             * @function decode
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {file.FileSyncStartUploadReplyBody.UploadInfo} UploadInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            UploadInfo.decode = function decode(reader, length, error, long) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                if (long === undefined)
                    long = 0;
                if (long > $Reader.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.FileSyncStartUploadReplyBody.UploadInfo();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    if (tag === error)
                        break;
                    switch (tag >>> 3) {
                    case 1: {
                            message.uploadVersion = reader.uint64();
                            break;
                        }
                    case 2: {
                            message.uploadTaskId = reader.uint64();
                            break;
                        }
                    default:
                        reader.skipType(tag & 7, long);
                        break;
                    }
                }
                return message;
            };

            /**
             * Decodes an UploadInfo message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {file.FileSyncStartUploadReplyBody.UploadInfo} UploadInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            UploadInfo.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };

            /**
             * Verifies an UploadInfo message.
             * @function verify
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            UploadInfo.verify = function verify(message, long) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    return "maximum nesting depth exceeded";
                if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion"))
                    if (!$util.isInteger(message.uploadVersion) && !(message.uploadVersion && $util.isInteger(message.uploadVersion.low) && $util.isInteger(message.uploadVersion.high)))
                        return "uploadVersion: integer|Long expected";
                if (message.uploadTaskId != null && Object.hasOwnProperty.call(message, "uploadTaskId"))
                    if (!$util.isInteger(message.uploadTaskId) && !(message.uploadTaskId && $util.isInteger(message.uploadTaskId.low) && $util.isInteger(message.uploadTaskId.high)))
                        return "uploadTaskId: integer|Long expected";
                return null;
            };

            /**
             * Creates an UploadInfo message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {file.FileSyncStartUploadReplyBody.UploadInfo} UploadInfo
             */
            UploadInfo.fromObject = function fromObject(object, long) {
                if (object instanceof $root.file.FileSyncStartUploadReplyBody.UploadInfo)
                    return object;
                if (!$util.isObject(object))
                    throw TypeError(".file.FileSyncStartUploadReplyBody.UploadInfo: object expected");
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var message = new $root.file.FileSyncStartUploadReplyBody.UploadInfo();
                if (object.uploadVersion != null)
                    if ($util.Long)
                        message.uploadVersion = $util.Long.fromValue(object.uploadVersion, true);
                    else if (typeof object.uploadVersion === "string")
                        message.uploadVersion = parseInt(object.uploadVersion, 10);
                    else if (typeof object.uploadVersion === "number")
                        message.uploadVersion = object.uploadVersion;
                    else if (typeof object.uploadVersion === "object")
                        message.uploadVersion = new $util.LongBits(object.uploadVersion.low >>> 0, object.uploadVersion.high >>> 0).toNumber(true);
                if (object.uploadTaskId != null)
                    if ($util.Long)
                        message.uploadTaskId = $util.Long.fromValue(object.uploadTaskId, true);
                    else if (typeof object.uploadTaskId === "string")
                        message.uploadTaskId = parseInt(object.uploadTaskId, 10);
                    else if (typeof object.uploadTaskId === "number")
                        message.uploadTaskId = object.uploadTaskId;
                    else if (typeof object.uploadTaskId === "object")
                        message.uploadTaskId = new $util.LongBits(object.uploadTaskId.low >>> 0, object.uploadTaskId.high >>> 0).toNumber(true);
                return message;
            };

            /**
             * Creates a plain object from an UploadInfo message. Also converts values to other types if specified.
             * @function toObject
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @static
             * @param {file.FileSyncStartUploadReplyBody.UploadInfo} message UploadInfo
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            UploadInfo.toObject = function toObject(message, options, q) {
                if (!options)
                    options = {};
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                var object = {};
                if (options.defaults) {
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.uploadVersion = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                    } else
                        object.uploadVersion = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.uploadTaskId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                    } else
                        object.uploadTaskId = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                }
                if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion"))
                    if (typeof BigInt !== "undefined" && options.longs === BigInt)
                        object.uploadVersion = typeof message.uploadVersion === "number" ? BigInt(message.uploadVersion) : $util.Long.fromBits(message.uploadVersion.low >>> 0, message.uploadVersion.high >>> 0, true).toBigInt();
                    else if (typeof message.uploadVersion === "number")
                        object.uploadVersion = options.longs === String ? String(message.uploadVersion) : message.uploadVersion;
                    else
                        object.uploadVersion = options.longs === String ? $util.Long.prototype.toString.call(message.uploadVersion) : options.longs === Number ? new $util.LongBits(message.uploadVersion.low >>> 0, message.uploadVersion.high >>> 0).toNumber(true) : message.uploadVersion;
                if (message.uploadTaskId != null && Object.hasOwnProperty.call(message, "uploadTaskId"))
                    if (typeof BigInt !== "undefined" && options.longs === BigInt)
                        object.uploadTaskId = typeof message.uploadTaskId === "number" ? BigInt(message.uploadTaskId) : $util.Long.fromBits(message.uploadTaskId.low >>> 0, message.uploadTaskId.high >>> 0, true).toBigInt();
                    else if (typeof message.uploadTaskId === "number")
                        object.uploadTaskId = options.longs === String ? String(message.uploadTaskId) : message.uploadTaskId;
                    else
                        object.uploadTaskId = options.longs === String ? $util.Long.prototype.toString.call(message.uploadTaskId) : options.longs === Number ? new $util.LongBits(message.uploadTaskId.low >>> 0, message.uploadTaskId.high >>> 0).toNumber(true) : message.uploadTaskId;
                return object;
            };

            /**
             * Converts this UploadInfo to JSON.
             * @function toJSON
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            UploadInfo.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };

            /**
             * Gets the default type url for UploadInfo
             * @function getTypeUrl
             * @memberof file.FileSyncStartUploadReplyBody.UploadInfo
             * @static
             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns {string} The default type url
             */
            UploadInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
                if (typeUrlPrefix === undefined) {
                    typeUrlPrefix = "type.googleapis.com";
                }
                return typeUrlPrefix + "/file.FileSyncStartUploadReplyBody.UploadInfo";
            };

            return UploadInfo;
        })();

        return FileSyncStartUploadReplyBody;
    })();

    file.OptionsToUploadLocal = (function() {

        /**
         * Properties of an OptionsToUploadLocal.
         * @memberof file
         * @interface IOptionsToUploadLocal
         * @property {common.IUInt64Value|null} [localVersion] OptionsToUploadLocal localVersion
         * @property {common.IUInt64Value|null} [uploadVersion] OptionsToUploadLocal uploadVersion
         */

        /**
         * Constructs a new OptionsToUploadLocal.
         * @memberof file
         * @classdesc Represents an OptionsToUploadLocal.
         * @implements IOptionsToUploadLocal
         * @constructor
         * @param {file.IOptionsToUploadLocal=} [properties] Properties to set
         */
        function OptionsToUploadLocal(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * OptionsToUploadLocal localVersion.
         * @member {common.IUInt64Value|null|undefined} localVersion
         * @memberof file.OptionsToUploadLocal
         * @instance
         */
        OptionsToUploadLocal.prototype.localVersion = null;

        /**
         * OptionsToUploadLocal uploadVersion.
         * @member {common.IUInt64Value|null|undefined} uploadVersion
         * @memberof file.OptionsToUploadLocal
         * @instance
         */
        OptionsToUploadLocal.prototype.uploadVersion = null;

        /**
         * Creates a new OptionsToUploadLocal instance using the specified properties.
         * @function create
         * @memberof file.OptionsToUploadLocal
         * @static
         * @param {file.IOptionsToUploadLocal=} [properties] Properties to set
         * @returns {file.OptionsToUploadLocal} OptionsToUploadLocal instance
         */
        OptionsToUploadLocal.create = function create(properties) {
            return new OptionsToUploadLocal(properties);
        };

        /**
         * Encodes the specified OptionsToUploadLocal message. Does not implicitly {@link file.OptionsToUploadLocal.verify|verify} messages.
         * @function encode
         * @memberof file.OptionsToUploadLocal
         * @static
         * @param {file.IOptionsToUploadLocal} message OptionsToUploadLocal message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OptionsToUploadLocal.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                $root.common.UInt64Value.encode(message.localVersion, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion"))
                $root.common.UInt64Value.encode(message.uploadVersion, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified OptionsToUploadLocal message, length delimited. Does not implicitly {@link file.OptionsToUploadLocal.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.OptionsToUploadLocal
         * @static
         * @param {file.IOptionsToUploadLocal} message OptionsToUploadLocal message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OptionsToUploadLocal.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an OptionsToUploadLocal message from the specified reader or buffer.
         * @function decode
         * @memberof file.OptionsToUploadLocal
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.OptionsToUploadLocal} OptionsToUploadLocal
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OptionsToUploadLocal.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.OptionsToUploadLocal();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.localVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.uploadVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an OptionsToUploadLocal message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.OptionsToUploadLocal
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.OptionsToUploadLocal} OptionsToUploadLocal
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OptionsToUploadLocal.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an OptionsToUploadLocal message.
         * @function verify
         * @memberof file.OptionsToUploadLocal
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        OptionsToUploadLocal.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion")) {
                var error = $root.common.UInt64Value.verify(message.localVersion, long + 1);
                if (error)
                    return "localVersion." + error;
            }
            if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion")) {
                var error = $root.common.UInt64Value.verify(message.uploadVersion, long + 1);
                if (error)
                    return "uploadVersion." + error;
            }
            return null;
        };

        /**
         * Creates an OptionsToUploadLocal message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.OptionsToUploadLocal
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.OptionsToUploadLocal} OptionsToUploadLocal
         */
        OptionsToUploadLocal.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.OptionsToUploadLocal)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.OptionsToUploadLocal: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.OptionsToUploadLocal();
            if (object.localVersion != null) {
                if (!$util.isObject(object.localVersion))
                    throw TypeError(".file.OptionsToUploadLocal.localVersion: object expected");
                message.localVersion = $root.common.UInt64Value.fromObject(object.localVersion, long + 1);
            }
            if (object.uploadVersion != null) {
                if (!$util.isObject(object.uploadVersion))
                    throw TypeError(".file.OptionsToUploadLocal.uploadVersion: object expected");
                message.uploadVersion = $root.common.UInt64Value.fromObject(object.uploadVersion, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an OptionsToUploadLocal message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.OptionsToUploadLocal
         * @static
         * @param {file.OptionsToUploadLocal} message OptionsToUploadLocal
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        OptionsToUploadLocal.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.localVersion = null;
                object.uploadVersion = null;
            }
            if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                object.localVersion = $root.common.UInt64Value.toObject(message.localVersion, options, q + 1);
            if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion"))
                object.uploadVersion = $root.common.UInt64Value.toObject(message.uploadVersion, options, q + 1);
            return object;
        };

        /**
         * Converts this OptionsToUploadLocal to JSON.
         * @function toJSON
         * @memberof file.OptionsToUploadLocal
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        OptionsToUploadLocal.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for OptionsToUploadLocal
         * @function getTypeUrl
         * @memberof file.OptionsToUploadLocal
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        OptionsToUploadLocal.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.OptionsToUploadLocal";
        };

        return OptionsToUploadLocal;
    })();

    file.WatchUploadRequestBody = (function() {

        /**
         * Properties of a WatchUploadRequestBody.
         * @memberof file
         * @interface IWatchUploadRequestBody
         * @property {number|Long|null} [uploadTaskId] WatchUploadRequestBody uploadTaskId
         */

        /**
         * Constructs a new WatchUploadRequestBody.
         * @memberof file
         * @classdesc Represents a WatchUploadRequestBody.
         * @implements IWatchUploadRequestBody
         * @constructor
         * @param {file.IWatchUploadRequestBody=} [properties] Properties to set
         */
        function WatchUploadRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * WatchUploadRequestBody uploadTaskId.
         * @member {number|Long} uploadTaskId
         * @memberof file.WatchUploadRequestBody
         * @instance
         */
        WatchUploadRequestBody.prototype.uploadTaskId = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new WatchUploadRequestBody instance using the specified properties.
         * @function create
         * @memberof file.WatchUploadRequestBody
         * @static
         * @param {file.IWatchUploadRequestBody=} [properties] Properties to set
         * @returns {file.WatchUploadRequestBody} WatchUploadRequestBody instance
         */
        WatchUploadRequestBody.create = function create(properties) {
            return new WatchUploadRequestBody(properties);
        };

        /**
         * Encodes the specified WatchUploadRequestBody message. Does not implicitly {@link file.WatchUploadRequestBody.verify|verify} messages.
         * @function encode
         * @memberof file.WatchUploadRequestBody
         * @static
         * @param {file.IWatchUploadRequestBody} message WatchUploadRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WatchUploadRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.uploadTaskId != null && Object.hasOwnProperty.call(message, "uploadTaskId"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.uploadTaskId);
            return writer;
        };

        /**
         * Encodes the specified WatchUploadRequestBody message, length delimited. Does not implicitly {@link file.WatchUploadRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.WatchUploadRequestBody
         * @static
         * @param {file.IWatchUploadRequestBody} message WatchUploadRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WatchUploadRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a WatchUploadRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof file.WatchUploadRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.WatchUploadRequestBody} WatchUploadRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WatchUploadRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.WatchUploadRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.uploadTaskId = reader.uint64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a WatchUploadRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.WatchUploadRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.WatchUploadRequestBody} WatchUploadRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WatchUploadRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a WatchUploadRequestBody message.
         * @function verify
         * @memberof file.WatchUploadRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        WatchUploadRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.uploadTaskId != null && Object.hasOwnProperty.call(message, "uploadTaskId"))
                if (!$util.isInteger(message.uploadTaskId) && !(message.uploadTaskId && $util.isInteger(message.uploadTaskId.low) && $util.isInteger(message.uploadTaskId.high)))
                    return "uploadTaskId: integer|Long expected";
            return null;
        };

        /**
         * Creates a WatchUploadRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.WatchUploadRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.WatchUploadRequestBody} WatchUploadRequestBody
         */
        WatchUploadRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.WatchUploadRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.WatchUploadRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.WatchUploadRequestBody();
            if (object.uploadTaskId != null)
                if ($util.Long)
                    message.uploadTaskId = $util.Long.fromValue(object.uploadTaskId, true);
                else if (typeof object.uploadTaskId === "string")
                    message.uploadTaskId = parseInt(object.uploadTaskId, 10);
                else if (typeof object.uploadTaskId === "number")
                    message.uploadTaskId = object.uploadTaskId;
                else if (typeof object.uploadTaskId === "object")
                    message.uploadTaskId = new $util.LongBits(object.uploadTaskId.low >>> 0, object.uploadTaskId.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a WatchUploadRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.WatchUploadRequestBody
         * @static
         * @param {file.WatchUploadRequestBody} message WatchUploadRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        WatchUploadRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.uploadTaskId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.uploadTaskId = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
            if (message.uploadTaskId != null && Object.hasOwnProperty.call(message, "uploadTaskId"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.uploadTaskId = typeof message.uploadTaskId === "number" ? BigInt(message.uploadTaskId) : $util.Long.fromBits(message.uploadTaskId.low >>> 0, message.uploadTaskId.high >>> 0, true).toBigInt();
                else if (typeof message.uploadTaskId === "number")
                    object.uploadTaskId = options.longs === String ? String(message.uploadTaskId) : message.uploadTaskId;
                else
                    object.uploadTaskId = options.longs === String ? $util.Long.prototype.toString.call(message.uploadTaskId) : options.longs === Number ? new $util.LongBits(message.uploadTaskId.low >>> 0, message.uploadTaskId.high >>> 0).toNumber(true) : message.uploadTaskId;
            return object;
        };

        /**
         * Converts this WatchUploadRequestBody to JSON.
         * @function toJSON
         * @memberof file.WatchUploadRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        WatchUploadRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for WatchUploadRequestBody
         * @function getTypeUrl
         * @memberof file.WatchUploadRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        WatchUploadRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.WatchUploadRequestBody";
        };

        return WatchUploadRequestBody;
    })();

    file.UploadEventMsg = (function() {

        /**
         * Properties of an UploadEventMsg.
         * @memberof file
         * @interface IUploadEventMsg
         * @property {string|null} [type] UploadEventMsg type
         * @property {number|Long|null} [uploadTaskId] UploadEventMsg uploadTaskId
         * @property {number|Long|null} [localVersion] UploadEventMsg localVersion
         * @property {number|Long|null} [uploadVersion] UploadEventMsg uploadVersion
         */

        /**
         * Constructs a new UploadEventMsg.
         * @memberof file
         * @classdesc Represents an UploadEventMsg.
         * @implements IUploadEventMsg
         * @constructor
         * @param {file.IUploadEventMsg=} [properties] Properties to set
         */
        function UploadEventMsg(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UploadEventMsg type.
         * @member {string} type
         * @memberof file.UploadEventMsg
         * @instance
         */
        UploadEventMsg.prototype.type = "";

        /**
         * UploadEventMsg uploadTaskId.
         * @member {number|Long} uploadTaskId
         * @memberof file.UploadEventMsg
         * @instance
         */
        UploadEventMsg.prototype.uploadTaskId = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * UploadEventMsg localVersion.
         * @member {number|Long} localVersion
         * @memberof file.UploadEventMsg
         * @instance
         */
        UploadEventMsg.prototype.localVersion = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * UploadEventMsg uploadVersion.
         * @member {number|Long} uploadVersion
         * @memberof file.UploadEventMsg
         * @instance
         */
        UploadEventMsg.prototype.uploadVersion = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new UploadEventMsg instance using the specified properties.
         * @function create
         * @memberof file.UploadEventMsg
         * @static
         * @param {file.IUploadEventMsg=} [properties] Properties to set
         * @returns {file.UploadEventMsg} UploadEventMsg instance
         */
        UploadEventMsg.create = function create(properties) {
            return new UploadEventMsg(properties);
        };

        /**
         * Encodes the specified UploadEventMsg message. Does not implicitly {@link file.UploadEventMsg.verify|verify} messages.
         * @function encode
         * @memberof file.UploadEventMsg
         * @static
         * @param {file.IUploadEventMsg} message UploadEventMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UploadEventMsg.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.type);
            if (message.uploadTaskId != null && Object.hasOwnProperty.call(message, "uploadTaskId"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.uploadTaskId);
            if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint64(message.localVersion);
            if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion"))
                writer.uint32(/* id 4, wireType 0 =*/32).uint64(message.uploadVersion);
            return writer;
        };

        /**
         * Encodes the specified UploadEventMsg message, length delimited. Does not implicitly {@link file.UploadEventMsg.verify|verify} messages.
         * @function encodeDelimited
         * @memberof file.UploadEventMsg
         * @static
         * @param {file.IUploadEventMsg} message UploadEventMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UploadEventMsg.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an UploadEventMsg message from the specified reader or buffer.
         * @function decode
         * @memberof file.UploadEventMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {file.UploadEventMsg} UploadEventMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UploadEventMsg.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.file.UploadEventMsg();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.type = reader.string();
                        break;
                    }
                case 2: {
                        message.uploadTaskId = reader.uint64();
                        break;
                    }
                case 3: {
                        message.localVersion = reader.uint64();
                        break;
                    }
                case 4: {
                        message.uploadVersion = reader.uint64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an UploadEventMsg message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof file.UploadEventMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {file.UploadEventMsg} UploadEventMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UploadEventMsg.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an UploadEventMsg message.
         * @function verify
         * @memberof file.UploadEventMsg
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UploadEventMsg.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                if (!$util.isString(message.type))
                    return "type: string expected";
            if (message.uploadTaskId != null && Object.hasOwnProperty.call(message, "uploadTaskId"))
                if (!$util.isInteger(message.uploadTaskId) && !(message.uploadTaskId && $util.isInteger(message.uploadTaskId.low) && $util.isInteger(message.uploadTaskId.high)))
                    return "uploadTaskId: integer|Long expected";
            if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                if (!$util.isInteger(message.localVersion) && !(message.localVersion && $util.isInteger(message.localVersion.low) && $util.isInteger(message.localVersion.high)))
                    return "localVersion: integer|Long expected";
            if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion"))
                if (!$util.isInteger(message.uploadVersion) && !(message.uploadVersion && $util.isInteger(message.uploadVersion.low) && $util.isInteger(message.uploadVersion.high)))
                    return "uploadVersion: integer|Long expected";
            return null;
        };

        /**
         * Creates an UploadEventMsg message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof file.UploadEventMsg
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {file.UploadEventMsg} UploadEventMsg
         */
        UploadEventMsg.fromObject = function fromObject(object, long) {
            if (object instanceof $root.file.UploadEventMsg)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".file.UploadEventMsg: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.file.UploadEventMsg();
            if (object.type != null)
                message.type = String(object.type);
            if (object.uploadTaskId != null)
                if ($util.Long)
                    message.uploadTaskId = $util.Long.fromValue(object.uploadTaskId, true);
                else if (typeof object.uploadTaskId === "string")
                    message.uploadTaskId = parseInt(object.uploadTaskId, 10);
                else if (typeof object.uploadTaskId === "number")
                    message.uploadTaskId = object.uploadTaskId;
                else if (typeof object.uploadTaskId === "object")
                    message.uploadTaskId = new $util.LongBits(object.uploadTaskId.low >>> 0, object.uploadTaskId.high >>> 0).toNumber(true);
            if (object.localVersion != null)
                if ($util.Long)
                    message.localVersion = $util.Long.fromValue(object.localVersion, true);
                else if (typeof object.localVersion === "string")
                    message.localVersion = parseInt(object.localVersion, 10);
                else if (typeof object.localVersion === "number")
                    message.localVersion = object.localVersion;
                else if (typeof object.localVersion === "object")
                    message.localVersion = new $util.LongBits(object.localVersion.low >>> 0, object.localVersion.high >>> 0).toNumber(true);
            if (object.uploadVersion != null)
                if ($util.Long)
                    message.uploadVersion = $util.Long.fromValue(object.uploadVersion, true);
                else if (typeof object.uploadVersion === "string")
                    message.uploadVersion = parseInt(object.uploadVersion, 10);
                else if (typeof object.uploadVersion === "number")
                    message.uploadVersion = object.uploadVersion;
                else if (typeof object.uploadVersion === "object")
                    message.uploadVersion = new $util.LongBits(object.uploadVersion.low >>> 0, object.uploadVersion.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from an UploadEventMsg message. Also converts values to other types if specified.
         * @function toObject
         * @memberof file.UploadEventMsg
         * @static
         * @param {file.UploadEventMsg} message UploadEventMsg
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UploadEventMsg.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.type = "";
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.uploadTaskId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.uploadTaskId = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.localVersion = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.localVersion = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.uploadVersion = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.uploadVersion = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
            }
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                object.type = message.type;
            if (message.uploadTaskId != null && Object.hasOwnProperty.call(message, "uploadTaskId"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.uploadTaskId = typeof message.uploadTaskId === "number" ? BigInt(message.uploadTaskId) : $util.Long.fromBits(message.uploadTaskId.low >>> 0, message.uploadTaskId.high >>> 0, true).toBigInt();
                else if (typeof message.uploadTaskId === "number")
                    object.uploadTaskId = options.longs === String ? String(message.uploadTaskId) : message.uploadTaskId;
                else
                    object.uploadTaskId = options.longs === String ? $util.Long.prototype.toString.call(message.uploadTaskId) : options.longs === Number ? new $util.LongBits(message.uploadTaskId.low >>> 0, message.uploadTaskId.high >>> 0).toNumber(true) : message.uploadTaskId;
            if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.localVersion = typeof message.localVersion === "number" ? BigInt(message.localVersion) : $util.Long.fromBits(message.localVersion.low >>> 0, message.localVersion.high >>> 0, true).toBigInt();
                else if (typeof message.localVersion === "number")
                    object.localVersion = options.longs === String ? String(message.localVersion) : message.localVersion;
                else
                    object.localVersion = options.longs === String ? $util.Long.prototype.toString.call(message.localVersion) : options.longs === Number ? new $util.LongBits(message.localVersion.low >>> 0, message.localVersion.high >>> 0).toNumber(true) : message.localVersion;
            if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.uploadVersion = typeof message.uploadVersion === "number" ? BigInt(message.uploadVersion) : $util.Long.fromBits(message.uploadVersion.low >>> 0, message.uploadVersion.high >>> 0, true).toBigInt();
                else if (typeof message.uploadVersion === "number")
                    object.uploadVersion = options.longs === String ? String(message.uploadVersion) : message.uploadVersion;
                else
                    object.uploadVersion = options.longs === String ? $util.Long.prototype.toString.call(message.uploadVersion) : options.longs === Number ? new $util.LongBits(message.uploadVersion.low >>> 0, message.uploadVersion.high >>> 0).toNumber(true) : message.uploadVersion;
            return object;
        };

        /**
         * Converts this UploadEventMsg to JSON.
         * @function toJSON
         * @memberof file.UploadEventMsg
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UploadEventMsg.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for UploadEventMsg
         * @function getTypeUrl
         * @memberof file.UploadEventMsg
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        UploadEventMsg.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/file.UploadEventMsg";
        };

        return UploadEventMsg;
    })();

    return file;
})();

$root.fs = (function() {

    /**
     * Namespace fs.
     * @exports fs
     * @namespace
     */
    var fs = {};

    fs.FS = (function() {

        /**
         * Properties of a FS.
         * @memberof fs
         * @interface IFS
         * @property {string|null} [type] FS type
         * @property {boolean|null} [isVersioned] FS isVersioned
         * @property {boolean|null} [writable] FS writable
         * @property {string|null} [name] FS name
         * @property {common.IObjectReference|null} [impl] FS impl
         * @property {boolean|null} [isSynced] FS isSynced
         */

        /**
         * Constructs a new FS.
         * @memberof fs
         * @classdesc Represents a FS.
         * @implements IFS
         * @constructor
         * @param {fs.IFS=} [properties] Properties to set
         */
        function FS(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FS type.
         * @member {string} type
         * @memberof fs.FS
         * @instance
         */
        FS.prototype.type = "";

        /**
         * FS isVersioned.
         * @member {boolean} isVersioned
         * @memberof fs.FS
         * @instance
         */
        FS.prototype.isVersioned = false;

        /**
         * FS writable.
         * @member {boolean} writable
         * @memberof fs.FS
         * @instance
         */
        FS.prototype.writable = false;

        /**
         * FS name.
         * @member {string} name
         * @memberof fs.FS
         * @instance
         */
        FS.prototype.name = "";

        /**
         * FS impl.
         * @member {common.IObjectReference|null|undefined} impl
         * @memberof fs.FS
         * @instance
         */
        FS.prototype.impl = null;

        /**
         * FS isSynced.
         * @member {boolean} isSynced
         * @memberof fs.FS
         * @instance
         */
        FS.prototype.isSynced = false;

        /**
         * Creates a new FS instance using the specified properties.
         * @function create
         * @memberof fs.FS
         * @static
         * @param {fs.IFS=} [properties] Properties to set
         * @returns {fs.FS} FS instance
         */
        FS.create = function create(properties) {
            return new FS(properties);
        };

        /**
         * Encodes the specified FS message. Does not implicitly {@link fs.FS.verify|verify} messages.
         * @function encode
         * @memberof fs.FS
         * @static
         * @param {fs.IFS} message FS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FS.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.type);
            if (message.isVersioned != null && Object.hasOwnProperty.call(message, "isVersioned"))
                writer.uint32(/* id 2, wireType 0 =*/16).bool(message.isVersioned);
            if (message.writable != null && Object.hasOwnProperty.call(message, "writable"))
                writer.uint32(/* id 3, wireType 0 =*/24).bool(message.writable);
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                writer.uint32(/* id 4, wireType 2 =*/34).string(message.name);
            if (message.impl != null && Object.hasOwnProperty.call(message, "impl"))
                $root.common.ObjectReference.encode(message.impl, writer.uint32(/* id 5, wireType 2 =*/42).fork(), q + 1).ldelim();
            if (message.isSynced != null && Object.hasOwnProperty.call(message, "isSynced"))
                writer.uint32(/* id 6, wireType 0 =*/48).bool(message.isSynced);
            return writer;
        };

        /**
         * Encodes the specified FS message, length delimited. Does not implicitly {@link fs.FS.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FS
         * @static
         * @param {fs.IFS} message FS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FS.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FS message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FS} FS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FS.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FS();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.type = reader.string();
                        break;
                    }
                case 2: {
                        message.isVersioned = reader.bool();
                        break;
                    }
                case 3: {
                        message.writable = reader.bool();
                        break;
                    }
                case 4: {
                        message.name = reader.string();
                        break;
                    }
                case 5: {
                        message.impl = $root.common.ObjectReference.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 6: {
                        message.isSynced = reader.bool();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FS message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FS} FS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FS.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FS message.
         * @function verify
         * @memberof fs.FS
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FS.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                if (!$util.isString(message.type))
                    return "type: string expected";
            if (message.isVersioned != null && Object.hasOwnProperty.call(message, "isVersioned"))
                if (typeof message.isVersioned !== "boolean")
                    return "isVersioned: boolean expected";
            if (message.writable != null && Object.hasOwnProperty.call(message, "writable"))
                if (typeof message.writable !== "boolean")
                    return "writable: boolean expected";
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                if (!$util.isString(message.name))
                    return "name: string expected";
            if (message.impl != null && Object.hasOwnProperty.call(message, "impl")) {
                var error = $root.common.ObjectReference.verify(message.impl, long + 1);
                if (error)
                    return "impl." + error;
            }
            if (message.isSynced != null && Object.hasOwnProperty.call(message, "isSynced"))
                if (typeof message.isSynced !== "boolean")
                    return "isSynced: boolean expected";
            return null;
        };

        /**
         * Creates a FS message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FS
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FS} FS
         */
        FS.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FS)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FS: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FS();
            if (object.type != null)
                message.type = String(object.type);
            if (object.isVersioned != null)
                message.isVersioned = Boolean(object.isVersioned);
            if (object.writable != null)
                message.writable = Boolean(object.writable);
            if (object.name != null)
                message.name = String(object.name);
            if (object.impl != null) {
                if (!$util.isObject(object.impl))
                    throw TypeError(".fs.FS.impl: object expected");
                message.impl = $root.common.ObjectReference.fromObject(object.impl, long + 1);
            }
            if (object.isSynced != null)
                message.isSynced = Boolean(object.isSynced);
            return message;
        };

        /**
         * Creates a plain object from a FS message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FS
         * @static
         * @param {fs.FS} message FS
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FS.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.type = "";
                object.isVersioned = false;
                object.writable = false;
                object.name = "";
                object.impl = null;
                object.isSynced = false;
            }
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                object.type = message.type;
            if (message.isVersioned != null && Object.hasOwnProperty.call(message, "isVersioned"))
                object.isVersioned = message.isVersioned;
            if (message.writable != null && Object.hasOwnProperty.call(message, "writable"))
                object.writable = message.writable;
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                object.name = message.name;
            if (message.impl != null && Object.hasOwnProperty.call(message, "impl"))
                object.impl = $root.common.ObjectReference.toObject(message.impl, options, q + 1);
            if (message.isSynced != null && Object.hasOwnProperty.call(message, "isSynced"))
                object.isSynced = message.isSynced;
            return object;
        };

        /**
         * Converts this FS to JSON.
         * @function toJSON
         * @memberof fs.FS
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FS.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FS
         * @function getTypeUrl
         * @memberof fs.FS
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FS.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FS";
        };

        return FS;
    })();

    fs.CheckPresenceRequestBody = (function() {

        /**
         * Properties of a CheckPresenceRequestBody.
         * @memberof fs
         * @interface ICheckPresenceRequestBody
         * @property {string|null} [path] CheckPresenceRequestBody path
         * @property {common.IBooleanValue|null} [throwIfMissing] CheckPresenceRequestBody throwIfMissing
         */

        /**
         * Constructs a new CheckPresenceRequestBody.
         * @memberof fs
         * @classdesc Represents a CheckPresenceRequestBody.
         * @implements ICheckPresenceRequestBody
         * @constructor
         * @param {fs.ICheckPresenceRequestBody=} [properties] Properties to set
         */
        function CheckPresenceRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * CheckPresenceRequestBody path.
         * @member {string} path
         * @memberof fs.CheckPresenceRequestBody
         * @instance
         */
        CheckPresenceRequestBody.prototype.path = "";

        /**
         * CheckPresenceRequestBody throwIfMissing.
         * @member {common.IBooleanValue|null|undefined} throwIfMissing
         * @memberof fs.CheckPresenceRequestBody
         * @instance
         */
        CheckPresenceRequestBody.prototype.throwIfMissing = null;

        /**
         * Creates a new CheckPresenceRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.CheckPresenceRequestBody
         * @static
         * @param {fs.ICheckPresenceRequestBody=} [properties] Properties to set
         * @returns {fs.CheckPresenceRequestBody} CheckPresenceRequestBody instance
         */
        CheckPresenceRequestBody.create = function create(properties) {
            return new CheckPresenceRequestBody(properties);
        };

        /**
         * Encodes the specified CheckPresenceRequestBody message. Does not implicitly {@link fs.CheckPresenceRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.CheckPresenceRequestBody
         * @static
         * @param {fs.ICheckPresenceRequestBody} message CheckPresenceRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CheckPresenceRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.throwIfMissing != null && Object.hasOwnProperty.call(message, "throwIfMissing"))
                $root.common.BooleanValue.encode(message.throwIfMissing, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified CheckPresenceRequestBody message, length delimited. Does not implicitly {@link fs.CheckPresenceRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.CheckPresenceRequestBody
         * @static
         * @param {fs.ICheckPresenceRequestBody} message CheckPresenceRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CheckPresenceRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a CheckPresenceRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.CheckPresenceRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.CheckPresenceRequestBody} CheckPresenceRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CheckPresenceRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.CheckPresenceRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.throwIfMissing = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a CheckPresenceRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.CheckPresenceRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.CheckPresenceRequestBody} CheckPresenceRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CheckPresenceRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a CheckPresenceRequestBody message.
         * @function verify
         * @memberof fs.CheckPresenceRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CheckPresenceRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.throwIfMissing != null && Object.hasOwnProperty.call(message, "throwIfMissing")) {
                var error = $root.common.BooleanValue.verify(message.throwIfMissing, long + 1);
                if (error)
                    return "throwIfMissing." + error;
            }
            return null;
        };

        /**
         * Creates a CheckPresenceRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.CheckPresenceRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.CheckPresenceRequestBody} CheckPresenceRequestBody
         */
        CheckPresenceRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.CheckPresenceRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.CheckPresenceRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.CheckPresenceRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.throwIfMissing != null) {
                if (!$util.isObject(object.throwIfMissing))
                    throw TypeError(".fs.CheckPresenceRequestBody.throwIfMissing: object expected");
                message.throwIfMissing = $root.common.BooleanValue.fromObject(object.throwIfMissing, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a CheckPresenceRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.CheckPresenceRequestBody
         * @static
         * @param {fs.CheckPresenceRequestBody} message CheckPresenceRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CheckPresenceRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.throwIfMissing = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.throwIfMissing != null && Object.hasOwnProperty.call(message, "throwIfMissing"))
                object.throwIfMissing = $root.common.BooleanValue.toObject(message.throwIfMissing, options, q + 1);
            return object;
        };

        /**
         * Converts this CheckPresenceRequestBody to JSON.
         * @function toJSON
         * @memberof fs.CheckPresenceRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CheckPresenceRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for CheckPresenceRequestBody
         * @function getTypeUrl
         * @memberof fs.CheckPresenceRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        CheckPresenceRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.CheckPresenceRequestBody";
        };

        return CheckPresenceRequestBody;
    })();

    fs.PathOnlyRequestBody = (function() {

        /**
         * Properties of a PathOnlyRequestBody.
         * @memberof fs
         * @interface IPathOnlyRequestBody
         * @property {string|null} [path] PathOnlyRequestBody path
         */

        /**
         * Constructs a new PathOnlyRequestBody.
         * @memberof fs
         * @classdesc Represents a PathOnlyRequestBody.
         * @implements IPathOnlyRequestBody
         * @constructor
         * @param {fs.IPathOnlyRequestBody=} [properties] Properties to set
         */
        function PathOnlyRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * PathOnlyRequestBody path.
         * @member {string} path
         * @memberof fs.PathOnlyRequestBody
         * @instance
         */
        PathOnlyRequestBody.prototype.path = "";

        /**
         * Creates a new PathOnlyRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.PathOnlyRequestBody
         * @static
         * @param {fs.IPathOnlyRequestBody=} [properties] Properties to set
         * @returns {fs.PathOnlyRequestBody} PathOnlyRequestBody instance
         */
        PathOnlyRequestBody.create = function create(properties) {
            return new PathOnlyRequestBody(properties);
        };

        /**
         * Encodes the specified PathOnlyRequestBody message. Does not implicitly {@link fs.PathOnlyRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.PathOnlyRequestBody
         * @static
         * @param {fs.IPathOnlyRequestBody} message PathOnlyRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PathOnlyRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            return writer;
        };

        /**
         * Encodes the specified PathOnlyRequestBody message, length delimited. Does not implicitly {@link fs.PathOnlyRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.PathOnlyRequestBody
         * @static
         * @param {fs.IPathOnlyRequestBody} message PathOnlyRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PathOnlyRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a PathOnlyRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.PathOnlyRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.PathOnlyRequestBody} PathOnlyRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PathOnlyRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.PathOnlyRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a PathOnlyRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.PathOnlyRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.PathOnlyRequestBody} PathOnlyRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PathOnlyRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a PathOnlyRequestBody message.
         * @function verify
         * @memberof fs.PathOnlyRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        PathOnlyRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            return null;
        };

        /**
         * Creates a PathOnlyRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.PathOnlyRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.PathOnlyRequestBody} PathOnlyRequestBody
         */
        PathOnlyRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.PathOnlyRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.PathOnlyRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.PathOnlyRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            return message;
        };

        /**
         * Creates a plain object from a PathOnlyRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.PathOnlyRequestBody
         * @static
         * @param {fs.PathOnlyRequestBody} message PathOnlyRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        PathOnlyRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.path = "";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            return object;
        };

        /**
         * Converts this PathOnlyRequestBody to JSON.
         * @function toJSON
         * @memberof fs.PathOnlyRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        PathOnlyRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for PathOnlyRequestBody
         * @function getTypeUrl
         * @memberof fs.PathOnlyRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        PathOnlyRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.PathOnlyRequestBody";
        };

        return PathOnlyRequestBody;
    })();

    fs.GetXAttrRequestBody = (function() {

        /**
         * Properties of a GetXAttrRequestBody.
         * @memberof fs
         * @interface IGetXAttrRequestBody
         * @property {string|null} [path] GetXAttrRequestBody path
         * @property {string|null} [xaName] GetXAttrRequestBody xaName
         */

        /**
         * Constructs a new GetXAttrRequestBody.
         * @memberof fs
         * @classdesc Represents a GetXAttrRequestBody.
         * @implements IGetXAttrRequestBody
         * @constructor
         * @param {fs.IGetXAttrRequestBody=} [properties] Properties to set
         */
        function GetXAttrRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * GetXAttrRequestBody path.
         * @member {string} path
         * @memberof fs.GetXAttrRequestBody
         * @instance
         */
        GetXAttrRequestBody.prototype.path = "";

        /**
         * GetXAttrRequestBody xaName.
         * @member {string} xaName
         * @memberof fs.GetXAttrRequestBody
         * @instance
         */
        GetXAttrRequestBody.prototype.xaName = "";

        /**
         * Creates a new GetXAttrRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.GetXAttrRequestBody
         * @static
         * @param {fs.IGetXAttrRequestBody=} [properties] Properties to set
         * @returns {fs.GetXAttrRequestBody} GetXAttrRequestBody instance
         */
        GetXAttrRequestBody.create = function create(properties) {
            return new GetXAttrRequestBody(properties);
        };

        /**
         * Encodes the specified GetXAttrRequestBody message. Does not implicitly {@link fs.GetXAttrRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.GetXAttrRequestBody
         * @static
         * @param {fs.IGetXAttrRequestBody} message GetXAttrRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GetXAttrRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.xaName);
            return writer;
        };

        /**
         * Encodes the specified GetXAttrRequestBody message, length delimited. Does not implicitly {@link fs.GetXAttrRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.GetXAttrRequestBody
         * @static
         * @param {fs.IGetXAttrRequestBody} message GetXAttrRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        GetXAttrRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a GetXAttrRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.GetXAttrRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.GetXAttrRequestBody} GetXAttrRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GetXAttrRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.GetXAttrRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.xaName = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a GetXAttrRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.GetXAttrRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.GetXAttrRequestBody} GetXAttrRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        GetXAttrRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a GetXAttrRequestBody message.
         * @function verify
         * @memberof fs.GetXAttrRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        GetXAttrRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                if (!$util.isString(message.xaName))
                    return "xaName: string expected";
            return null;
        };

        /**
         * Creates a GetXAttrRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.GetXAttrRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.GetXAttrRequestBody} GetXAttrRequestBody
         */
        GetXAttrRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.GetXAttrRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.GetXAttrRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.GetXAttrRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.xaName != null)
                message.xaName = String(object.xaName);
            return message;
        };

        /**
         * Creates a plain object from a GetXAttrRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.GetXAttrRequestBody
         * @static
         * @param {fs.GetXAttrRequestBody} message GetXAttrRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        GetXAttrRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.xaName = "";
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                object.xaName = message.xaName;
            return object;
        };

        /**
         * Converts this GetXAttrRequestBody to JSON.
         * @function toJSON
         * @memberof fs.GetXAttrRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        GetXAttrRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for GetXAttrRequestBody
         * @function getTypeUrl
         * @memberof fs.GetXAttrRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        GetXAttrRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.GetXAttrRequestBody";
        };

        return GetXAttrRequestBody;
    })();

    fs.SymLink = (function() {

        /**
         * Properties of a SymLink.
         * @memberof fs
         * @interface ISymLink
         * @property {boolean|null} [readonly] SymLink readonly
         * @property {common.IBooleanValue|null} [isFile] SymLink isFile
         * @property {common.IBooleanValue|null} [isFolder] SymLink isFolder
         * @property {common.IObjectReference|null} [impl] SymLink impl
         */

        /**
         * Constructs a new SymLink.
         * @memberof fs
         * @classdesc Represents a SymLink.
         * @implements ISymLink
         * @constructor
         * @param {fs.ISymLink=} [properties] Properties to set
         */
        function SymLink(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * SymLink readonly.
         * @member {boolean} readonly
         * @memberof fs.SymLink
         * @instance
         */
        SymLink.prototype.readonly = false;

        /**
         * SymLink isFile.
         * @member {common.IBooleanValue|null|undefined} isFile
         * @memberof fs.SymLink
         * @instance
         */
        SymLink.prototype.isFile = null;

        /**
         * SymLink isFolder.
         * @member {common.IBooleanValue|null|undefined} isFolder
         * @memberof fs.SymLink
         * @instance
         */
        SymLink.prototype.isFolder = null;

        /**
         * SymLink impl.
         * @member {common.IObjectReference|null|undefined} impl
         * @memberof fs.SymLink
         * @instance
         */
        SymLink.prototype.impl = null;

        /**
         * Creates a new SymLink instance using the specified properties.
         * @function create
         * @memberof fs.SymLink
         * @static
         * @param {fs.ISymLink=} [properties] Properties to set
         * @returns {fs.SymLink} SymLink instance
         */
        SymLink.create = function create(properties) {
            return new SymLink(properties);
        };

        /**
         * Encodes the specified SymLink message. Does not implicitly {@link fs.SymLink.verify|verify} messages.
         * @function encode
         * @memberof fs.SymLink
         * @static
         * @param {fs.ISymLink} message SymLink message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SymLink.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.readonly != null && Object.hasOwnProperty.call(message, "readonly"))
                writer.uint32(/* id 1, wireType 0 =*/8).bool(message.readonly);
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile"))
                $root.common.BooleanValue.encode(message.isFile, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder"))
                $root.common.BooleanValue.encode(message.isFolder, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.impl != null && Object.hasOwnProperty.call(message, "impl"))
                $root.common.ObjectReference.encode(message.impl, writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified SymLink message, length delimited. Does not implicitly {@link fs.SymLink.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.SymLink
         * @static
         * @param {fs.ISymLink} message SymLink message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SymLink.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a SymLink message from the specified reader or buffer.
         * @function decode
         * @memberof fs.SymLink
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.SymLink} SymLink
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SymLink.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.SymLink();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.readonly = reader.bool();
                        break;
                    }
                case 2: {
                        message.isFile = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.isFolder = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 4: {
                        message.impl = $root.common.ObjectReference.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a SymLink message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.SymLink
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.SymLink} SymLink
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SymLink.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a SymLink message.
         * @function verify
         * @memberof fs.SymLink
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        SymLink.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.readonly != null && Object.hasOwnProperty.call(message, "readonly"))
                if (typeof message.readonly !== "boolean")
                    return "readonly: boolean expected";
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile")) {
                var error = $root.common.BooleanValue.verify(message.isFile, long + 1);
                if (error)
                    return "isFile." + error;
            }
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder")) {
                var error = $root.common.BooleanValue.verify(message.isFolder, long + 1);
                if (error)
                    return "isFolder." + error;
            }
            if (message.impl != null && Object.hasOwnProperty.call(message, "impl")) {
                var error = $root.common.ObjectReference.verify(message.impl, long + 1);
                if (error)
                    return "impl." + error;
            }
            return null;
        };

        /**
         * Creates a SymLink message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.SymLink
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.SymLink} SymLink
         */
        SymLink.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.SymLink)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.SymLink: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.SymLink();
            if (object.readonly != null)
                message.readonly = Boolean(object.readonly);
            if (object.isFile != null) {
                if (!$util.isObject(object.isFile))
                    throw TypeError(".fs.SymLink.isFile: object expected");
                message.isFile = $root.common.BooleanValue.fromObject(object.isFile, long + 1);
            }
            if (object.isFolder != null) {
                if (!$util.isObject(object.isFolder))
                    throw TypeError(".fs.SymLink.isFolder: object expected");
                message.isFolder = $root.common.BooleanValue.fromObject(object.isFolder, long + 1);
            }
            if (object.impl != null) {
                if (!$util.isObject(object.impl))
                    throw TypeError(".fs.SymLink.impl: object expected");
                message.impl = $root.common.ObjectReference.fromObject(object.impl, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a SymLink message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.SymLink
         * @static
         * @param {fs.SymLink} message SymLink
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        SymLink.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.readonly = false;
                object.isFile = null;
                object.isFolder = null;
                object.impl = null;
            }
            if (message.readonly != null && Object.hasOwnProperty.call(message, "readonly"))
                object.readonly = message.readonly;
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile"))
                object.isFile = $root.common.BooleanValue.toObject(message.isFile, options, q + 1);
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder"))
                object.isFolder = $root.common.BooleanValue.toObject(message.isFolder, options, q + 1);
            if (message.impl != null && Object.hasOwnProperty.call(message, "impl"))
                object.impl = $root.common.ObjectReference.toObject(message.impl, options, q + 1);
            return object;
        };

        /**
         * Converts this SymLink to JSON.
         * @function toJSON
         * @memberof fs.SymLink
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        SymLink.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for SymLink
         * @function getTypeUrl
         * @memberof fs.SymLink
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        SymLink.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.SymLink";
        };

        return SymLink;
    })();

    fs.SymLinkTargetReplyBody = (function() {

        /**
         * Properties of a SymLinkTargetReplyBody.
         * @memberof fs
         * @interface ISymLinkTargetReplyBody
         * @property {fs.IFS|null} [fs] SymLinkTargetReplyBody fs
         * @property {file.IFile|null} [file] SymLinkTargetReplyBody file
         */

        /**
         * Constructs a new SymLinkTargetReplyBody.
         * @memberof fs
         * @classdesc Represents a SymLinkTargetReplyBody.
         * @implements ISymLinkTargetReplyBody
         * @constructor
         * @param {fs.ISymLinkTargetReplyBody=} [properties] Properties to set
         */
        function SymLinkTargetReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * SymLinkTargetReplyBody fs.
         * @member {fs.IFS|null|undefined} fs
         * @memberof fs.SymLinkTargetReplyBody
         * @instance
         */
        SymLinkTargetReplyBody.prototype.fs = null;

        /**
         * SymLinkTargetReplyBody file.
         * @member {file.IFile|null|undefined} file
         * @memberof fs.SymLinkTargetReplyBody
         * @instance
         */
        SymLinkTargetReplyBody.prototype.file = null;

        /**
         * Creates a new SymLinkTargetReplyBody instance using the specified properties.
         * @function create
         * @memberof fs.SymLinkTargetReplyBody
         * @static
         * @param {fs.ISymLinkTargetReplyBody=} [properties] Properties to set
         * @returns {fs.SymLinkTargetReplyBody} SymLinkTargetReplyBody instance
         */
        SymLinkTargetReplyBody.create = function create(properties) {
            return new SymLinkTargetReplyBody(properties);
        };

        /**
         * Encodes the specified SymLinkTargetReplyBody message. Does not implicitly {@link fs.SymLinkTargetReplyBody.verify|verify} messages.
         * @function encode
         * @memberof fs.SymLinkTargetReplyBody
         * @static
         * @param {fs.ISymLinkTargetReplyBody} message SymLinkTargetReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SymLinkTargetReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.fs != null && Object.hasOwnProperty.call(message, "fs"))
                $root.fs.FS.encode(message.fs, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.file != null && Object.hasOwnProperty.call(message, "file"))
                $root.file.File.encode(message.file, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified SymLinkTargetReplyBody message, length delimited. Does not implicitly {@link fs.SymLinkTargetReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.SymLinkTargetReplyBody
         * @static
         * @param {fs.ISymLinkTargetReplyBody} message SymLinkTargetReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SymLinkTargetReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a SymLinkTargetReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.SymLinkTargetReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.SymLinkTargetReplyBody} SymLinkTargetReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SymLinkTargetReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.SymLinkTargetReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.fs = $root.fs.FS.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.file = $root.file.File.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a SymLinkTargetReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.SymLinkTargetReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.SymLinkTargetReplyBody} SymLinkTargetReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SymLinkTargetReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a SymLinkTargetReplyBody message.
         * @function verify
         * @memberof fs.SymLinkTargetReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        SymLinkTargetReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.fs != null && Object.hasOwnProperty.call(message, "fs")) {
                var error = $root.fs.FS.verify(message.fs, long + 1);
                if (error)
                    return "fs." + error;
            }
            if (message.file != null && Object.hasOwnProperty.call(message, "file")) {
                var error = $root.file.File.verify(message.file, long + 1);
                if (error)
                    return "file." + error;
            }
            return null;
        };

        /**
         * Creates a SymLinkTargetReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.SymLinkTargetReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.SymLinkTargetReplyBody} SymLinkTargetReplyBody
         */
        SymLinkTargetReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.SymLinkTargetReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.SymLinkTargetReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.SymLinkTargetReplyBody();
            if (object.fs != null) {
                if (!$util.isObject(object.fs))
                    throw TypeError(".fs.SymLinkTargetReplyBody.fs: object expected");
                message.fs = $root.fs.FS.fromObject(object.fs, long + 1);
            }
            if (object.file != null) {
                if (!$util.isObject(object.file))
                    throw TypeError(".fs.SymLinkTargetReplyBody.file: object expected");
                message.file = $root.file.File.fromObject(object.file, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a SymLinkTargetReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.SymLinkTargetReplyBody
         * @static
         * @param {fs.SymLinkTargetReplyBody} message SymLinkTargetReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        SymLinkTargetReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.fs = null;
                object.file = null;
            }
            if (message.fs != null && Object.hasOwnProperty.call(message, "fs"))
                object.fs = $root.fs.FS.toObject(message.fs, options, q + 1);
            if (message.file != null && Object.hasOwnProperty.call(message, "file"))
                object.file = $root.file.File.toObject(message.file, options, q + 1);
            return object;
        };

        /**
         * Converts this SymLinkTargetReplyBody to JSON.
         * @function toJSON
         * @memberof fs.SymLinkTargetReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        SymLinkTargetReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for SymLinkTargetReplyBody
         * @function getTypeUrl
         * @memberof fs.SymLinkTargetReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        SymLinkTargetReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.SymLinkTargetReplyBody";
        };

        return SymLinkTargetReplyBody;
    })();

    fs.WatchTreeRequestBody = (function() {

        /**
         * Properties of a WatchTreeRequestBody.
         * @memberof fs
         * @interface IWatchTreeRequestBody
         * @property {string|null} [path] WatchTreeRequestBody path
         * @property {common.IUInt32Value|null} [depth] WatchTreeRequestBody depth
         */

        /**
         * Constructs a new WatchTreeRequestBody.
         * @memberof fs
         * @classdesc Represents a WatchTreeRequestBody.
         * @implements IWatchTreeRequestBody
         * @constructor
         * @param {fs.IWatchTreeRequestBody=} [properties] Properties to set
         */
        function WatchTreeRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * WatchTreeRequestBody path.
         * @member {string} path
         * @memberof fs.WatchTreeRequestBody
         * @instance
         */
        WatchTreeRequestBody.prototype.path = "";

        /**
         * WatchTreeRequestBody depth.
         * @member {common.IUInt32Value|null|undefined} depth
         * @memberof fs.WatchTreeRequestBody
         * @instance
         */
        WatchTreeRequestBody.prototype.depth = null;

        /**
         * Creates a new WatchTreeRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.WatchTreeRequestBody
         * @static
         * @param {fs.IWatchTreeRequestBody=} [properties] Properties to set
         * @returns {fs.WatchTreeRequestBody} WatchTreeRequestBody instance
         */
        WatchTreeRequestBody.create = function create(properties) {
            return new WatchTreeRequestBody(properties);
        };

        /**
         * Encodes the specified WatchTreeRequestBody message. Does not implicitly {@link fs.WatchTreeRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.WatchTreeRequestBody
         * @static
         * @param {fs.IWatchTreeRequestBody} message WatchTreeRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WatchTreeRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.depth != null && Object.hasOwnProperty.call(message, "depth"))
                $root.common.UInt32Value.encode(message.depth, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified WatchTreeRequestBody message, length delimited. Does not implicitly {@link fs.WatchTreeRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.WatchTreeRequestBody
         * @static
         * @param {fs.IWatchTreeRequestBody} message WatchTreeRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WatchTreeRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a WatchTreeRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.WatchTreeRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.WatchTreeRequestBody} WatchTreeRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WatchTreeRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.WatchTreeRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.depth = $root.common.UInt32Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a WatchTreeRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.WatchTreeRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.WatchTreeRequestBody} WatchTreeRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WatchTreeRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a WatchTreeRequestBody message.
         * @function verify
         * @memberof fs.WatchTreeRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        WatchTreeRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.depth != null && Object.hasOwnProperty.call(message, "depth")) {
                var error = $root.common.UInt32Value.verify(message.depth, long + 1);
                if (error)
                    return "depth." + error;
            }
            return null;
        };

        /**
         * Creates a WatchTreeRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.WatchTreeRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.WatchTreeRequestBody} WatchTreeRequestBody
         */
        WatchTreeRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.WatchTreeRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.WatchTreeRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.WatchTreeRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.depth != null) {
                if (!$util.isObject(object.depth))
                    throw TypeError(".fs.WatchTreeRequestBody.depth: object expected");
                message.depth = $root.common.UInt32Value.fromObject(object.depth, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a WatchTreeRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.WatchTreeRequestBody
         * @static
         * @param {fs.WatchTreeRequestBody} message WatchTreeRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        WatchTreeRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.depth = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.depth != null && Object.hasOwnProperty.call(message, "depth"))
                object.depth = $root.common.UInt32Value.toObject(message.depth, options, q + 1);
            return object;
        };

        /**
         * Converts this WatchTreeRequestBody to JSON.
         * @function toJSON
         * @memberof fs.WatchTreeRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        WatchTreeRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for WatchTreeRequestBody
         * @function getTypeUrl
         * @memberof fs.WatchTreeRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        WatchTreeRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.WatchTreeRequestBody";
        };

        return WatchTreeRequestBody;
    })();

    fs.ListFolderReplyBody = (function() {

        /**
         * Properties of a ListFolderReplyBody.
         * @memberof fs
         * @interface IListFolderReplyBody
         * @property {Array.<fs.IListingEntryMsg>|null} [entries] ListFolderReplyBody entries
         */

        /**
         * Constructs a new ListFolderReplyBody.
         * @memberof fs
         * @classdesc Represents a ListFolderReplyBody.
         * @implements IListFolderReplyBody
         * @constructor
         * @param {fs.IListFolderReplyBody=} [properties] Properties to set
         */
        function ListFolderReplyBody(properties) {
            this.entries = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * ListFolderReplyBody entries.
         * @member {Array.<fs.IListingEntryMsg>} entries
         * @memberof fs.ListFolderReplyBody
         * @instance
         */
        ListFolderReplyBody.prototype.entries = $util.emptyArray;

        /**
         * Creates a new ListFolderReplyBody instance using the specified properties.
         * @function create
         * @memberof fs.ListFolderReplyBody
         * @static
         * @param {fs.IListFolderReplyBody=} [properties] Properties to set
         * @returns {fs.ListFolderReplyBody} ListFolderReplyBody instance
         */
        ListFolderReplyBody.create = function create(properties) {
            return new ListFolderReplyBody(properties);
        };

        /**
         * Encodes the specified ListFolderReplyBody message. Does not implicitly {@link fs.ListFolderReplyBody.verify|verify} messages.
         * @function encode
         * @memberof fs.ListFolderReplyBody
         * @static
         * @param {fs.IListFolderReplyBody} message ListFolderReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ListFolderReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.entries != null && message.entries.length)
                for (var i = 0; i < message.entries.length; ++i)
                    $root.fs.ListingEntryMsg.encode(message.entries[i], writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified ListFolderReplyBody message, length delimited. Does not implicitly {@link fs.ListFolderReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.ListFolderReplyBody
         * @static
         * @param {fs.IListFolderReplyBody} message ListFolderReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ListFolderReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a ListFolderReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.ListFolderReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.ListFolderReplyBody} ListFolderReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ListFolderReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.ListFolderReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        if (!(message.entries && message.entries.length))
                            message.entries = [];
                        message.entries.push($root.fs.ListingEntryMsg.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a ListFolderReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.ListFolderReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.ListFolderReplyBody} ListFolderReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ListFolderReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a ListFolderReplyBody message.
         * @function verify
         * @memberof fs.ListFolderReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        ListFolderReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.entries != null && Object.hasOwnProperty.call(message, "entries")) {
                if (!Array.isArray(message.entries))
                    return "entries: array expected";
                for (var i = 0; i < message.entries.length; ++i) {
                    var error = $root.fs.ListingEntryMsg.verify(message.entries[i], long + 1);
                    if (error)
                        return "entries." + error;
                }
            }
            return null;
        };

        /**
         * Creates a ListFolderReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.ListFolderReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.ListFolderReplyBody} ListFolderReplyBody
         */
        ListFolderReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.ListFolderReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.ListFolderReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.ListFolderReplyBody();
            if (object.entries) {
                if (!Array.isArray(object.entries))
                    throw TypeError(".fs.ListFolderReplyBody.entries: array expected");
                message.entries = [];
                for (var i = 0; i < object.entries.length; ++i) {
                    if (!$util.isObject(object.entries[i]))
                        throw TypeError(".fs.ListFolderReplyBody.entries: object expected");
                    message.entries[i] = $root.fs.ListingEntryMsg.fromObject(object.entries[i], long + 1);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from a ListFolderReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.ListFolderReplyBody
         * @static
         * @param {fs.ListFolderReplyBody} message ListFolderReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        ListFolderReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.entries = [];
            if (message.entries && message.entries.length) {
                object.entries = [];
                for (var j = 0; j < message.entries.length; ++j)
                    object.entries[j] = $root.fs.ListingEntryMsg.toObject(message.entries[j], options, q + 1);
            }
            return object;
        };

        /**
         * Converts this ListFolderReplyBody to JSON.
         * @function toJSON
         * @memberof fs.ListFolderReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        ListFolderReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for ListFolderReplyBody
         * @function getTypeUrl
         * @memberof fs.ListFolderReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        ListFolderReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.ListFolderReplyBody";
        };

        return ListFolderReplyBody;
    })();

    fs.ListingEntryMsg = (function() {

        /**
         * Properties of a ListingEntryMsg.
         * @memberof fs
         * @interface IListingEntryMsg
         * @property {string|null} [name] ListingEntryMsg name
         * @property {common.IBooleanValue|null} [isFile] ListingEntryMsg isFile
         * @property {common.IBooleanValue|null} [isFolder] ListingEntryMsg isFolder
         * @property {common.IBooleanValue|null} [isLink] ListingEntryMsg isLink
         */

        /**
         * Constructs a new ListingEntryMsg.
         * @memberof fs
         * @classdesc Represents a ListingEntryMsg.
         * @implements IListingEntryMsg
         * @constructor
         * @param {fs.IListingEntryMsg=} [properties] Properties to set
         */
        function ListingEntryMsg(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * ListingEntryMsg name.
         * @member {string} name
         * @memberof fs.ListingEntryMsg
         * @instance
         */
        ListingEntryMsg.prototype.name = "";

        /**
         * ListingEntryMsg isFile.
         * @member {common.IBooleanValue|null|undefined} isFile
         * @memberof fs.ListingEntryMsg
         * @instance
         */
        ListingEntryMsg.prototype.isFile = null;

        /**
         * ListingEntryMsg isFolder.
         * @member {common.IBooleanValue|null|undefined} isFolder
         * @memberof fs.ListingEntryMsg
         * @instance
         */
        ListingEntryMsg.prototype.isFolder = null;

        /**
         * ListingEntryMsg isLink.
         * @member {common.IBooleanValue|null|undefined} isLink
         * @memberof fs.ListingEntryMsg
         * @instance
         */
        ListingEntryMsg.prototype.isLink = null;

        /**
         * Creates a new ListingEntryMsg instance using the specified properties.
         * @function create
         * @memberof fs.ListingEntryMsg
         * @static
         * @param {fs.IListingEntryMsg=} [properties] Properties to set
         * @returns {fs.ListingEntryMsg} ListingEntryMsg instance
         */
        ListingEntryMsg.create = function create(properties) {
            return new ListingEntryMsg(properties);
        };

        /**
         * Encodes the specified ListingEntryMsg message. Does not implicitly {@link fs.ListingEntryMsg.verify|verify} messages.
         * @function encode
         * @memberof fs.ListingEntryMsg
         * @static
         * @param {fs.IListingEntryMsg} message ListingEntryMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ListingEntryMsg.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile"))
                $root.common.BooleanValue.encode(message.isFile, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder"))
                $root.common.BooleanValue.encode(message.isFolder, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.isLink != null && Object.hasOwnProperty.call(message, "isLink"))
                $root.common.BooleanValue.encode(message.isLink, writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified ListingEntryMsg message, length delimited. Does not implicitly {@link fs.ListingEntryMsg.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.ListingEntryMsg
         * @static
         * @param {fs.IListingEntryMsg} message ListingEntryMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ListingEntryMsg.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a ListingEntryMsg message from the specified reader or buffer.
         * @function decode
         * @memberof fs.ListingEntryMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.ListingEntryMsg} ListingEntryMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ListingEntryMsg.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.ListingEntryMsg();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.name = reader.string();
                        break;
                    }
                case 2: {
                        message.isFile = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.isFolder = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 4: {
                        message.isLink = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a ListingEntryMsg message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.ListingEntryMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.ListingEntryMsg} ListingEntryMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ListingEntryMsg.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a ListingEntryMsg message.
         * @function verify
         * @memberof fs.ListingEntryMsg
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        ListingEntryMsg.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                if (!$util.isString(message.name))
                    return "name: string expected";
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile")) {
                var error = $root.common.BooleanValue.verify(message.isFile, long + 1);
                if (error)
                    return "isFile." + error;
            }
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder")) {
                var error = $root.common.BooleanValue.verify(message.isFolder, long + 1);
                if (error)
                    return "isFolder." + error;
            }
            if (message.isLink != null && Object.hasOwnProperty.call(message, "isLink")) {
                var error = $root.common.BooleanValue.verify(message.isLink, long + 1);
                if (error)
                    return "isLink." + error;
            }
            return null;
        };

        /**
         * Creates a ListingEntryMsg message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.ListingEntryMsg
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.ListingEntryMsg} ListingEntryMsg
         */
        ListingEntryMsg.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.ListingEntryMsg)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.ListingEntryMsg: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.ListingEntryMsg();
            if (object.name != null)
                message.name = String(object.name);
            if (object.isFile != null) {
                if (!$util.isObject(object.isFile))
                    throw TypeError(".fs.ListingEntryMsg.isFile: object expected");
                message.isFile = $root.common.BooleanValue.fromObject(object.isFile, long + 1);
            }
            if (object.isFolder != null) {
                if (!$util.isObject(object.isFolder))
                    throw TypeError(".fs.ListingEntryMsg.isFolder: object expected");
                message.isFolder = $root.common.BooleanValue.fromObject(object.isFolder, long + 1);
            }
            if (object.isLink != null) {
                if (!$util.isObject(object.isLink))
                    throw TypeError(".fs.ListingEntryMsg.isLink: object expected");
                message.isLink = $root.common.BooleanValue.fromObject(object.isLink, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a ListingEntryMsg message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.ListingEntryMsg
         * @static
         * @param {fs.ListingEntryMsg} message ListingEntryMsg
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        ListingEntryMsg.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.name = "";
                object.isFile = null;
                object.isFolder = null;
                object.isLink = null;
            }
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                object.name = message.name;
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile"))
                object.isFile = $root.common.BooleanValue.toObject(message.isFile, options, q + 1);
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder"))
                object.isFolder = $root.common.BooleanValue.toObject(message.isFolder, options, q + 1);
            if (message.isLink != null && Object.hasOwnProperty.call(message, "isLink"))
                object.isLink = $root.common.BooleanValue.toObject(message.isLink, options, q + 1);
            return object;
        };

        /**
         * Converts this ListingEntryMsg to JSON.
         * @function toJSON
         * @memberof fs.ListingEntryMsg
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        ListingEntryMsg.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for ListingEntryMsg
         * @function getTypeUrl
         * @memberof fs.ListingEntryMsg
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        ListingEntryMsg.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.ListingEntryMsg";
        };

        return ListingEntryMsg;
    })();

    fs.ReadBytesRequestBody = (function() {

        /**
         * Properties of a ReadBytesRequestBody.
         * @memberof fs
         * @interface IReadBytesRequestBody
         * @property {string|null} [path] ReadBytesRequestBody path
         * @property {common.IUInt64Value|null} [start] ReadBytesRequestBody start
         * @property {common.IUInt64Value|null} [end] ReadBytesRequestBody end
         */

        /**
         * Constructs a new ReadBytesRequestBody.
         * @memberof fs
         * @classdesc Represents a ReadBytesRequestBody.
         * @implements IReadBytesRequestBody
         * @constructor
         * @param {fs.IReadBytesRequestBody=} [properties] Properties to set
         */
        function ReadBytesRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * ReadBytesRequestBody path.
         * @member {string} path
         * @memberof fs.ReadBytesRequestBody
         * @instance
         */
        ReadBytesRequestBody.prototype.path = "";

        /**
         * ReadBytesRequestBody start.
         * @member {common.IUInt64Value|null|undefined} start
         * @memberof fs.ReadBytesRequestBody
         * @instance
         */
        ReadBytesRequestBody.prototype.start = null;

        /**
         * ReadBytesRequestBody end.
         * @member {common.IUInt64Value|null|undefined} end
         * @memberof fs.ReadBytesRequestBody
         * @instance
         */
        ReadBytesRequestBody.prototype.end = null;

        /**
         * Creates a new ReadBytesRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.ReadBytesRequestBody
         * @static
         * @param {fs.IReadBytesRequestBody=} [properties] Properties to set
         * @returns {fs.ReadBytesRequestBody} ReadBytesRequestBody instance
         */
        ReadBytesRequestBody.create = function create(properties) {
            return new ReadBytesRequestBody(properties);
        };

        /**
         * Encodes the specified ReadBytesRequestBody message. Does not implicitly {@link fs.ReadBytesRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.ReadBytesRequestBody
         * @static
         * @param {fs.IReadBytesRequestBody} message ReadBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ReadBytesRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.start != null && Object.hasOwnProperty.call(message, "start"))
                $root.common.UInt64Value.encode(message.start, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.end != null && Object.hasOwnProperty.call(message, "end"))
                $root.common.UInt64Value.encode(message.end, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified ReadBytesRequestBody message, length delimited. Does not implicitly {@link fs.ReadBytesRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.ReadBytesRequestBody
         * @static
         * @param {fs.IReadBytesRequestBody} message ReadBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ReadBytesRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a ReadBytesRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.ReadBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.ReadBytesRequestBody} ReadBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ReadBytesRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.ReadBytesRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.start = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.end = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a ReadBytesRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.ReadBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.ReadBytesRequestBody} ReadBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ReadBytesRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a ReadBytesRequestBody message.
         * @function verify
         * @memberof fs.ReadBytesRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        ReadBytesRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.start != null && Object.hasOwnProperty.call(message, "start")) {
                var error = $root.common.UInt64Value.verify(message.start, long + 1);
                if (error)
                    return "start." + error;
            }
            if (message.end != null && Object.hasOwnProperty.call(message, "end")) {
                var error = $root.common.UInt64Value.verify(message.end, long + 1);
                if (error)
                    return "end." + error;
            }
            return null;
        };

        /**
         * Creates a ReadBytesRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.ReadBytesRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.ReadBytesRequestBody} ReadBytesRequestBody
         */
        ReadBytesRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.ReadBytesRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.ReadBytesRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.ReadBytesRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.start != null) {
                if (!$util.isObject(object.start))
                    throw TypeError(".fs.ReadBytesRequestBody.start: object expected");
                message.start = $root.common.UInt64Value.fromObject(object.start, long + 1);
            }
            if (object.end != null) {
                if (!$util.isObject(object.end))
                    throw TypeError(".fs.ReadBytesRequestBody.end: object expected");
                message.end = $root.common.UInt64Value.fromObject(object.end, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a ReadBytesRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.ReadBytesRequestBody
         * @static
         * @param {fs.ReadBytesRequestBody} message ReadBytesRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        ReadBytesRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.start = null;
                object.end = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.start != null && Object.hasOwnProperty.call(message, "start"))
                object.start = $root.common.UInt64Value.toObject(message.start, options, q + 1);
            if (message.end != null && Object.hasOwnProperty.call(message, "end"))
                object.end = $root.common.UInt64Value.toObject(message.end, options, q + 1);
            return object;
        };

        /**
         * Converts this ReadBytesRequestBody to JSON.
         * @function toJSON
         * @memberof fs.ReadBytesRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        ReadBytesRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for ReadBytesRequestBody
         * @function getTypeUrl
         * @memberof fs.ReadBytesRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        ReadBytesRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.ReadBytesRequestBody";
        };

        return ReadBytesRequestBody;
    })();

    fs.SelectRequestBody = (function() {

        /**
         * Properties of a SelectRequestBody.
         * @memberof fs
         * @interface ISelectRequestBody
         * @property {string|null} [path] SelectRequestBody path
         * @property {fs.SelectRequestBody.ISelectCriteria|null} [criteria] SelectRequestBody criteria
         */

        /**
         * Constructs a new SelectRequestBody.
         * @memberof fs
         * @classdesc Represents a SelectRequestBody.
         * @implements ISelectRequestBody
         * @constructor
         * @param {fs.ISelectRequestBody=} [properties] Properties to set
         */
        function SelectRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * SelectRequestBody path.
         * @member {string} path
         * @memberof fs.SelectRequestBody
         * @instance
         */
        SelectRequestBody.prototype.path = "";

        /**
         * SelectRequestBody criteria.
         * @member {fs.SelectRequestBody.ISelectCriteria|null|undefined} criteria
         * @memberof fs.SelectRequestBody
         * @instance
         */
        SelectRequestBody.prototype.criteria = null;

        /**
         * Creates a new SelectRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.SelectRequestBody
         * @static
         * @param {fs.ISelectRequestBody=} [properties] Properties to set
         * @returns {fs.SelectRequestBody} SelectRequestBody instance
         */
        SelectRequestBody.create = function create(properties) {
            return new SelectRequestBody(properties);
        };

        /**
         * Encodes the specified SelectRequestBody message. Does not implicitly {@link fs.SelectRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.SelectRequestBody
         * @static
         * @param {fs.ISelectRequestBody} message SelectRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SelectRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.criteria != null && Object.hasOwnProperty.call(message, "criteria"))
                $root.fs.SelectRequestBody.SelectCriteria.encode(message.criteria, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified SelectRequestBody message, length delimited. Does not implicitly {@link fs.SelectRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.SelectRequestBody
         * @static
         * @param {fs.ISelectRequestBody} message SelectRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SelectRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a SelectRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.SelectRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.SelectRequestBody} SelectRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SelectRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.SelectRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.criteria = $root.fs.SelectRequestBody.SelectCriteria.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a SelectRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.SelectRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.SelectRequestBody} SelectRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SelectRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a SelectRequestBody message.
         * @function verify
         * @memberof fs.SelectRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        SelectRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.criteria != null && Object.hasOwnProperty.call(message, "criteria")) {
                var error = $root.fs.SelectRequestBody.SelectCriteria.verify(message.criteria, long + 1);
                if (error)
                    return "criteria." + error;
            }
            return null;
        };

        /**
         * Creates a SelectRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.SelectRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.SelectRequestBody} SelectRequestBody
         */
        SelectRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.SelectRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.SelectRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.SelectRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.criteria != null) {
                if (!$util.isObject(object.criteria))
                    throw TypeError(".fs.SelectRequestBody.criteria: object expected");
                message.criteria = $root.fs.SelectRequestBody.SelectCriteria.fromObject(object.criteria, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a SelectRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.SelectRequestBody
         * @static
         * @param {fs.SelectRequestBody} message SelectRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        SelectRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.criteria = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.criteria != null && Object.hasOwnProperty.call(message, "criteria"))
                object.criteria = $root.fs.SelectRequestBody.SelectCriteria.toObject(message.criteria, options, q + 1);
            return object;
        };

        /**
         * Converts this SelectRequestBody to JSON.
         * @function toJSON
         * @memberof fs.SelectRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        SelectRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for SelectRequestBody
         * @function getTypeUrl
         * @memberof fs.SelectRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        SelectRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.SelectRequestBody";
        };

        SelectRequestBody.SelectCriteria = (function() {

            /**
             * Properties of a SelectCriteria.
             * @memberof fs.SelectRequestBody
             * @interface ISelectCriteria
             * @property {common.IStringValue|null} [exactName] SelectCriteria exactName
             * @property {common.IStringValue|null} [pattern] SelectCriteria pattern
             * @property {common.IStringValue|null} [regexp] SelectCriteria regexp
             * @property {common.IUInt32Value|null} [depth] SelectCriteria depth
             * @property {Array.<string>|null} [type] SelectCriteria type
             * @property {string|null} [action] SelectCriteria action
             */

            /**
             * Constructs a new SelectCriteria.
             * @memberof fs.SelectRequestBody
             * @classdesc Represents a SelectCriteria.
             * @implements ISelectCriteria
             * @constructor
             * @param {fs.SelectRequestBody.ISelectCriteria=} [properties] Properties to set
             */
            function SelectCriteria(properties) {
                this.type = [];
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                            this[keys[i]] = properties[keys[i]];
            }

            /**
             * SelectCriteria exactName.
             * @member {common.IStringValue|null|undefined} exactName
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @instance
             */
            SelectCriteria.prototype.exactName = null;

            /**
             * SelectCriteria pattern.
             * @member {common.IStringValue|null|undefined} pattern
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @instance
             */
            SelectCriteria.prototype.pattern = null;

            /**
             * SelectCriteria regexp.
             * @member {common.IStringValue|null|undefined} regexp
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @instance
             */
            SelectCriteria.prototype.regexp = null;

            /**
             * SelectCriteria depth.
             * @member {common.IUInt32Value|null|undefined} depth
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @instance
             */
            SelectCriteria.prototype.depth = null;

            /**
             * SelectCriteria type.
             * @member {Array.<string>} type
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @instance
             */
            SelectCriteria.prototype.type = $util.emptyArray;

            /**
             * SelectCriteria action.
             * @member {string} action
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @instance
             */
            SelectCriteria.prototype.action = "";

            /**
             * Creates a new SelectCriteria instance using the specified properties.
             * @function create
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @static
             * @param {fs.SelectRequestBody.ISelectCriteria=} [properties] Properties to set
             * @returns {fs.SelectRequestBody.SelectCriteria} SelectCriteria instance
             */
            SelectCriteria.create = function create(properties) {
                return new SelectCriteria(properties);
            };

            /**
             * Encodes the specified SelectCriteria message. Does not implicitly {@link fs.SelectRequestBody.SelectCriteria.verify|verify} messages.
             * @function encode
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @static
             * @param {fs.SelectRequestBody.ISelectCriteria} message SelectCriteria message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            SelectCriteria.encode = function encode(message, writer, q) {
                if (!writer)
                    writer = $Writer.create();
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                if (message.exactName != null && Object.hasOwnProperty.call(message, "exactName"))
                    $root.common.StringValue.encode(message.exactName, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
                if (message.pattern != null && Object.hasOwnProperty.call(message, "pattern"))
                    $root.common.StringValue.encode(message.pattern, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
                if (message.regexp != null && Object.hasOwnProperty.call(message, "regexp"))
                    $root.common.StringValue.encode(message.regexp, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
                if (message.depth != null && Object.hasOwnProperty.call(message, "depth"))
                    $root.common.UInt32Value.encode(message.depth, writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
                if (message.type != null && message.type.length)
                    for (var i = 0; i < message.type.length; ++i)
                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.type[i]);
                if (message.action != null && Object.hasOwnProperty.call(message, "action"))
                    writer.uint32(/* id 6, wireType 2 =*/50).string(message.action);
                return writer;
            };

            /**
             * Encodes the specified SelectCriteria message, length delimited. Does not implicitly {@link fs.SelectRequestBody.SelectCriteria.verify|verify} messages.
             * @function encodeDelimited
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @static
             * @param {fs.SelectRequestBody.ISelectCriteria} message SelectCriteria message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            SelectCriteria.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
            };

            /**
             * Decodes a SelectCriteria message from the specified reader or buffer.
             * @function decode
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {fs.SelectRequestBody.SelectCriteria} SelectCriteria
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            SelectCriteria.decode = function decode(reader, length, error, long) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                if (long === undefined)
                    long = 0;
                if (long > $Reader.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.SelectRequestBody.SelectCriteria();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    if (tag === error)
                        break;
                    switch (tag >>> 3) {
                    case 1: {
                            message.exactName = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 2: {
                            message.pattern = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 3: {
                            message.regexp = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 4: {
                            message.depth = $root.common.UInt32Value.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 5: {
                            if (!(message.type && message.type.length))
                                message.type = [];
                            message.type.push(reader.string());
                            break;
                        }
                    case 6: {
                            message.action = reader.string();
                            break;
                        }
                    default:
                        reader.skipType(tag & 7, long);
                        break;
                    }
                }
                return message;
            };

            /**
             * Decodes a SelectCriteria message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {fs.SelectRequestBody.SelectCriteria} SelectCriteria
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            SelectCriteria.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };

            /**
             * Verifies a SelectCriteria message.
             * @function verify
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            SelectCriteria.verify = function verify(message, long) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    return "maximum nesting depth exceeded";
                if (message.exactName != null && Object.hasOwnProperty.call(message, "exactName")) {
                    var error = $root.common.StringValue.verify(message.exactName, long + 1);
                    if (error)
                        return "exactName." + error;
                }
                if (message.pattern != null && Object.hasOwnProperty.call(message, "pattern")) {
                    var error = $root.common.StringValue.verify(message.pattern, long + 1);
                    if (error)
                        return "pattern." + error;
                }
                if (message.regexp != null && Object.hasOwnProperty.call(message, "regexp")) {
                    var error = $root.common.StringValue.verify(message.regexp, long + 1);
                    if (error)
                        return "regexp." + error;
                }
                if (message.depth != null && Object.hasOwnProperty.call(message, "depth")) {
                    var error = $root.common.UInt32Value.verify(message.depth, long + 1);
                    if (error)
                        return "depth." + error;
                }
                if (message.type != null && Object.hasOwnProperty.call(message, "type")) {
                    if (!Array.isArray(message.type))
                        return "type: array expected";
                    for (var i = 0; i < message.type.length; ++i)
                        if (!$util.isString(message.type[i]))
                            return "type: string[] expected";
                }
                if (message.action != null && Object.hasOwnProperty.call(message, "action"))
                    if (!$util.isString(message.action))
                        return "action: string expected";
                return null;
            };

            /**
             * Creates a SelectCriteria message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {fs.SelectRequestBody.SelectCriteria} SelectCriteria
             */
            SelectCriteria.fromObject = function fromObject(object, long) {
                if (object instanceof $root.fs.SelectRequestBody.SelectCriteria)
                    return object;
                if (!$util.isObject(object))
                    throw TypeError(".fs.SelectRequestBody.SelectCriteria: object expected");
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var message = new $root.fs.SelectRequestBody.SelectCriteria();
                if (object.exactName != null) {
                    if (!$util.isObject(object.exactName))
                        throw TypeError(".fs.SelectRequestBody.SelectCriteria.exactName: object expected");
                    message.exactName = $root.common.StringValue.fromObject(object.exactName, long + 1);
                }
                if (object.pattern != null) {
                    if (!$util.isObject(object.pattern))
                        throw TypeError(".fs.SelectRequestBody.SelectCriteria.pattern: object expected");
                    message.pattern = $root.common.StringValue.fromObject(object.pattern, long + 1);
                }
                if (object.regexp != null) {
                    if (!$util.isObject(object.regexp))
                        throw TypeError(".fs.SelectRequestBody.SelectCriteria.regexp: object expected");
                    message.regexp = $root.common.StringValue.fromObject(object.regexp, long + 1);
                }
                if (object.depth != null) {
                    if (!$util.isObject(object.depth))
                        throw TypeError(".fs.SelectRequestBody.SelectCriteria.depth: object expected");
                    message.depth = $root.common.UInt32Value.fromObject(object.depth, long + 1);
                }
                if (object.type) {
                    if (!Array.isArray(object.type))
                        throw TypeError(".fs.SelectRequestBody.SelectCriteria.type: array expected");
                    message.type = [];
                    for (var i = 0; i < object.type.length; ++i)
                        message.type[i] = String(object.type[i]);
                }
                if (object.action != null)
                    message.action = String(object.action);
                return message;
            };

            /**
             * Creates a plain object from a SelectCriteria message. Also converts values to other types if specified.
             * @function toObject
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @static
             * @param {fs.SelectRequestBody.SelectCriteria} message SelectCriteria
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            SelectCriteria.toObject = function toObject(message, options, q) {
                if (!options)
                    options = {};
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                var object = {};
                if (options.arrays || options.defaults)
                    object.type = [];
                if (options.defaults) {
                    object.exactName = null;
                    object.pattern = null;
                    object.regexp = null;
                    object.depth = null;
                    object.action = "";
                }
                if (message.exactName != null && Object.hasOwnProperty.call(message, "exactName"))
                    object.exactName = $root.common.StringValue.toObject(message.exactName, options, q + 1);
                if (message.pattern != null && Object.hasOwnProperty.call(message, "pattern"))
                    object.pattern = $root.common.StringValue.toObject(message.pattern, options, q + 1);
                if (message.regexp != null && Object.hasOwnProperty.call(message, "regexp"))
                    object.regexp = $root.common.StringValue.toObject(message.regexp, options, q + 1);
                if (message.depth != null && Object.hasOwnProperty.call(message, "depth"))
                    object.depth = $root.common.UInt32Value.toObject(message.depth, options, q + 1);
                if (message.type && message.type.length) {
                    object.type = [];
                    for (var j = 0; j < message.type.length; ++j)
                        object.type[j] = message.type[j];
                }
                if (message.action != null && Object.hasOwnProperty.call(message, "action"))
                    object.action = message.action;
                return object;
            };

            /**
             * Converts this SelectCriteria to JSON.
             * @function toJSON
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            SelectCriteria.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };

            /**
             * Gets the default type url for SelectCriteria
             * @function getTypeUrl
             * @memberof fs.SelectRequestBody.SelectCriteria
             * @static
             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns {string} The default type url
             */
            SelectCriteria.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
                if (typeUrlPrefix === undefined) {
                    typeUrlPrefix = "type.googleapis.com";
                }
                return typeUrlPrefix + "/fs.SelectRequestBody.SelectCriteria";
            };

            return SelectCriteria;
        })();

        return SelectRequestBody;
    })();

    fs.FSCGetRequestBody = (function() {

        /**
         * Properties of a FSCGetRequestBody.
         * @memberof fs
         * @interface IFSCGetRequestBody
         * @property {string|null} [name] FSCGetRequestBody name
         */

        /**
         * Constructs a new FSCGetRequestBody.
         * @memberof fs
         * @classdesc Represents a FSCGetRequestBody.
         * @implements IFSCGetRequestBody
         * @constructor
         * @param {fs.IFSCGetRequestBody=} [properties] Properties to set
         */
        function FSCGetRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FSCGetRequestBody name.
         * @member {string} name
         * @memberof fs.FSCGetRequestBody
         * @instance
         */
        FSCGetRequestBody.prototype.name = "";

        /**
         * Creates a new FSCGetRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.FSCGetRequestBody
         * @static
         * @param {fs.IFSCGetRequestBody=} [properties] Properties to set
         * @returns {fs.FSCGetRequestBody} FSCGetRequestBody instance
         */
        FSCGetRequestBody.create = function create(properties) {
            return new FSCGetRequestBody(properties);
        };

        /**
         * Encodes the specified FSCGetRequestBody message. Does not implicitly {@link fs.FSCGetRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.FSCGetRequestBody
         * @static
         * @param {fs.IFSCGetRequestBody} message FSCGetRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSCGetRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
            return writer;
        };

        /**
         * Encodes the specified FSCGetRequestBody message, length delimited. Does not implicitly {@link fs.FSCGetRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FSCGetRequestBody
         * @static
         * @param {fs.IFSCGetRequestBody} message FSCGetRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSCGetRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FSCGetRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FSCGetRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FSCGetRequestBody} FSCGetRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSCGetRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FSCGetRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.name = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FSCGetRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FSCGetRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FSCGetRequestBody} FSCGetRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSCGetRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FSCGetRequestBody message.
         * @function verify
         * @memberof fs.FSCGetRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FSCGetRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                if (!$util.isString(message.name))
                    return "name: string expected";
            return null;
        };

        /**
         * Creates a FSCGetRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FSCGetRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FSCGetRequestBody} FSCGetRequestBody
         */
        FSCGetRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FSCGetRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FSCGetRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FSCGetRequestBody();
            if (object.name != null)
                message.name = String(object.name);
            return message;
        };

        /**
         * Creates a plain object from a FSCGetRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FSCGetRequestBody
         * @static
         * @param {fs.FSCGetRequestBody} message FSCGetRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FSCGetRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.name = "";
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                object.name = message.name;
            return object;
        };

        /**
         * Converts this FSCGetRequestBody to JSON.
         * @function toJSON
         * @memberof fs.FSCGetRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FSCGetRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FSCGetRequestBody
         * @function getTypeUrl
         * @memberof fs.FSCGetRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FSCGetRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FSCGetRequestBody";
        };

        return FSCGetRequestBody;
    })();

    fs.FSCGetReplyBody = (function() {

        /**
         * Properties of a FSCGetReplyBody.
         * @memberof fs
         * @interface IFSCGetReplyBody
         * @property {fs.IFSItem|null} [item] FSCGetReplyBody item
         */

        /**
         * Constructs a new FSCGetReplyBody.
         * @memberof fs
         * @classdesc Represents a FSCGetReplyBody.
         * @implements IFSCGetReplyBody
         * @constructor
         * @param {fs.IFSCGetReplyBody=} [properties] Properties to set
         */
        function FSCGetReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FSCGetReplyBody item.
         * @member {fs.IFSItem|null|undefined} item
         * @memberof fs.FSCGetReplyBody
         * @instance
         */
        FSCGetReplyBody.prototype.item = null;

        /**
         * Creates a new FSCGetReplyBody instance using the specified properties.
         * @function create
         * @memberof fs.FSCGetReplyBody
         * @static
         * @param {fs.IFSCGetReplyBody=} [properties] Properties to set
         * @returns {fs.FSCGetReplyBody} FSCGetReplyBody instance
         */
        FSCGetReplyBody.create = function create(properties) {
            return new FSCGetReplyBody(properties);
        };

        /**
         * Encodes the specified FSCGetReplyBody message. Does not implicitly {@link fs.FSCGetReplyBody.verify|verify} messages.
         * @function encode
         * @memberof fs.FSCGetReplyBody
         * @static
         * @param {fs.IFSCGetReplyBody} message FSCGetReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSCGetReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.item != null && Object.hasOwnProperty.call(message, "item"))
                $root.fs.FSItem.encode(message.item, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified FSCGetReplyBody message, length delimited. Does not implicitly {@link fs.FSCGetReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FSCGetReplyBody
         * @static
         * @param {fs.IFSCGetReplyBody} message FSCGetReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSCGetReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FSCGetReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FSCGetReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FSCGetReplyBody} FSCGetReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSCGetReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FSCGetReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.item = $root.fs.FSItem.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FSCGetReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FSCGetReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FSCGetReplyBody} FSCGetReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSCGetReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FSCGetReplyBody message.
         * @function verify
         * @memberof fs.FSCGetReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FSCGetReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.item != null && Object.hasOwnProperty.call(message, "item")) {
                var error = $root.fs.FSItem.verify(message.item, long + 1);
                if (error)
                    return "item." + error;
            }
            return null;
        };

        /**
         * Creates a FSCGetReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FSCGetReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FSCGetReplyBody} FSCGetReplyBody
         */
        FSCGetReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FSCGetReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FSCGetReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FSCGetReplyBody();
            if (object.item != null) {
                if (!$util.isObject(object.item))
                    throw TypeError(".fs.FSCGetReplyBody.item: object expected");
                message.item = $root.fs.FSItem.fromObject(object.item, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a FSCGetReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FSCGetReplyBody
         * @static
         * @param {fs.FSCGetReplyBody} message FSCGetReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FSCGetReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.item = null;
            if (message.item != null && Object.hasOwnProperty.call(message, "item"))
                object.item = $root.fs.FSItem.toObject(message.item, options, q + 1);
            return object;
        };

        /**
         * Converts this FSCGetReplyBody to JSON.
         * @function toJSON
         * @memberof fs.FSCGetReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FSCGetReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FSCGetReplyBody
         * @function getTypeUrl
         * @memberof fs.FSCGetReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FSCGetReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FSCGetReplyBody";
        };

        return FSCGetReplyBody;
    })();

    fs.FSItem = (function() {

        /**
         * Properties of a FSItem.
         * @memberof fs
         * @interface IFSItem
         * @property {common.IBooleanValue|null} [isFile] FSItem isFile
         * @property {common.IBooleanValue|null} [isFolder] FSItem isFolder
         * @property {common.IBooleanValue|null} [isLink] FSItem isLink
         * @property {common.IBooleanValue|null} [isCollection] FSItem isCollection
         * @property {fs.FSItem.IItem|null} [item] FSItem item
         * @property {fs.FSItem.ILocation|null} [location] FSItem location
         */

        /**
         * Constructs a new FSItem.
         * @memberof fs
         * @classdesc Represents a FSItem.
         * @implements IFSItem
         * @constructor
         * @param {fs.IFSItem=} [properties] Properties to set
         */
        function FSItem(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FSItem isFile.
         * @member {common.IBooleanValue|null|undefined} isFile
         * @memberof fs.FSItem
         * @instance
         */
        FSItem.prototype.isFile = null;

        /**
         * FSItem isFolder.
         * @member {common.IBooleanValue|null|undefined} isFolder
         * @memberof fs.FSItem
         * @instance
         */
        FSItem.prototype.isFolder = null;

        /**
         * FSItem isLink.
         * @member {common.IBooleanValue|null|undefined} isLink
         * @memberof fs.FSItem
         * @instance
         */
        FSItem.prototype.isLink = null;

        /**
         * FSItem isCollection.
         * @member {common.IBooleanValue|null|undefined} isCollection
         * @memberof fs.FSItem
         * @instance
         */
        FSItem.prototype.isCollection = null;

        /**
         * FSItem item.
         * @member {fs.FSItem.IItem|null|undefined} item
         * @memberof fs.FSItem
         * @instance
         */
        FSItem.prototype.item = null;

        /**
         * FSItem location.
         * @member {fs.FSItem.ILocation|null|undefined} location
         * @memberof fs.FSItem
         * @instance
         */
        FSItem.prototype.location = null;

        /**
         * Creates a new FSItem instance using the specified properties.
         * @function create
         * @memberof fs.FSItem
         * @static
         * @param {fs.IFSItem=} [properties] Properties to set
         * @returns {fs.FSItem} FSItem instance
         */
        FSItem.create = function create(properties) {
            return new FSItem(properties);
        };

        /**
         * Encodes the specified FSItem message. Does not implicitly {@link fs.FSItem.verify|verify} messages.
         * @function encode
         * @memberof fs.FSItem
         * @static
         * @param {fs.IFSItem} message FSItem message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSItem.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile"))
                $root.common.BooleanValue.encode(message.isFile, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder"))
                $root.common.BooleanValue.encode(message.isFolder, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.isLink != null && Object.hasOwnProperty.call(message, "isLink"))
                $root.common.BooleanValue.encode(message.isLink, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.isCollection != null && Object.hasOwnProperty.call(message, "isCollection"))
                $root.common.BooleanValue.encode(message.isCollection, writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
            if (message.item != null && Object.hasOwnProperty.call(message, "item"))
                $root.fs.FSItem.Item.encode(message.item, writer.uint32(/* id 5, wireType 2 =*/42).fork(), q + 1).ldelim();
            if (message.location != null && Object.hasOwnProperty.call(message, "location"))
                $root.fs.FSItem.Location.encode(message.location, writer.uint32(/* id 6, wireType 2 =*/50).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified FSItem message, length delimited. Does not implicitly {@link fs.FSItem.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FSItem
         * @static
         * @param {fs.IFSItem} message FSItem message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSItem.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FSItem message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FSItem
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FSItem} FSItem
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSItem.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FSItem();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.isFile = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.isFolder = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.isLink = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 4: {
                        message.isCollection = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 5: {
                        message.item = $root.fs.FSItem.Item.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 6: {
                        message.location = $root.fs.FSItem.Location.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FSItem message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FSItem
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FSItem} FSItem
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSItem.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FSItem message.
         * @function verify
         * @memberof fs.FSItem
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FSItem.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile")) {
                var error = $root.common.BooleanValue.verify(message.isFile, long + 1);
                if (error)
                    return "isFile." + error;
            }
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder")) {
                var error = $root.common.BooleanValue.verify(message.isFolder, long + 1);
                if (error)
                    return "isFolder." + error;
            }
            if (message.isLink != null && Object.hasOwnProperty.call(message, "isLink")) {
                var error = $root.common.BooleanValue.verify(message.isLink, long + 1);
                if (error)
                    return "isLink." + error;
            }
            if (message.isCollection != null && Object.hasOwnProperty.call(message, "isCollection")) {
                var error = $root.common.BooleanValue.verify(message.isCollection, long + 1);
                if (error)
                    return "isCollection." + error;
            }
            if (message.item != null && Object.hasOwnProperty.call(message, "item")) {
                var error = $root.fs.FSItem.Item.verify(message.item, long + 1);
                if (error)
                    return "item." + error;
            }
            if (message.location != null && Object.hasOwnProperty.call(message, "location")) {
                var error = $root.fs.FSItem.Location.verify(message.location, long + 1);
                if (error)
                    return "location." + error;
            }
            return null;
        };

        /**
         * Creates a FSItem message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FSItem
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FSItem} FSItem
         */
        FSItem.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FSItem)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FSItem: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FSItem();
            if (object.isFile != null) {
                if (!$util.isObject(object.isFile))
                    throw TypeError(".fs.FSItem.isFile: object expected");
                message.isFile = $root.common.BooleanValue.fromObject(object.isFile, long + 1);
            }
            if (object.isFolder != null) {
                if (!$util.isObject(object.isFolder))
                    throw TypeError(".fs.FSItem.isFolder: object expected");
                message.isFolder = $root.common.BooleanValue.fromObject(object.isFolder, long + 1);
            }
            if (object.isLink != null) {
                if (!$util.isObject(object.isLink))
                    throw TypeError(".fs.FSItem.isLink: object expected");
                message.isLink = $root.common.BooleanValue.fromObject(object.isLink, long + 1);
            }
            if (object.isCollection != null) {
                if (!$util.isObject(object.isCollection))
                    throw TypeError(".fs.FSItem.isCollection: object expected");
                message.isCollection = $root.common.BooleanValue.fromObject(object.isCollection, long + 1);
            }
            if (object.item != null) {
                if (!$util.isObject(object.item))
                    throw TypeError(".fs.FSItem.item: object expected");
                message.item = $root.fs.FSItem.Item.fromObject(object.item, long + 1);
            }
            if (object.location != null) {
                if (!$util.isObject(object.location))
                    throw TypeError(".fs.FSItem.location: object expected");
                message.location = $root.fs.FSItem.Location.fromObject(object.location, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a FSItem message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FSItem
         * @static
         * @param {fs.FSItem} message FSItem
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FSItem.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.isFile = null;
                object.isFolder = null;
                object.isLink = null;
                object.isCollection = null;
                object.item = null;
                object.location = null;
            }
            if (message.isFile != null && Object.hasOwnProperty.call(message, "isFile"))
                object.isFile = $root.common.BooleanValue.toObject(message.isFile, options, q + 1);
            if (message.isFolder != null && Object.hasOwnProperty.call(message, "isFolder"))
                object.isFolder = $root.common.BooleanValue.toObject(message.isFolder, options, q + 1);
            if (message.isLink != null && Object.hasOwnProperty.call(message, "isLink"))
                object.isLink = $root.common.BooleanValue.toObject(message.isLink, options, q + 1);
            if (message.isCollection != null && Object.hasOwnProperty.call(message, "isCollection"))
                object.isCollection = $root.common.BooleanValue.toObject(message.isCollection, options, q + 1);
            if (message.item != null && Object.hasOwnProperty.call(message, "item"))
                object.item = $root.fs.FSItem.Item.toObject(message.item, options, q + 1);
            if (message.location != null && Object.hasOwnProperty.call(message, "location"))
                object.location = $root.fs.FSItem.Location.toObject(message.location, options, q + 1);
            return object;
        };

        /**
         * Converts this FSItem to JSON.
         * @function toJSON
         * @memberof fs.FSItem
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FSItem.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FSItem
         * @function getTypeUrl
         * @memberof fs.FSItem
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FSItem.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FSItem";
        };

        FSItem.Location = (function() {

            /**
             * Properties of a Location.
             * @memberof fs.FSItem
             * @interface ILocation
             * @property {fs.IFS|null} [fs] Location fs
             * @property {string|null} [path] Location path
             * @property {string|null} [storageUse] Location storageUse
             * @property {string|null} [storageType] Location storageType
             */

            /**
             * Constructs a new Location.
             * @memberof fs.FSItem
             * @classdesc Represents a Location.
             * @implements ILocation
             * @constructor
             * @param {fs.FSItem.ILocation=} [properties] Properties to set
             */
            function Location(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                            this[keys[i]] = properties[keys[i]];
            }

            /**
             * Location fs.
             * @member {fs.IFS|null|undefined} fs
             * @memberof fs.FSItem.Location
             * @instance
             */
            Location.prototype.fs = null;

            /**
             * Location path.
             * @member {string} path
             * @memberof fs.FSItem.Location
             * @instance
             */
            Location.prototype.path = "";

            /**
             * Location storageUse.
             * @member {string} storageUse
             * @memberof fs.FSItem.Location
             * @instance
             */
            Location.prototype.storageUse = "";

            /**
             * Location storageType.
             * @member {string} storageType
             * @memberof fs.FSItem.Location
             * @instance
             */
            Location.prototype.storageType = "";

            /**
             * Creates a new Location instance using the specified properties.
             * @function create
             * @memberof fs.FSItem.Location
             * @static
             * @param {fs.FSItem.ILocation=} [properties] Properties to set
             * @returns {fs.FSItem.Location} Location instance
             */
            Location.create = function create(properties) {
                return new Location(properties);
            };

            /**
             * Encodes the specified Location message. Does not implicitly {@link fs.FSItem.Location.verify|verify} messages.
             * @function encode
             * @memberof fs.FSItem.Location
             * @static
             * @param {fs.FSItem.ILocation} message Location message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Location.encode = function encode(message, writer, q) {
                if (!writer)
                    writer = $Writer.create();
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                if (message.fs != null && Object.hasOwnProperty.call(message, "fs"))
                    $root.fs.FS.encode(message.fs, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
                if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.path);
                if (message.storageUse != null && Object.hasOwnProperty.call(message, "storageUse"))
                    writer.uint32(/* id 3, wireType 2 =*/26).string(message.storageUse);
                if (message.storageType != null && Object.hasOwnProperty.call(message, "storageType"))
                    writer.uint32(/* id 4, wireType 2 =*/34).string(message.storageType);
                return writer;
            };

            /**
             * Encodes the specified Location message, length delimited. Does not implicitly {@link fs.FSItem.Location.verify|verify} messages.
             * @function encodeDelimited
             * @memberof fs.FSItem.Location
             * @static
             * @param {fs.FSItem.ILocation} message Location message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Location.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
            };

            /**
             * Decodes a Location message from the specified reader or buffer.
             * @function decode
             * @memberof fs.FSItem.Location
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {fs.FSItem.Location} Location
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Location.decode = function decode(reader, length, error, long) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                if (long === undefined)
                    long = 0;
                if (long > $Reader.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FSItem.Location();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    if (tag === error)
                        break;
                    switch (tag >>> 3) {
                    case 1: {
                            message.fs = $root.fs.FS.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 2: {
                            message.path = reader.string();
                            break;
                        }
                    case 3: {
                            message.storageUse = reader.string();
                            break;
                        }
                    case 4: {
                            message.storageType = reader.string();
                            break;
                        }
                    default:
                        reader.skipType(tag & 7, long);
                        break;
                    }
                }
                return message;
            };

            /**
             * Decodes a Location message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof fs.FSItem.Location
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {fs.FSItem.Location} Location
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Location.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };

            /**
             * Verifies a Location message.
             * @function verify
             * @memberof fs.FSItem.Location
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            Location.verify = function verify(message, long) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    return "maximum nesting depth exceeded";
                if (message.fs != null && Object.hasOwnProperty.call(message, "fs")) {
                    var error = $root.fs.FS.verify(message.fs, long + 1);
                    if (error)
                        return "fs." + error;
                }
                if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                    if (!$util.isString(message.path))
                        return "path: string expected";
                if (message.storageUse != null && Object.hasOwnProperty.call(message, "storageUse"))
                    if (!$util.isString(message.storageUse))
                        return "storageUse: string expected";
                if (message.storageType != null && Object.hasOwnProperty.call(message, "storageType"))
                    if (!$util.isString(message.storageType))
                        return "storageType: string expected";
                return null;
            };

            /**
             * Creates a Location message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof fs.FSItem.Location
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {fs.FSItem.Location} Location
             */
            Location.fromObject = function fromObject(object, long) {
                if (object instanceof $root.fs.FSItem.Location)
                    return object;
                if (!$util.isObject(object))
                    throw TypeError(".fs.FSItem.Location: object expected");
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var message = new $root.fs.FSItem.Location();
                if (object.fs != null) {
                    if (!$util.isObject(object.fs))
                        throw TypeError(".fs.FSItem.Location.fs: object expected");
                    message.fs = $root.fs.FS.fromObject(object.fs, long + 1);
                }
                if (object.path != null)
                    message.path = String(object.path);
                if (object.storageUse != null)
                    message.storageUse = String(object.storageUse);
                if (object.storageType != null)
                    message.storageType = String(object.storageType);
                return message;
            };

            /**
             * Creates a plain object from a Location message. Also converts values to other types if specified.
             * @function toObject
             * @memberof fs.FSItem.Location
             * @static
             * @param {fs.FSItem.Location} message Location
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            Location.toObject = function toObject(message, options, q) {
                if (!options)
                    options = {};
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                var object = {};
                if (options.defaults) {
                    object.fs = null;
                    object.path = "";
                    object.storageUse = "";
                    object.storageType = "";
                }
                if (message.fs != null && Object.hasOwnProperty.call(message, "fs"))
                    object.fs = $root.fs.FS.toObject(message.fs, options, q + 1);
                if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                    object.path = message.path;
                if (message.storageUse != null && Object.hasOwnProperty.call(message, "storageUse"))
                    object.storageUse = message.storageUse;
                if (message.storageType != null && Object.hasOwnProperty.call(message, "storageType"))
                    object.storageType = message.storageType;
                return object;
            };

            /**
             * Converts this Location to JSON.
             * @function toJSON
             * @memberof fs.FSItem.Location
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            Location.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };

            /**
             * Gets the default type url for Location
             * @function getTypeUrl
             * @memberof fs.FSItem.Location
             * @static
             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns {string} The default type url
             */
            Location.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
                if (typeUrlPrefix === undefined) {
                    typeUrlPrefix = "type.googleapis.com";
                }
                return typeUrlPrefix + "/fs.FSItem.Location";
            };

            return Location;
        })();

        FSItem.Item = (function() {

            /**
             * Properties of an Item.
             * @memberof fs.FSItem
             * @interface IItem
             * @property {fs.IFS|null} [fs] Item fs
             * @property {file.IFile|null} [file] Item file
             * @property {common.IObjectReference|null} [collection] Item collection
             */

            /**
             * Constructs a new Item.
             * @memberof fs.FSItem
             * @classdesc Represents an Item.
             * @implements IItem
             * @constructor
             * @param {fs.FSItem.IItem=} [properties] Properties to set
             */
            function Item(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                            this[keys[i]] = properties[keys[i]];
            }

            /**
             * Item fs.
             * @member {fs.IFS|null|undefined} fs
             * @memberof fs.FSItem.Item
             * @instance
             */
            Item.prototype.fs = null;

            /**
             * Item file.
             * @member {file.IFile|null|undefined} file
             * @memberof fs.FSItem.Item
             * @instance
             */
            Item.prototype.file = null;

            /**
             * Item collection.
             * @member {common.IObjectReference|null|undefined} collection
             * @memberof fs.FSItem.Item
             * @instance
             */
            Item.prototype.collection = null;

            /**
             * Creates a new Item instance using the specified properties.
             * @function create
             * @memberof fs.FSItem.Item
             * @static
             * @param {fs.FSItem.IItem=} [properties] Properties to set
             * @returns {fs.FSItem.Item} Item instance
             */
            Item.create = function create(properties) {
                return new Item(properties);
            };

            /**
             * Encodes the specified Item message. Does not implicitly {@link fs.FSItem.Item.verify|verify} messages.
             * @function encode
             * @memberof fs.FSItem.Item
             * @static
             * @param {fs.FSItem.IItem} message Item message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Item.encode = function encode(message, writer, q) {
                if (!writer)
                    writer = $Writer.create();
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                if (message.fs != null && Object.hasOwnProperty.call(message, "fs"))
                    $root.fs.FS.encode(message.fs, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
                if (message.file != null && Object.hasOwnProperty.call(message, "file"))
                    $root.file.File.encode(message.file, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
                if (message.collection != null && Object.hasOwnProperty.call(message, "collection"))
                    $root.common.ObjectReference.encode(message.collection, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
                return writer;
            };

            /**
             * Encodes the specified Item message, length delimited. Does not implicitly {@link fs.FSItem.Item.verify|verify} messages.
             * @function encodeDelimited
             * @memberof fs.FSItem.Item
             * @static
             * @param {fs.FSItem.IItem} message Item message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Item.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
            };

            /**
             * Decodes an Item message from the specified reader or buffer.
             * @function decode
             * @memberof fs.FSItem.Item
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {fs.FSItem.Item} Item
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Item.decode = function decode(reader, length, error, long) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                if (long === undefined)
                    long = 0;
                if (long > $Reader.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FSItem.Item();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    if (tag === error)
                        break;
                    switch (tag >>> 3) {
                    case 1: {
                            message.fs = $root.fs.FS.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 2: {
                            message.file = $root.file.File.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 3: {
                            message.collection = $root.common.ObjectReference.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    default:
                        reader.skipType(tag & 7, long);
                        break;
                    }
                }
                return message;
            };

            /**
             * Decodes an Item message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof fs.FSItem.Item
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {fs.FSItem.Item} Item
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Item.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };

            /**
             * Verifies an Item message.
             * @function verify
             * @memberof fs.FSItem.Item
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            Item.verify = function verify(message, long) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    return "maximum nesting depth exceeded";
                if (message.fs != null && Object.hasOwnProperty.call(message, "fs")) {
                    var error = $root.fs.FS.verify(message.fs, long + 1);
                    if (error)
                        return "fs." + error;
                }
                if (message.file != null && Object.hasOwnProperty.call(message, "file")) {
                    var error = $root.file.File.verify(message.file, long + 1);
                    if (error)
                        return "file." + error;
                }
                if (message.collection != null && Object.hasOwnProperty.call(message, "collection")) {
                    var error = $root.common.ObjectReference.verify(message.collection, long + 1);
                    if (error)
                        return "collection." + error;
                }
                return null;
            };

            /**
             * Creates an Item message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof fs.FSItem.Item
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {fs.FSItem.Item} Item
             */
            Item.fromObject = function fromObject(object, long) {
                if (object instanceof $root.fs.FSItem.Item)
                    return object;
                if (!$util.isObject(object))
                    throw TypeError(".fs.FSItem.Item: object expected");
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var message = new $root.fs.FSItem.Item();
                if (object.fs != null) {
                    if (!$util.isObject(object.fs))
                        throw TypeError(".fs.FSItem.Item.fs: object expected");
                    message.fs = $root.fs.FS.fromObject(object.fs, long + 1);
                }
                if (object.file != null) {
                    if (!$util.isObject(object.file))
                        throw TypeError(".fs.FSItem.Item.file: object expected");
                    message.file = $root.file.File.fromObject(object.file, long + 1);
                }
                if (object.collection != null) {
                    if (!$util.isObject(object.collection))
                        throw TypeError(".fs.FSItem.Item.collection: object expected");
                    message.collection = $root.common.ObjectReference.fromObject(object.collection, long + 1);
                }
                return message;
            };

            /**
             * Creates a plain object from an Item message. Also converts values to other types if specified.
             * @function toObject
             * @memberof fs.FSItem.Item
             * @static
             * @param {fs.FSItem.Item} message Item
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            Item.toObject = function toObject(message, options, q) {
                if (!options)
                    options = {};
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                var object = {};
                if (options.defaults) {
                    object.fs = null;
                    object.file = null;
                    object.collection = null;
                }
                if (message.fs != null && Object.hasOwnProperty.call(message, "fs"))
                    object.fs = $root.fs.FS.toObject(message.fs, options, q + 1);
                if (message.file != null && Object.hasOwnProperty.call(message, "file"))
                    object.file = $root.file.File.toObject(message.file, options, q + 1);
                if (message.collection != null && Object.hasOwnProperty.call(message, "collection"))
                    object.collection = $root.common.ObjectReference.toObject(message.collection, options, q + 1);
                return object;
            };

            /**
             * Converts this Item to JSON.
             * @function toJSON
             * @memberof fs.FSItem.Item
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            Item.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };

            /**
             * Gets the default type url for Item
             * @function getTypeUrl
             * @memberof fs.FSItem.Item
             * @static
             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns {string} The default type url
             */
            Item.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
                if (typeUrlPrefix === undefined) {
                    typeUrlPrefix = "type.googleapis.com";
                }
                return typeUrlPrefix + "/fs.FSItem.Item";
            };

            return Item;
        })();

        return FSItem;
    })();

    fs.FSCGetAllReplyBody = (function() {

        /**
         * Properties of a FSCGetAllReplyBody.
         * @memberof fs
         * @interface IFSCGetAllReplyBody
         * @property {Array.<fs.INameAndItem>|null} [items] FSCGetAllReplyBody items
         */

        /**
         * Constructs a new FSCGetAllReplyBody.
         * @memberof fs
         * @classdesc Represents a FSCGetAllReplyBody.
         * @implements IFSCGetAllReplyBody
         * @constructor
         * @param {fs.IFSCGetAllReplyBody=} [properties] Properties to set
         */
        function FSCGetAllReplyBody(properties) {
            this.items = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FSCGetAllReplyBody items.
         * @member {Array.<fs.INameAndItem>} items
         * @memberof fs.FSCGetAllReplyBody
         * @instance
         */
        FSCGetAllReplyBody.prototype.items = $util.emptyArray;

        /**
         * Creates a new FSCGetAllReplyBody instance using the specified properties.
         * @function create
         * @memberof fs.FSCGetAllReplyBody
         * @static
         * @param {fs.IFSCGetAllReplyBody=} [properties] Properties to set
         * @returns {fs.FSCGetAllReplyBody} FSCGetAllReplyBody instance
         */
        FSCGetAllReplyBody.create = function create(properties) {
            return new FSCGetAllReplyBody(properties);
        };

        /**
         * Encodes the specified FSCGetAllReplyBody message. Does not implicitly {@link fs.FSCGetAllReplyBody.verify|verify} messages.
         * @function encode
         * @memberof fs.FSCGetAllReplyBody
         * @static
         * @param {fs.IFSCGetAllReplyBody} message FSCGetAllReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSCGetAllReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.items != null && message.items.length)
                for (var i = 0; i < message.items.length; ++i)
                    $root.fs.NameAndItem.encode(message.items[i], writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified FSCGetAllReplyBody message, length delimited. Does not implicitly {@link fs.FSCGetAllReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FSCGetAllReplyBody
         * @static
         * @param {fs.IFSCGetAllReplyBody} message FSCGetAllReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSCGetAllReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FSCGetAllReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FSCGetAllReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FSCGetAllReplyBody} FSCGetAllReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSCGetAllReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FSCGetAllReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        if (!(message.items && message.items.length))
                            message.items = [];
                        message.items.push($root.fs.NameAndItem.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FSCGetAllReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FSCGetAllReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FSCGetAllReplyBody} FSCGetAllReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSCGetAllReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FSCGetAllReplyBody message.
         * @function verify
         * @memberof fs.FSCGetAllReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FSCGetAllReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.items != null && Object.hasOwnProperty.call(message, "items")) {
                if (!Array.isArray(message.items))
                    return "items: array expected";
                for (var i = 0; i < message.items.length; ++i) {
                    var error = $root.fs.NameAndItem.verify(message.items[i], long + 1);
                    if (error)
                        return "items." + error;
                }
            }
            return null;
        };

        /**
         * Creates a FSCGetAllReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FSCGetAllReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FSCGetAllReplyBody} FSCGetAllReplyBody
         */
        FSCGetAllReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FSCGetAllReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FSCGetAllReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FSCGetAllReplyBody();
            if (object.items) {
                if (!Array.isArray(object.items))
                    throw TypeError(".fs.FSCGetAllReplyBody.items: array expected");
                message.items = [];
                for (var i = 0; i < object.items.length; ++i) {
                    if (!$util.isObject(object.items[i]))
                        throw TypeError(".fs.FSCGetAllReplyBody.items: object expected");
                    message.items[i] = $root.fs.NameAndItem.fromObject(object.items[i], long + 1);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from a FSCGetAllReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FSCGetAllReplyBody
         * @static
         * @param {fs.FSCGetAllReplyBody} message FSCGetAllReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FSCGetAllReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.items = [];
            if (message.items && message.items.length) {
                object.items = [];
                for (var j = 0; j < message.items.length; ++j)
                    object.items[j] = $root.fs.NameAndItem.toObject(message.items[j], options, q + 1);
            }
            return object;
        };

        /**
         * Converts this FSCGetAllReplyBody to JSON.
         * @function toJSON
         * @memberof fs.FSCGetAllReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FSCGetAllReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FSCGetAllReplyBody
         * @function getTypeUrl
         * @memberof fs.FSCGetAllReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FSCGetAllReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FSCGetAllReplyBody";
        };

        return FSCGetAllReplyBody;
    })();

    fs.NameAndItem = (function() {

        /**
         * Properties of a NameAndItem.
         * @memberof fs
         * @interface INameAndItem
         * @property {string|null} [name] NameAndItem name
         * @property {fs.IFSItem|null} [item] NameAndItem item
         */

        /**
         * Constructs a new NameAndItem.
         * @memberof fs
         * @classdesc Represents a NameAndItem.
         * @implements INameAndItem
         * @constructor
         * @param {fs.INameAndItem=} [properties] Properties to set
         */
        function NameAndItem(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * NameAndItem name.
         * @member {string} name
         * @memberof fs.NameAndItem
         * @instance
         */
        NameAndItem.prototype.name = "";

        /**
         * NameAndItem item.
         * @member {fs.IFSItem|null|undefined} item
         * @memberof fs.NameAndItem
         * @instance
         */
        NameAndItem.prototype.item = null;

        /**
         * Creates a new NameAndItem instance using the specified properties.
         * @function create
         * @memberof fs.NameAndItem
         * @static
         * @param {fs.INameAndItem=} [properties] Properties to set
         * @returns {fs.NameAndItem} NameAndItem instance
         */
        NameAndItem.create = function create(properties) {
            return new NameAndItem(properties);
        };

        /**
         * Encodes the specified NameAndItem message. Does not implicitly {@link fs.NameAndItem.verify|verify} messages.
         * @function encode
         * @memberof fs.NameAndItem
         * @static
         * @param {fs.INameAndItem} message NameAndItem message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        NameAndItem.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
            if (message.item != null && Object.hasOwnProperty.call(message, "item"))
                $root.fs.FSItem.encode(message.item, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified NameAndItem message, length delimited. Does not implicitly {@link fs.NameAndItem.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.NameAndItem
         * @static
         * @param {fs.INameAndItem} message NameAndItem message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        NameAndItem.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a NameAndItem message from the specified reader or buffer.
         * @function decode
         * @memberof fs.NameAndItem
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.NameAndItem} NameAndItem
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        NameAndItem.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.NameAndItem();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.name = reader.string();
                        break;
                    }
                case 2: {
                        message.item = $root.fs.FSItem.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a NameAndItem message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.NameAndItem
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.NameAndItem} NameAndItem
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        NameAndItem.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a NameAndItem message.
         * @function verify
         * @memberof fs.NameAndItem
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        NameAndItem.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                if (!$util.isString(message.name))
                    return "name: string expected";
            if (message.item != null && Object.hasOwnProperty.call(message, "item")) {
                var error = $root.fs.FSItem.verify(message.item, long + 1);
                if (error)
                    return "item." + error;
            }
            return null;
        };

        /**
         * Creates a NameAndItem message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.NameAndItem
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.NameAndItem} NameAndItem
         */
        NameAndItem.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.NameAndItem)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.NameAndItem: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.NameAndItem();
            if (object.name != null)
                message.name = String(object.name);
            if (object.item != null) {
                if (!$util.isObject(object.item))
                    throw TypeError(".fs.NameAndItem.item: object expected");
                message.item = $root.fs.FSItem.fromObject(object.item, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a NameAndItem message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.NameAndItem
         * @static
         * @param {fs.NameAndItem} message NameAndItem
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        NameAndItem.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.name = "";
                object.item = null;
            }
            if (message.name != null && Object.hasOwnProperty.call(message, "name"))
                object.name = message.name;
            if (message.item != null && Object.hasOwnProperty.call(message, "item"))
                object.item = $root.fs.FSItem.toObject(message.item, options, q + 1);
            return object;
        };

        /**
         * Converts this NameAndItem to JSON.
         * @function toJSON
         * @memberof fs.NameAndItem
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        NameAndItem.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for NameAndItem
         * @function getTypeUrl
         * @memberof fs.NameAndItem
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        NameAndItem.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.NameAndItem";
        };

        return NameAndItem;
    })();

    fs.IterResMsg = (function() {

        /**
         * Properties of an IterResMsg.
         * @memberof fs
         * @interface IIterResMsg
         * @property {common.IBooleanValue|null} [done] IterResMsg done
         * @property {fs.INameAndItem|null} [value] IterResMsg value
         */

        /**
         * Constructs a new IterResMsg.
         * @memberof fs
         * @classdesc Represents an IterResMsg.
         * @implements IIterResMsg
         * @constructor
         * @param {fs.IIterResMsg=} [properties] Properties to set
         */
        function IterResMsg(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * IterResMsg done.
         * @member {common.IBooleanValue|null|undefined} done
         * @memberof fs.IterResMsg
         * @instance
         */
        IterResMsg.prototype.done = null;

        /**
         * IterResMsg value.
         * @member {fs.INameAndItem|null|undefined} value
         * @memberof fs.IterResMsg
         * @instance
         */
        IterResMsg.prototype.value = null;

        /**
         * Creates a new IterResMsg instance using the specified properties.
         * @function create
         * @memberof fs.IterResMsg
         * @static
         * @param {fs.IIterResMsg=} [properties] Properties to set
         * @returns {fs.IterResMsg} IterResMsg instance
         */
        IterResMsg.create = function create(properties) {
            return new IterResMsg(properties);
        };

        /**
         * Encodes the specified IterResMsg message. Does not implicitly {@link fs.IterResMsg.verify|verify} messages.
         * @function encode
         * @memberof fs.IterResMsg
         * @static
         * @param {fs.IIterResMsg} message IterResMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        IterResMsg.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.done != null && Object.hasOwnProperty.call(message, "done"))
                $root.common.BooleanValue.encode(message.done, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                $root.fs.NameAndItem.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified IterResMsg message, length delimited. Does not implicitly {@link fs.IterResMsg.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.IterResMsg
         * @static
         * @param {fs.IIterResMsg} message IterResMsg message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        IterResMsg.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an IterResMsg message from the specified reader or buffer.
         * @function decode
         * @memberof fs.IterResMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.IterResMsg} IterResMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        IterResMsg.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.IterResMsg();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.done = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.value = $root.fs.NameAndItem.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an IterResMsg message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.IterResMsg
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.IterResMsg} IterResMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        IterResMsg.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an IterResMsg message.
         * @function verify
         * @memberof fs.IterResMsg
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        IterResMsg.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.done != null && Object.hasOwnProperty.call(message, "done")) {
                var error = $root.common.BooleanValue.verify(message.done, long + 1);
                if (error)
                    return "done." + error;
            }
            if (message.value != null && Object.hasOwnProperty.call(message, "value")) {
                var error = $root.fs.NameAndItem.verify(message.value, long + 1);
                if (error)
                    return "value." + error;
            }
            return null;
        };

        /**
         * Creates an IterResMsg message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.IterResMsg
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.IterResMsg} IterResMsg
         */
        IterResMsg.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.IterResMsg)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.IterResMsg: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.IterResMsg();
            if (object.done != null) {
                if (!$util.isObject(object.done))
                    throw TypeError(".fs.IterResMsg.done: object expected");
                message.done = $root.common.BooleanValue.fromObject(object.done, long + 1);
            }
            if (object.value != null) {
                if (!$util.isObject(object.value))
                    throw TypeError(".fs.IterResMsg.value: object expected");
                message.value = $root.fs.NameAndItem.fromObject(object.value, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an IterResMsg message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.IterResMsg
         * @static
         * @param {fs.IterResMsg} message IterResMsg
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        IterResMsg.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.done = null;
                object.value = null;
            }
            if (message.done != null && Object.hasOwnProperty.call(message, "done"))
                object.done = $root.common.BooleanValue.toObject(message.done, options, q + 1);
            if (message.value != null && Object.hasOwnProperty.call(message, "value"))
                object.value = $root.fs.NameAndItem.toObject(message.value, options, q + 1);
            return object;
        };

        /**
         * Converts this IterResMsg to JSON.
         * @function toJSON
         * @memberof fs.IterResMsg
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        IterResMsg.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for IterResMsg
         * @function getTypeUrl
         * @memberof fs.IterResMsg
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        IterResMsg.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.IterResMsg";
        };

        return IterResMsg;
    })();

    fs.CollectionEvent = (function() {

        /**
         * Properties of a CollectionEvent.
         * @memberof fs
         * @interface ICollectionEvent
         * @property {string|null} [type] CollectionEvent type
         * @property {common.IStringValue|null} [path] CollectionEvent path
         * @property {fs.IFSItem|null} [item] CollectionEvent item
         */

        /**
         * Constructs a new CollectionEvent.
         * @memberof fs
         * @classdesc Represents a CollectionEvent.
         * @implements ICollectionEvent
         * @constructor
         * @param {fs.ICollectionEvent=} [properties] Properties to set
         */
        function CollectionEvent(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * CollectionEvent type.
         * @member {string} type
         * @memberof fs.CollectionEvent
         * @instance
         */
        CollectionEvent.prototype.type = "";

        /**
         * CollectionEvent path.
         * @member {common.IStringValue|null|undefined} path
         * @memberof fs.CollectionEvent
         * @instance
         */
        CollectionEvent.prototype.path = null;

        /**
         * CollectionEvent item.
         * @member {fs.IFSItem|null|undefined} item
         * @memberof fs.CollectionEvent
         * @instance
         */
        CollectionEvent.prototype.item = null;

        /**
         * Creates a new CollectionEvent instance using the specified properties.
         * @function create
         * @memberof fs.CollectionEvent
         * @static
         * @param {fs.ICollectionEvent=} [properties] Properties to set
         * @returns {fs.CollectionEvent} CollectionEvent instance
         */
        CollectionEvent.create = function create(properties) {
            return new CollectionEvent(properties);
        };

        /**
         * Encodes the specified CollectionEvent message. Does not implicitly {@link fs.CollectionEvent.verify|verify} messages.
         * @function encode
         * @memberof fs.CollectionEvent
         * @static
         * @param {fs.ICollectionEvent} message CollectionEvent message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CollectionEvent.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.type);
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                $root.common.StringValue.encode(message.path, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.item != null && Object.hasOwnProperty.call(message, "item"))
                $root.fs.FSItem.encode(message.item, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified CollectionEvent message, length delimited. Does not implicitly {@link fs.CollectionEvent.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.CollectionEvent
         * @static
         * @param {fs.ICollectionEvent} message CollectionEvent message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CollectionEvent.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a CollectionEvent message from the specified reader or buffer.
         * @function decode
         * @memberof fs.CollectionEvent
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.CollectionEvent} CollectionEvent
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CollectionEvent.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.CollectionEvent();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.type = reader.string();
                        break;
                    }
                case 2: {
                        message.path = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.item = $root.fs.FSItem.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a CollectionEvent message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.CollectionEvent
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.CollectionEvent} CollectionEvent
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CollectionEvent.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a CollectionEvent message.
         * @function verify
         * @memberof fs.CollectionEvent
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CollectionEvent.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                if (!$util.isString(message.type))
                    return "type: string expected";
            if (message.path != null && Object.hasOwnProperty.call(message, "path")) {
                var error = $root.common.StringValue.verify(message.path, long + 1);
                if (error)
                    return "path." + error;
            }
            if (message.item != null && Object.hasOwnProperty.call(message, "item")) {
                var error = $root.fs.FSItem.verify(message.item, long + 1);
                if (error)
                    return "item." + error;
            }
            return null;
        };

        /**
         * Creates a CollectionEvent message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.CollectionEvent
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.CollectionEvent} CollectionEvent
         */
        CollectionEvent.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.CollectionEvent)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.CollectionEvent: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.CollectionEvent();
            if (object.type != null)
                message.type = String(object.type);
            if (object.path != null) {
                if (!$util.isObject(object.path))
                    throw TypeError(".fs.CollectionEvent.path: object expected");
                message.path = $root.common.StringValue.fromObject(object.path, long + 1);
            }
            if (object.item != null) {
                if (!$util.isObject(object.item))
                    throw TypeError(".fs.CollectionEvent.item: object expected");
                message.item = $root.fs.FSItem.fromObject(object.item, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a CollectionEvent message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.CollectionEvent
         * @static
         * @param {fs.CollectionEvent} message CollectionEvent
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CollectionEvent.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.type = "";
                object.path = null;
                object.item = null;
            }
            if (message.type != null && Object.hasOwnProperty.call(message, "type"))
                object.type = message.type;
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = $root.common.StringValue.toObject(message.path, options, q + 1);
            if (message.item != null && Object.hasOwnProperty.call(message, "item"))
                object.item = $root.fs.FSItem.toObject(message.item, options, q + 1);
            return object;
        };

        /**
         * Converts this CollectionEvent to JSON.
         * @function toJSON
         * @memberof fs.CollectionEvent
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CollectionEvent.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for CollectionEvent
         * @function getTypeUrl
         * @memberof fs.CollectionEvent
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        CollectionEvent.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.CollectionEvent";
        };

        return CollectionEvent;
    })();

    fs.VersionedGetXAttrRequestBody = (function() {

        /**
         * Properties of a VersionedGetXAttrRequestBody.
         * @memberof fs
         * @interface IVersionedGetXAttrRequestBody
         * @property {string|null} [path] VersionedGetXAttrRequestBody path
         * @property {string|null} [xaName] VersionedGetXAttrRequestBody xaName
         * @property {file.IVersionedReadFlags|null} [flags] VersionedGetXAttrRequestBody flags
         */

        /**
         * Constructs a new VersionedGetXAttrRequestBody.
         * @memberof fs
         * @classdesc Represents a VersionedGetXAttrRequestBody.
         * @implements IVersionedGetXAttrRequestBody
         * @constructor
         * @param {fs.IVersionedGetXAttrRequestBody=} [properties] Properties to set
         */
        function VersionedGetXAttrRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedGetXAttrRequestBody path.
         * @member {string} path
         * @memberof fs.VersionedGetXAttrRequestBody
         * @instance
         */
        VersionedGetXAttrRequestBody.prototype.path = "";

        /**
         * VersionedGetXAttrRequestBody xaName.
         * @member {string} xaName
         * @memberof fs.VersionedGetXAttrRequestBody
         * @instance
         */
        VersionedGetXAttrRequestBody.prototype.xaName = "";

        /**
         * VersionedGetXAttrRequestBody flags.
         * @member {file.IVersionedReadFlags|null|undefined} flags
         * @memberof fs.VersionedGetXAttrRequestBody
         * @instance
         */
        VersionedGetXAttrRequestBody.prototype.flags = null;

        /**
         * Creates a new VersionedGetXAttrRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.VersionedGetXAttrRequestBody
         * @static
         * @param {fs.IVersionedGetXAttrRequestBody=} [properties] Properties to set
         * @returns {fs.VersionedGetXAttrRequestBody} VersionedGetXAttrRequestBody instance
         */
        VersionedGetXAttrRequestBody.create = function create(properties) {
            return new VersionedGetXAttrRequestBody(properties);
        };

        /**
         * Encodes the specified VersionedGetXAttrRequestBody message. Does not implicitly {@link fs.VersionedGetXAttrRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.VersionedGetXAttrRequestBody
         * @static
         * @param {fs.IVersionedGetXAttrRequestBody} message VersionedGetXAttrRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetXAttrRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.xaName);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.file.VersionedReadFlags.encode(message.flags, writer.uint32(/* id 10, wireType 2 =*/82).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedGetXAttrRequestBody message, length delimited. Does not implicitly {@link fs.VersionedGetXAttrRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.VersionedGetXAttrRequestBody
         * @static
         * @param {fs.IVersionedGetXAttrRequestBody} message VersionedGetXAttrRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetXAttrRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedGetXAttrRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.VersionedGetXAttrRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.VersionedGetXAttrRequestBody} VersionedGetXAttrRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetXAttrRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.VersionedGetXAttrRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.xaName = reader.string();
                        break;
                    }
                case 10: {
                        message.flags = $root.file.VersionedReadFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedGetXAttrRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.VersionedGetXAttrRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.VersionedGetXAttrRequestBody} VersionedGetXAttrRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetXAttrRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedGetXAttrRequestBody message.
         * @function verify
         * @memberof fs.VersionedGetXAttrRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedGetXAttrRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                if (!$util.isString(message.xaName))
                    return "xaName: string expected";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.file.VersionedReadFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedGetXAttrRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.VersionedGetXAttrRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.VersionedGetXAttrRequestBody} VersionedGetXAttrRequestBody
         */
        VersionedGetXAttrRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.VersionedGetXAttrRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.VersionedGetXAttrRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.VersionedGetXAttrRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.xaName != null)
                message.xaName = String(object.xaName);
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".fs.VersionedGetXAttrRequestBody.flags: object expected");
                message.flags = $root.file.VersionedReadFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedGetXAttrRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.VersionedGetXAttrRequestBody
         * @static
         * @param {fs.VersionedGetXAttrRequestBody} message VersionedGetXAttrRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedGetXAttrRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.xaName = "";
                object.flags = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.xaName != null && Object.hasOwnProperty.call(message, "xaName"))
                object.xaName = message.xaName;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.file.VersionedReadFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedGetXAttrRequestBody to JSON.
         * @function toJSON
         * @memberof fs.VersionedGetXAttrRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedGetXAttrRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedGetXAttrRequestBody
         * @function getTypeUrl
         * @memberof fs.VersionedGetXAttrRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedGetXAttrRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.VersionedGetXAttrRequestBody";
        };

        return VersionedGetXAttrRequestBody;
    })();

    fs.PathAndFlagsRequestBody = (function() {

        /**
         * Properties of a PathAndFlagsRequestBody.
         * @memberof fs
         * @interface IPathAndFlagsRequestBody
         * @property {string|null} [path] PathAndFlagsRequestBody path
         * @property {file.IVersionedReadFlags|null} [flags] PathAndFlagsRequestBody flags
         */

        /**
         * Constructs a new PathAndFlagsRequestBody.
         * @memberof fs
         * @classdesc Represents a PathAndFlagsRequestBody.
         * @implements IPathAndFlagsRequestBody
         * @constructor
         * @param {fs.IPathAndFlagsRequestBody=} [properties] Properties to set
         */
        function PathAndFlagsRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * PathAndFlagsRequestBody path.
         * @member {string} path
         * @memberof fs.PathAndFlagsRequestBody
         * @instance
         */
        PathAndFlagsRequestBody.prototype.path = "";

        /**
         * PathAndFlagsRequestBody flags.
         * @member {file.IVersionedReadFlags|null|undefined} flags
         * @memberof fs.PathAndFlagsRequestBody
         * @instance
         */
        PathAndFlagsRequestBody.prototype.flags = null;

        /**
         * Creates a new PathAndFlagsRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.PathAndFlagsRequestBody
         * @static
         * @param {fs.IPathAndFlagsRequestBody=} [properties] Properties to set
         * @returns {fs.PathAndFlagsRequestBody} PathAndFlagsRequestBody instance
         */
        PathAndFlagsRequestBody.create = function create(properties) {
            return new PathAndFlagsRequestBody(properties);
        };

        /**
         * Encodes the specified PathAndFlagsRequestBody message. Does not implicitly {@link fs.PathAndFlagsRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.PathAndFlagsRequestBody
         * @static
         * @param {fs.IPathAndFlagsRequestBody} message PathAndFlagsRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PathAndFlagsRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.file.VersionedReadFlags.encode(message.flags, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified PathAndFlagsRequestBody message, length delimited. Does not implicitly {@link fs.PathAndFlagsRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.PathAndFlagsRequestBody
         * @static
         * @param {fs.IPathAndFlagsRequestBody} message PathAndFlagsRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PathAndFlagsRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a PathAndFlagsRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.PathAndFlagsRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.PathAndFlagsRequestBody} PathAndFlagsRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PathAndFlagsRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.PathAndFlagsRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.flags = $root.file.VersionedReadFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a PathAndFlagsRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.PathAndFlagsRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.PathAndFlagsRequestBody} PathAndFlagsRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PathAndFlagsRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a PathAndFlagsRequestBody message.
         * @function verify
         * @memberof fs.PathAndFlagsRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        PathAndFlagsRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.file.VersionedReadFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a PathAndFlagsRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.PathAndFlagsRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.PathAndFlagsRequestBody} PathAndFlagsRequestBody
         */
        PathAndFlagsRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.PathAndFlagsRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.PathAndFlagsRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.PathAndFlagsRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".fs.PathAndFlagsRequestBody.flags: object expected");
                message.flags = $root.file.VersionedReadFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a PathAndFlagsRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.PathAndFlagsRequestBody
         * @static
         * @param {fs.PathAndFlagsRequestBody} message PathAndFlagsRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        PathAndFlagsRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.flags = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.file.VersionedReadFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this PathAndFlagsRequestBody to JSON.
         * @function toJSON
         * @memberof fs.PathAndFlagsRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        PathAndFlagsRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for PathAndFlagsRequestBody
         * @function getTypeUrl
         * @memberof fs.PathAndFlagsRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        PathAndFlagsRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.PathAndFlagsRequestBody";
        };

        return PathAndFlagsRequestBody;
    })();

    fs.VersionedListFolderReplyBody = (function() {

        /**
         * Properties of a VersionedListFolderReplyBody.
         * @memberof fs
         * @interface IVersionedListFolderReplyBody
         * @property {number|Long|null} [version] VersionedListFolderReplyBody version
         * @property {Array.<fs.IListingEntryMsg>|null} [entries] VersionedListFolderReplyBody entries
         */

        /**
         * Constructs a new VersionedListFolderReplyBody.
         * @memberof fs
         * @classdesc Represents a VersionedListFolderReplyBody.
         * @implements IVersionedListFolderReplyBody
         * @constructor
         * @param {fs.IVersionedListFolderReplyBody=} [properties] Properties to set
         */
        function VersionedListFolderReplyBody(properties) {
            this.entries = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedListFolderReplyBody version.
         * @member {number|Long} version
         * @memberof fs.VersionedListFolderReplyBody
         * @instance
         */
        VersionedListFolderReplyBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * VersionedListFolderReplyBody entries.
         * @member {Array.<fs.IListingEntryMsg>} entries
         * @memberof fs.VersionedListFolderReplyBody
         * @instance
         */
        VersionedListFolderReplyBody.prototype.entries = $util.emptyArray;

        /**
         * Creates a new VersionedListFolderReplyBody instance using the specified properties.
         * @function create
         * @memberof fs.VersionedListFolderReplyBody
         * @static
         * @param {fs.IVersionedListFolderReplyBody=} [properties] Properties to set
         * @returns {fs.VersionedListFolderReplyBody} VersionedListFolderReplyBody instance
         */
        VersionedListFolderReplyBody.create = function create(properties) {
            return new VersionedListFolderReplyBody(properties);
        };

        /**
         * Encodes the specified VersionedListFolderReplyBody message. Does not implicitly {@link fs.VersionedListFolderReplyBody.verify|verify} messages.
         * @function encode
         * @memberof fs.VersionedListFolderReplyBody
         * @static
         * @param {fs.IVersionedListFolderReplyBody} message VersionedListFolderReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedListFolderReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.version);
            if (message.entries != null && message.entries.length)
                for (var i = 0; i < message.entries.length; ++i)
                    $root.fs.ListingEntryMsg.encode(message.entries[i], writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedListFolderReplyBody message, length delimited. Does not implicitly {@link fs.VersionedListFolderReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.VersionedListFolderReplyBody
         * @static
         * @param {fs.IVersionedListFolderReplyBody} message VersionedListFolderReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedListFolderReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedListFolderReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.VersionedListFolderReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.VersionedListFolderReplyBody} VersionedListFolderReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedListFolderReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.VersionedListFolderReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.version = reader.uint64();
                        break;
                    }
                case 2: {
                        if (!(message.entries && message.entries.length))
                            message.entries = [];
                        message.entries.push($root.fs.ListingEntryMsg.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedListFolderReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.VersionedListFolderReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.VersionedListFolderReplyBody} VersionedListFolderReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedListFolderReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedListFolderReplyBody message.
         * @function verify
         * @memberof fs.VersionedListFolderReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedListFolderReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.entries != null && Object.hasOwnProperty.call(message, "entries")) {
                if (!Array.isArray(message.entries))
                    return "entries: array expected";
                for (var i = 0; i < message.entries.length; ++i) {
                    var error = $root.fs.ListingEntryMsg.verify(message.entries[i], long + 1);
                    if (error)
                        return "entries." + error;
                }
            }
            return null;
        };

        /**
         * Creates a VersionedListFolderReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.VersionedListFolderReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.VersionedListFolderReplyBody} VersionedListFolderReplyBody
         */
        VersionedListFolderReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.VersionedListFolderReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.VersionedListFolderReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.VersionedListFolderReplyBody();
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            if (object.entries) {
                if (!Array.isArray(object.entries))
                    throw TypeError(".fs.VersionedListFolderReplyBody.entries: array expected");
                message.entries = [];
                for (var i = 0; i < object.entries.length; ++i) {
                    if (!$util.isObject(object.entries[i]))
                        throw TypeError(".fs.VersionedListFolderReplyBody.entries: object expected");
                    message.entries[i] = $root.fs.ListingEntryMsg.fromObject(object.entries[i], long + 1);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedListFolderReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.VersionedListFolderReplyBody
         * @static
         * @param {fs.VersionedListFolderReplyBody} message VersionedListFolderReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedListFolderReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults)
                object.entries = [];
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            if (message.entries && message.entries.length) {
                object.entries = [];
                for (var j = 0; j < message.entries.length; ++j)
                    object.entries[j] = $root.fs.ListingEntryMsg.toObject(message.entries[j], options, q + 1);
            }
            return object;
        };

        /**
         * Converts this VersionedListFolderReplyBody to JSON.
         * @function toJSON
         * @memberof fs.VersionedListFolderReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedListFolderReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedListFolderReplyBody
         * @function getTypeUrl
         * @memberof fs.VersionedListFolderReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedListFolderReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.VersionedListFolderReplyBody";
        };

        return VersionedListFolderReplyBody;
    })();

    fs.VersionedReadBytesRequestBody = (function() {

        /**
         * Properties of a VersionedReadBytesRequestBody.
         * @memberof fs
         * @interface IVersionedReadBytesRequestBody
         * @property {string|null} [path] VersionedReadBytesRequestBody path
         * @property {common.IUInt64Value|null} [start] VersionedReadBytesRequestBody start
         * @property {common.IUInt64Value|null} [end] VersionedReadBytesRequestBody end
         * @property {file.IVersionedReadFlags|null} [flags] VersionedReadBytesRequestBody flags
         */

        /**
         * Constructs a new VersionedReadBytesRequestBody.
         * @memberof fs
         * @classdesc Represents a VersionedReadBytesRequestBody.
         * @implements IVersionedReadBytesRequestBody
         * @constructor
         * @param {fs.IVersionedReadBytesRequestBody=} [properties] Properties to set
         */
        function VersionedReadBytesRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedReadBytesRequestBody path.
         * @member {string} path
         * @memberof fs.VersionedReadBytesRequestBody
         * @instance
         */
        VersionedReadBytesRequestBody.prototype.path = "";

        /**
         * VersionedReadBytesRequestBody start.
         * @member {common.IUInt64Value|null|undefined} start
         * @memberof fs.VersionedReadBytesRequestBody
         * @instance
         */
        VersionedReadBytesRequestBody.prototype.start = null;

        /**
         * VersionedReadBytesRequestBody end.
         * @member {common.IUInt64Value|null|undefined} end
         * @memberof fs.VersionedReadBytesRequestBody
         * @instance
         */
        VersionedReadBytesRequestBody.prototype.end = null;

        /**
         * VersionedReadBytesRequestBody flags.
         * @member {file.IVersionedReadFlags|null|undefined} flags
         * @memberof fs.VersionedReadBytesRequestBody
         * @instance
         */
        VersionedReadBytesRequestBody.prototype.flags = null;

        /**
         * Creates a new VersionedReadBytesRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.VersionedReadBytesRequestBody
         * @static
         * @param {fs.IVersionedReadBytesRequestBody=} [properties] Properties to set
         * @returns {fs.VersionedReadBytesRequestBody} VersionedReadBytesRequestBody instance
         */
        VersionedReadBytesRequestBody.create = function create(properties) {
            return new VersionedReadBytesRequestBody(properties);
        };

        /**
         * Encodes the specified VersionedReadBytesRequestBody message. Does not implicitly {@link fs.VersionedReadBytesRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.VersionedReadBytesRequestBody
         * @static
         * @param {fs.IVersionedReadBytesRequestBody} message VersionedReadBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadBytesRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.start != null && Object.hasOwnProperty.call(message, "start"))
                $root.common.UInt64Value.encode(message.start, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.end != null && Object.hasOwnProperty.call(message, "end"))
                $root.common.UInt64Value.encode(message.end, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.file.VersionedReadFlags.encode(message.flags, writer.uint32(/* id 10, wireType 2 =*/82).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedReadBytesRequestBody message, length delimited. Does not implicitly {@link fs.VersionedReadBytesRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.VersionedReadBytesRequestBody
         * @static
         * @param {fs.IVersionedReadBytesRequestBody} message VersionedReadBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedReadBytesRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedReadBytesRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.VersionedReadBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.VersionedReadBytesRequestBody} VersionedReadBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadBytesRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.VersionedReadBytesRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.start = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.end = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 10: {
                        message.flags = $root.file.VersionedReadFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedReadBytesRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.VersionedReadBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.VersionedReadBytesRequestBody} VersionedReadBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedReadBytesRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedReadBytesRequestBody message.
         * @function verify
         * @memberof fs.VersionedReadBytesRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedReadBytesRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.start != null && Object.hasOwnProperty.call(message, "start")) {
                var error = $root.common.UInt64Value.verify(message.start, long + 1);
                if (error)
                    return "start." + error;
            }
            if (message.end != null && Object.hasOwnProperty.call(message, "end")) {
                var error = $root.common.UInt64Value.verify(message.end, long + 1);
                if (error)
                    return "end." + error;
            }
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.file.VersionedReadFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedReadBytesRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.VersionedReadBytesRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.VersionedReadBytesRequestBody} VersionedReadBytesRequestBody
         */
        VersionedReadBytesRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.VersionedReadBytesRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.VersionedReadBytesRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.VersionedReadBytesRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.start != null) {
                if (!$util.isObject(object.start))
                    throw TypeError(".fs.VersionedReadBytesRequestBody.start: object expected");
                message.start = $root.common.UInt64Value.fromObject(object.start, long + 1);
            }
            if (object.end != null) {
                if (!$util.isObject(object.end))
                    throw TypeError(".fs.VersionedReadBytesRequestBody.end: object expected");
                message.end = $root.common.UInt64Value.fromObject(object.end, long + 1);
            }
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".fs.VersionedReadBytesRequestBody.flags: object expected");
                message.flags = $root.file.VersionedReadFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedReadBytesRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.VersionedReadBytesRequestBody
         * @static
         * @param {fs.VersionedReadBytesRequestBody} message VersionedReadBytesRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedReadBytesRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.start = null;
                object.end = null;
                object.flags = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.start != null && Object.hasOwnProperty.call(message, "start"))
                object.start = $root.common.UInt64Value.toObject(message.start, options, q + 1);
            if (message.end != null && Object.hasOwnProperty.call(message, "end"))
                object.end = $root.common.UInt64Value.toObject(message.end, options, q + 1);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.file.VersionedReadFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedReadBytesRequestBody to JSON.
         * @function toJSON
         * @memberof fs.VersionedReadBytesRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedReadBytesRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedReadBytesRequestBody
         * @function getTypeUrl
         * @memberof fs.VersionedReadBytesRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedReadBytesRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.VersionedReadBytesRequestBody";
        };

        return VersionedReadBytesRequestBody;
    })();

    fs.UpdateXAttrsRequestBody = (function() {

        /**
         * Properties of an UpdateXAttrsRequestBody.
         * @memberof fs
         * @interface IUpdateXAttrsRequestBody
         * @property {string|null} [path] UpdateXAttrsRequestBody path
         * @property {file.IXAttrsChanges|null} [changes] UpdateXAttrsRequestBody changes
         */

        /**
         * Constructs a new UpdateXAttrsRequestBody.
         * @memberof fs
         * @classdesc Represents an UpdateXAttrsRequestBody.
         * @implements IUpdateXAttrsRequestBody
         * @constructor
         * @param {fs.IUpdateXAttrsRequestBody=} [properties] Properties to set
         */
        function UpdateXAttrsRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UpdateXAttrsRequestBody path.
         * @member {string} path
         * @memberof fs.UpdateXAttrsRequestBody
         * @instance
         */
        UpdateXAttrsRequestBody.prototype.path = "";

        /**
         * UpdateXAttrsRequestBody changes.
         * @member {file.IXAttrsChanges|null|undefined} changes
         * @memberof fs.UpdateXAttrsRequestBody
         * @instance
         */
        UpdateXAttrsRequestBody.prototype.changes = null;

        /**
         * Creates a new UpdateXAttrsRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.UpdateXAttrsRequestBody
         * @static
         * @param {fs.IUpdateXAttrsRequestBody=} [properties] Properties to set
         * @returns {fs.UpdateXAttrsRequestBody} UpdateXAttrsRequestBody instance
         */
        UpdateXAttrsRequestBody.create = function create(properties) {
            return new UpdateXAttrsRequestBody(properties);
        };

        /**
         * Encodes the specified UpdateXAttrsRequestBody message. Does not implicitly {@link fs.UpdateXAttrsRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.UpdateXAttrsRequestBody
         * @static
         * @param {fs.IUpdateXAttrsRequestBody} message UpdateXAttrsRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UpdateXAttrsRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.changes != null && Object.hasOwnProperty.call(message, "changes"))
                $root.file.XAttrsChanges.encode(message.changes, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified UpdateXAttrsRequestBody message, length delimited. Does not implicitly {@link fs.UpdateXAttrsRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.UpdateXAttrsRequestBody
         * @static
         * @param {fs.IUpdateXAttrsRequestBody} message UpdateXAttrsRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UpdateXAttrsRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an UpdateXAttrsRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.UpdateXAttrsRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.UpdateXAttrsRequestBody} UpdateXAttrsRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UpdateXAttrsRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.UpdateXAttrsRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.changes = $root.file.XAttrsChanges.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an UpdateXAttrsRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.UpdateXAttrsRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.UpdateXAttrsRequestBody} UpdateXAttrsRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UpdateXAttrsRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an UpdateXAttrsRequestBody message.
         * @function verify
         * @memberof fs.UpdateXAttrsRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UpdateXAttrsRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.changes != null && Object.hasOwnProperty.call(message, "changes")) {
                var error = $root.file.XAttrsChanges.verify(message.changes, long + 1);
                if (error)
                    return "changes." + error;
            }
            return null;
        };

        /**
         * Creates an UpdateXAttrsRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.UpdateXAttrsRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.UpdateXAttrsRequestBody} UpdateXAttrsRequestBody
         */
        UpdateXAttrsRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.UpdateXAttrsRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.UpdateXAttrsRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.UpdateXAttrsRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.changes != null) {
                if (!$util.isObject(object.changes))
                    throw TypeError(".fs.UpdateXAttrsRequestBody.changes: object expected");
                message.changes = $root.file.XAttrsChanges.fromObject(object.changes, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an UpdateXAttrsRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.UpdateXAttrsRequestBody
         * @static
         * @param {fs.UpdateXAttrsRequestBody} message UpdateXAttrsRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UpdateXAttrsRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.changes = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.changes != null && Object.hasOwnProperty.call(message, "changes"))
                object.changes = $root.file.XAttrsChanges.toObject(message.changes, options, q + 1);
            return object;
        };

        /**
         * Converts this UpdateXAttrsRequestBody to JSON.
         * @function toJSON
         * @memberof fs.UpdateXAttrsRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UpdateXAttrsRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for UpdateXAttrsRequestBody
         * @function getTypeUrl
         * @memberof fs.UpdateXAttrsRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        UpdateXAttrsRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.UpdateXAttrsRequestBody";
        };

        return UpdateXAttrsRequestBody;
    })();

    fs.MakeFolderRequestBody = (function() {

        /**
         * Properties of a MakeFolderRequestBody.
         * @memberof fs
         * @interface IMakeFolderRequestBody
         * @property {string|null} [path] MakeFolderRequestBody path
         * @property {common.IBooleanValue|null} [exclusive] MakeFolderRequestBody exclusive
         */

        /**
         * Constructs a new MakeFolderRequestBody.
         * @memberof fs
         * @classdesc Represents a MakeFolderRequestBody.
         * @implements IMakeFolderRequestBody
         * @constructor
         * @param {fs.IMakeFolderRequestBody=} [properties] Properties to set
         */
        function MakeFolderRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MakeFolderRequestBody path.
         * @member {string} path
         * @memberof fs.MakeFolderRequestBody
         * @instance
         */
        MakeFolderRequestBody.prototype.path = "";

        /**
         * MakeFolderRequestBody exclusive.
         * @member {common.IBooleanValue|null|undefined} exclusive
         * @memberof fs.MakeFolderRequestBody
         * @instance
         */
        MakeFolderRequestBody.prototype.exclusive = null;

        /**
         * Creates a new MakeFolderRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.MakeFolderRequestBody
         * @static
         * @param {fs.IMakeFolderRequestBody=} [properties] Properties to set
         * @returns {fs.MakeFolderRequestBody} MakeFolderRequestBody instance
         */
        MakeFolderRequestBody.create = function create(properties) {
            return new MakeFolderRequestBody(properties);
        };

        /**
         * Encodes the specified MakeFolderRequestBody message. Does not implicitly {@link fs.MakeFolderRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.MakeFolderRequestBody
         * @static
         * @param {fs.IMakeFolderRequestBody} message MakeFolderRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MakeFolderRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.exclusive != null && Object.hasOwnProperty.call(message, "exclusive"))
                $root.common.BooleanValue.encode(message.exclusive, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified MakeFolderRequestBody message, length delimited. Does not implicitly {@link fs.MakeFolderRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.MakeFolderRequestBody
         * @static
         * @param {fs.IMakeFolderRequestBody} message MakeFolderRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MakeFolderRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a MakeFolderRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.MakeFolderRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.MakeFolderRequestBody} MakeFolderRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MakeFolderRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.MakeFolderRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.exclusive = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MakeFolderRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.MakeFolderRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.MakeFolderRequestBody} MakeFolderRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MakeFolderRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MakeFolderRequestBody message.
         * @function verify
         * @memberof fs.MakeFolderRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MakeFolderRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.exclusive != null && Object.hasOwnProperty.call(message, "exclusive")) {
                var error = $root.common.BooleanValue.verify(message.exclusive, long + 1);
                if (error)
                    return "exclusive." + error;
            }
            return null;
        };

        /**
         * Creates a MakeFolderRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.MakeFolderRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.MakeFolderRequestBody} MakeFolderRequestBody
         */
        MakeFolderRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.MakeFolderRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.MakeFolderRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.MakeFolderRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.exclusive != null) {
                if (!$util.isObject(object.exclusive))
                    throw TypeError(".fs.MakeFolderRequestBody.exclusive: object expected");
                message.exclusive = $root.common.BooleanValue.fromObject(object.exclusive, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a MakeFolderRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.MakeFolderRequestBody
         * @static
         * @param {fs.MakeFolderRequestBody} message MakeFolderRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MakeFolderRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.exclusive = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.exclusive != null && Object.hasOwnProperty.call(message, "exclusive"))
                object.exclusive = $root.common.BooleanValue.toObject(message.exclusive, options, q + 1);
            return object;
        };

        /**
         * Converts this MakeFolderRequestBody to JSON.
         * @function toJSON
         * @memberof fs.MakeFolderRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MakeFolderRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for MakeFolderRequestBody
         * @function getTypeUrl
         * @memberof fs.MakeFolderRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        MakeFolderRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.MakeFolderRequestBody";
        };

        return MakeFolderRequestBody;
    })();

    fs.DeleteFolderRequestBody = (function() {

        /**
         * Properties of a DeleteFolderRequestBody.
         * @memberof fs
         * @interface IDeleteFolderRequestBody
         * @property {string|null} [path] DeleteFolderRequestBody path
         * @property {common.IBooleanValue|null} [removeContent] DeleteFolderRequestBody removeContent
         */

        /**
         * Constructs a new DeleteFolderRequestBody.
         * @memberof fs
         * @classdesc Represents a DeleteFolderRequestBody.
         * @implements IDeleteFolderRequestBody
         * @constructor
         * @param {fs.IDeleteFolderRequestBody=} [properties] Properties to set
         */
        function DeleteFolderRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DeleteFolderRequestBody path.
         * @member {string} path
         * @memberof fs.DeleteFolderRequestBody
         * @instance
         */
        DeleteFolderRequestBody.prototype.path = "";

        /**
         * DeleteFolderRequestBody removeContent.
         * @member {common.IBooleanValue|null|undefined} removeContent
         * @memberof fs.DeleteFolderRequestBody
         * @instance
         */
        DeleteFolderRequestBody.prototype.removeContent = null;

        /**
         * Creates a new DeleteFolderRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.DeleteFolderRequestBody
         * @static
         * @param {fs.IDeleteFolderRequestBody=} [properties] Properties to set
         * @returns {fs.DeleteFolderRequestBody} DeleteFolderRequestBody instance
         */
        DeleteFolderRequestBody.create = function create(properties) {
            return new DeleteFolderRequestBody(properties);
        };

        /**
         * Encodes the specified DeleteFolderRequestBody message. Does not implicitly {@link fs.DeleteFolderRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.DeleteFolderRequestBody
         * @static
         * @param {fs.IDeleteFolderRequestBody} message DeleteFolderRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeleteFolderRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.removeContent != null && Object.hasOwnProperty.call(message, "removeContent"))
                $root.common.BooleanValue.encode(message.removeContent, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DeleteFolderRequestBody message, length delimited. Does not implicitly {@link fs.DeleteFolderRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.DeleteFolderRequestBody
         * @static
         * @param {fs.IDeleteFolderRequestBody} message DeleteFolderRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DeleteFolderRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a DeleteFolderRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.DeleteFolderRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.DeleteFolderRequestBody} DeleteFolderRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeleteFolderRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.DeleteFolderRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.removeContent = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DeleteFolderRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.DeleteFolderRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.DeleteFolderRequestBody} DeleteFolderRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DeleteFolderRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DeleteFolderRequestBody message.
         * @function verify
         * @memberof fs.DeleteFolderRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DeleteFolderRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.removeContent != null && Object.hasOwnProperty.call(message, "removeContent")) {
                var error = $root.common.BooleanValue.verify(message.removeContent, long + 1);
                if (error)
                    return "removeContent." + error;
            }
            return null;
        };

        /**
         * Creates a DeleteFolderRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.DeleteFolderRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.DeleteFolderRequestBody} DeleteFolderRequestBody
         */
        DeleteFolderRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.DeleteFolderRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.DeleteFolderRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.DeleteFolderRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.removeContent != null) {
                if (!$util.isObject(object.removeContent))
                    throw TypeError(".fs.DeleteFolderRequestBody.removeContent: object expected");
                message.removeContent = $root.common.BooleanValue.fromObject(object.removeContent, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a DeleteFolderRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.DeleteFolderRequestBody
         * @static
         * @param {fs.DeleteFolderRequestBody} message DeleteFolderRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DeleteFolderRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.removeContent = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.removeContent != null && Object.hasOwnProperty.call(message, "removeContent"))
                object.removeContent = $root.common.BooleanValue.toObject(message.removeContent, options, q + 1);
            return object;
        };

        /**
         * Converts this DeleteFolderRequestBody to JSON.
         * @function toJSON
         * @memberof fs.DeleteFolderRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DeleteFolderRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DeleteFolderRequestBody
         * @function getTypeUrl
         * @memberof fs.DeleteFolderRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DeleteFolderRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.DeleteFolderRequestBody";
        };

        return DeleteFolderRequestBody;
    })();

    fs.MoveRequestBody = (function() {

        /**
         * Properties of a MoveRequestBody.
         * @memberof fs
         * @interface IMoveRequestBody
         * @property {string|null} [src] MoveRequestBody src
         * @property {string|null} [dst] MoveRequestBody dst
         */

        /**
         * Constructs a new MoveRequestBody.
         * @memberof fs
         * @classdesc Represents a MoveRequestBody.
         * @implements IMoveRequestBody
         * @constructor
         * @param {fs.IMoveRequestBody=} [properties] Properties to set
         */
        function MoveRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MoveRequestBody src.
         * @member {string} src
         * @memberof fs.MoveRequestBody
         * @instance
         */
        MoveRequestBody.prototype.src = "";

        /**
         * MoveRequestBody dst.
         * @member {string} dst
         * @memberof fs.MoveRequestBody
         * @instance
         */
        MoveRequestBody.prototype.dst = "";

        /**
         * Creates a new MoveRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.MoveRequestBody
         * @static
         * @param {fs.IMoveRequestBody=} [properties] Properties to set
         * @returns {fs.MoveRequestBody} MoveRequestBody instance
         */
        MoveRequestBody.create = function create(properties) {
            return new MoveRequestBody(properties);
        };

        /**
         * Encodes the specified MoveRequestBody message. Does not implicitly {@link fs.MoveRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.MoveRequestBody
         * @static
         * @param {fs.IMoveRequestBody} message MoveRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MoveRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.src != null && Object.hasOwnProperty.call(message, "src"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.src);
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.dst);
            return writer;
        };

        /**
         * Encodes the specified MoveRequestBody message, length delimited. Does not implicitly {@link fs.MoveRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.MoveRequestBody
         * @static
         * @param {fs.IMoveRequestBody} message MoveRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MoveRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a MoveRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.MoveRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.MoveRequestBody} MoveRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MoveRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.MoveRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.src = reader.string();
                        break;
                    }
                case 2: {
                        message.dst = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MoveRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.MoveRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.MoveRequestBody} MoveRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MoveRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MoveRequestBody message.
         * @function verify
         * @memberof fs.MoveRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MoveRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.src != null && Object.hasOwnProperty.call(message, "src"))
                if (!$util.isString(message.src))
                    return "src: string expected";
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                if (!$util.isString(message.dst))
                    return "dst: string expected";
            return null;
        };

        /**
         * Creates a MoveRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.MoveRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.MoveRequestBody} MoveRequestBody
         */
        MoveRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.MoveRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.MoveRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.MoveRequestBody();
            if (object.src != null)
                message.src = String(object.src);
            if (object.dst != null)
                message.dst = String(object.dst);
            return message;
        };

        /**
         * Creates a plain object from a MoveRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.MoveRequestBody
         * @static
         * @param {fs.MoveRequestBody} message MoveRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MoveRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.src = "";
                object.dst = "";
            }
            if (message.src != null && Object.hasOwnProperty.call(message, "src"))
                object.src = message.src;
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                object.dst = message.dst;
            return object;
        };

        /**
         * Converts this MoveRequestBody to JSON.
         * @function toJSON
         * @memberof fs.MoveRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MoveRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for MoveRequestBody
         * @function getTypeUrl
         * @memberof fs.MoveRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        MoveRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.MoveRequestBody";
        };

        return MoveRequestBody;
    })();

    fs.CopyFileRequestBody = (function() {

        /**
         * Properties of a CopyFileRequestBody.
         * @memberof fs
         * @interface ICopyFileRequestBody
         * @property {string|null} [src] CopyFileRequestBody src
         * @property {string|null} [dst] CopyFileRequestBody dst
         * @property {common.IBooleanValue|null} [overwrite] CopyFileRequestBody overwrite
         */

        /**
         * Constructs a new CopyFileRequestBody.
         * @memberof fs
         * @classdesc Represents a CopyFileRequestBody.
         * @implements ICopyFileRequestBody
         * @constructor
         * @param {fs.ICopyFileRequestBody=} [properties] Properties to set
         */
        function CopyFileRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * CopyFileRequestBody src.
         * @member {string} src
         * @memberof fs.CopyFileRequestBody
         * @instance
         */
        CopyFileRequestBody.prototype.src = "";

        /**
         * CopyFileRequestBody dst.
         * @member {string} dst
         * @memberof fs.CopyFileRequestBody
         * @instance
         */
        CopyFileRequestBody.prototype.dst = "";

        /**
         * CopyFileRequestBody overwrite.
         * @member {common.IBooleanValue|null|undefined} overwrite
         * @memberof fs.CopyFileRequestBody
         * @instance
         */
        CopyFileRequestBody.prototype.overwrite = null;

        /**
         * Creates a new CopyFileRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.CopyFileRequestBody
         * @static
         * @param {fs.ICopyFileRequestBody=} [properties] Properties to set
         * @returns {fs.CopyFileRequestBody} CopyFileRequestBody instance
         */
        CopyFileRequestBody.create = function create(properties) {
            return new CopyFileRequestBody(properties);
        };

        /**
         * Encodes the specified CopyFileRequestBody message. Does not implicitly {@link fs.CopyFileRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.CopyFileRequestBody
         * @static
         * @param {fs.ICopyFileRequestBody} message CopyFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CopyFileRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.src != null && Object.hasOwnProperty.call(message, "src"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.src);
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.dst);
            if (message.overwrite != null && Object.hasOwnProperty.call(message, "overwrite"))
                $root.common.BooleanValue.encode(message.overwrite, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified CopyFileRequestBody message, length delimited. Does not implicitly {@link fs.CopyFileRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.CopyFileRequestBody
         * @static
         * @param {fs.ICopyFileRequestBody} message CopyFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CopyFileRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a CopyFileRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.CopyFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.CopyFileRequestBody} CopyFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CopyFileRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.CopyFileRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.src = reader.string();
                        break;
                    }
                case 2: {
                        message.dst = reader.string();
                        break;
                    }
                case 3: {
                        message.overwrite = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a CopyFileRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.CopyFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.CopyFileRequestBody} CopyFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CopyFileRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a CopyFileRequestBody message.
         * @function verify
         * @memberof fs.CopyFileRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CopyFileRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.src != null && Object.hasOwnProperty.call(message, "src"))
                if (!$util.isString(message.src))
                    return "src: string expected";
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                if (!$util.isString(message.dst))
                    return "dst: string expected";
            if (message.overwrite != null && Object.hasOwnProperty.call(message, "overwrite")) {
                var error = $root.common.BooleanValue.verify(message.overwrite, long + 1);
                if (error)
                    return "overwrite." + error;
            }
            return null;
        };

        /**
         * Creates a CopyFileRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.CopyFileRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.CopyFileRequestBody} CopyFileRequestBody
         */
        CopyFileRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.CopyFileRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.CopyFileRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.CopyFileRequestBody();
            if (object.src != null)
                message.src = String(object.src);
            if (object.dst != null)
                message.dst = String(object.dst);
            if (object.overwrite != null) {
                if (!$util.isObject(object.overwrite))
                    throw TypeError(".fs.CopyFileRequestBody.overwrite: object expected");
                message.overwrite = $root.common.BooleanValue.fromObject(object.overwrite, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a CopyFileRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.CopyFileRequestBody
         * @static
         * @param {fs.CopyFileRequestBody} message CopyFileRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CopyFileRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.src = "";
                object.dst = "";
                object.overwrite = null;
            }
            if (message.src != null && Object.hasOwnProperty.call(message, "src"))
                object.src = message.src;
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                object.dst = message.dst;
            if (message.overwrite != null && Object.hasOwnProperty.call(message, "overwrite"))
                object.overwrite = $root.common.BooleanValue.toObject(message.overwrite, options, q + 1);
            return object;
        };

        /**
         * Converts this CopyFileRequestBody to JSON.
         * @function toJSON
         * @memberof fs.CopyFileRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CopyFileRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for CopyFileRequestBody
         * @function getTypeUrl
         * @memberof fs.CopyFileRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        CopyFileRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.CopyFileRequestBody";
        };

        return CopyFileRequestBody;
    })();

    fs.CopyFolderRequestBody = (function() {

        /**
         * Properties of a CopyFolderRequestBody.
         * @memberof fs
         * @interface ICopyFolderRequestBody
         * @property {string|null} [src] CopyFolderRequestBody src
         * @property {string|null} [dst] CopyFolderRequestBody dst
         * @property {common.IBooleanValue|null} [mergeAndOverwrite] CopyFolderRequestBody mergeAndOverwrite
         */

        /**
         * Constructs a new CopyFolderRequestBody.
         * @memberof fs
         * @classdesc Represents a CopyFolderRequestBody.
         * @implements ICopyFolderRequestBody
         * @constructor
         * @param {fs.ICopyFolderRequestBody=} [properties] Properties to set
         */
        function CopyFolderRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * CopyFolderRequestBody src.
         * @member {string} src
         * @memberof fs.CopyFolderRequestBody
         * @instance
         */
        CopyFolderRequestBody.prototype.src = "";

        /**
         * CopyFolderRequestBody dst.
         * @member {string} dst
         * @memberof fs.CopyFolderRequestBody
         * @instance
         */
        CopyFolderRequestBody.prototype.dst = "";

        /**
         * CopyFolderRequestBody mergeAndOverwrite.
         * @member {common.IBooleanValue|null|undefined} mergeAndOverwrite
         * @memberof fs.CopyFolderRequestBody
         * @instance
         */
        CopyFolderRequestBody.prototype.mergeAndOverwrite = null;

        /**
         * Creates a new CopyFolderRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.CopyFolderRequestBody
         * @static
         * @param {fs.ICopyFolderRequestBody=} [properties] Properties to set
         * @returns {fs.CopyFolderRequestBody} CopyFolderRequestBody instance
         */
        CopyFolderRequestBody.create = function create(properties) {
            return new CopyFolderRequestBody(properties);
        };

        /**
         * Encodes the specified CopyFolderRequestBody message. Does not implicitly {@link fs.CopyFolderRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.CopyFolderRequestBody
         * @static
         * @param {fs.ICopyFolderRequestBody} message CopyFolderRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CopyFolderRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.src != null && Object.hasOwnProperty.call(message, "src"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.src);
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.dst);
            if (message.mergeAndOverwrite != null && Object.hasOwnProperty.call(message, "mergeAndOverwrite"))
                $root.common.BooleanValue.encode(message.mergeAndOverwrite, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified CopyFolderRequestBody message, length delimited. Does not implicitly {@link fs.CopyFolderRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.CopyFolderRequestBody
         * @static
         * @param {fs.ICopyFolderRequestBody} message CopyFolderRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CopyFolderRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a CopyFolderRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.CopyFolderRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.CopyFolderRequestBody} CopyFolderRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CopyFolderRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.CopyFolderRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.src = reader.string();
                        break;
                    }
                case 2: {
                        message.dst = reader.string();
                        break;
                    }
                case 3: {
                        message.mergeAndOverwrite = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a CopyFolderRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.CopyFolderRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.CopyFolderRequestBody} CopyFolderRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CopyFolderRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a CopyFolderRequestBody message.
         * @function verify
         * @memberof fs.CopyFolderRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CopyFolderRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.src != null && Object.hasOwnProperty.call(message, "src"))
                if (!$util.isString(message.src))
                    return "src: string expected";
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                if (!$util.isString(message.dst))
                    return "dst: string expected";
            if (message.mergeAndOverwrite != null && Object.hasOwnProperty.call(message, "mergeAndOverwrite")) {
                var error = $root.common.BooleanValue.verify(message.mergeAndOverwrite, long + 1);
                if (error)
                    return "mergeAndOverwrite." + error;
            }
            return null;
        };

        /**
         * Creates a CopyFolderRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.CopyFolderRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.CopyFolderRequestBody} CopyFolderRequestBody
         */
        CopyFolderRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.CopyFolderRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.CopyFolderRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.CopyFolderRequestBody();
            if (object.src != null)
                message.src = String(object.src);
            if (object.dst != null)
                message.dst = String(object.dst);
            if (object.mergeAndOverwrite != null) {
                if (!$util.isObject(object.mergeAndOverwrite))
                    throw TypeError(".fs.CopyFolderRequestBody.mergeAndOverwrite: object expected");
                message.mergeAndOverwrite = $root.common.BooleanValue.fromObject(object.mergeAndOverwrite, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a CopyFolderRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.CopyFolderRequestBody
         * @static
         * @param {fs.CopyFolderRequestBody} message CopyFolderRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CopyFolderRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.src = "";
                object.dst = "";
                object.mergeAndOverwrite = null;
            }
            if (message.src != null && Object.hasOwnProperty.call(message, "src"))
                object.src = message.src;
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                object.dst = message.dst;
            if (message.mergeAndOverwrite != null && Object.hasOwnProperty.call(message, "mergeAndOverwrite"))
                object.mergeAndOverwrite = $root.common.BooleanValue.toObject(message.mergeAndOverwrite, options, q + 1);
            return object;
        };

        /**
         * Converts this CopyFolderRequestBody to JSON.
         * @function toJSON
         * @memberof fs.CopyFolderRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CopyFolderRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for CopyFolderRequestBody
         * @function getTypeUrl
         * @memberof fs.CopyFolderRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        CopyFolderRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.CopyFolderRequestBody";
        };

        return CopyFolderRequestBody;
    })();

    fs.SaveFileRequestBody = (function() {

        /**
         * Properties of a SaveFileRequestBody.
         * @memberof fs
         * @interface ISaveFileRequestBody
         * @property {common.IObjectReference|null} [file] SaveFileRequestBody file
         * @property {string|null} [dst] SaveFileRequestBody dst
         * @property {common.IBooleanValue|null} [overwrite] SaveFileRequestBody overwrite
         */

        /**
         * Constructs a new SaveFileRequestBody.
         * @memberof fs
         * @classdesc Represents a SaveFileRequestBody.
         * @implements ISaveFileRequestBody
         * @constructor
         * @param {fs.ISaveFileRequestBody=} [properties] Properties to set
         */
        function SaveFileRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * SaveFileRequestBody file.
         * @member {common.IObjectReference|null|undefined} file
         * @memberof fs.SaveFileRequestBody
         * @instance
         */
        SaveFileRequestBody.prototype.file = null;

        /**
         * SaveFileRequestBody dst.
         * @member {string} dst
         * @memberof fs.SaveFileRequestBody
         * @instance
         */
        SaveFileRequestBody.prototype.dst = "";

        /**
         * SaveFileRequestBody overwrite.
         * @member {common.IBooleanValue|null|undefined} overwrite
         * @memberof fs.SaveFileRequestBody
         * @instance
         */
        SaveFileRequestBody.prototype.overwrite = null;

        /**
         * Creates a new SaveFileRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.SaveFileRequestBody
         * @static
         * @param {fs.ISaveFileRequestBody=} [properties] Properties to set
         * @returns {fs.SaveFileRequestBody} SaveFileRequestBody instance
         */
        SaveFileRequestBody.create = function create(properties) {
            return new SaveFileRequestBody(properties);
        };

        /**
         * Encodes the specified SaveFileRequestBody message. Does not implicitly {@link fs.SaveFileRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.SaveFileRequestBody
         * @static
         * @param {fs.ISaveFileRequestBody} message SaveFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SaveFileRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.file != null && Object.hasOwnProperty.call(message, "file"))
                $root.common.ObjectReference.encode(message.file, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.dst);
            if (message.overwrite != null && Object.hasOwnProperty.call(message, "overwrite"))
                $root.common.BooleanValue.encode(message.overwrite, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified SaveFileRequestBody message, length delimited. Does not implicitly {@link fs.SaveFileRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.SaveFileRequestBody
         * @static
         * @param {fs.ISaveFileRequestBody} message SaveFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SaveFileRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a SaveFileRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.SaveFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.SaveFileRequestBody} SaveFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SaveFileRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.SaveFileRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.file = $root.common.ObjectReference.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.dst = reader.string();
                        break;
                    }
                case 3: {
                        message.overwrite = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a SaveFileRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.SaveFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.SaveFileRequestBody} SaveFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SaveFileRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a SaveFileRequestBody message.
         * @function verify
         * @memberof fs.SaveFileRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        SaveFileRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.file != null && Object.hasOwnProperty.call(message, "file")) {
                var error = $root.common.ObjectReference.verify(message.file, long + 1);
                if (error)
                    return "file." + error;
            }
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                if (!$util.isString(message.dst))
                    return "dst: string expected";
            if (message.overwrite != null && Object.hasOwnProperty.call(message, "overwrite")) {
                var error = $root.common.BooleanValue.verify(message.overwrite, long + 1);
                if (error)
                    return "overwrite." + error;
            }
            return null;
        };

        /**
         * Creates a SaveFileRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.SaveFileRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.SaveFileRequestBody} SaveFileRequestBody
         */
        SaveFileRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.SaveFileRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.SaveFileRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.SaveFileRequestBody();
            if (object.file != null) {
                if (!$util.isObject(object.file))
                    throw TypeError(".fs.SaveFileRequestBody.file: object expected");
                message.file = $root.common.ObjectReference.fromObject(object.file, long + 1);
            }
            if (object.dst != null)
                message.dst = String(object.dst);
            if (object.overwrite != null) {
                if (!$util.isObject(object.overwrite))
                    throw TypeError(".fs.SaveFileRequestBody.overwrite: object expected");
                message.overwrite = $root.common.BooleanValue.fromObject(object.overwrite, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a SaveFileRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.SaveFileRequestBody
         * @static
         * @param {fs.SaveFileRequestBody} message SaveFileRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        SaveFileRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.file = null;
                object.dst = "";
                object.overwrite = null;
            }
            if (message.file != null && Object.hasOwnProperty.call(message, "file"))
                object.file = $root.common.ObjectReference.toObject(message.file, options, q + 1);
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                object.dst = message.dst;
            if (message.overwrite != null && Object.hasOwnProperty.call(message, "overwrite"))
                object.overwrite = $root.common.BooleanValue.toObject(message.overwrite, options, q + 1);
            return object;
        };

        /**
         * Converts this SaveFileRequestBody to JSON.
         * @function toJSON
         * @memberof fs.SaveFileRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        SaveFileRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for SaveFileRequestBody
         * @function getTypeUrl
         * @memberof fs.SaveFileRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        SaveFileRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.SaveFileRequestBody";
        };

        return SaveFileRequestBody;
    })();

    fs.SaveFolderRequestBody = (function() {

        /**
         * Properties of a SaveFolderRequestBody.
         * @memberof fs
         * @interface ISaveFolderRequestBody
         * @property {common.IObjectReference|null} [folder] SaveFolderRequestBody folder
         * @property {string|null} [dst] SaveFolderRequestBody dst
         * @property {common.IBooleanValue|null} [mergeAndOverwrite] SaveFolderRequestBody mergeAndOverwrite
         */

        /**
         * Constructs a new SaveFolderRequestBody.
         * @memberof fs
         * @classdesc Represents a SaveFolderRequestBody.
         * @implements ISaveFolderRequestBody
         * @constructor
         * @param {fs.ISaveFolderRequestBody=} [properties] Properties to set
         */
        function SaveFolderRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * SaveFolderRequestBody folder.
         * @member {common.IObjectReference|null|undefined} folder
         * @memberof fs.SaveFolderRequestBody
         * @instance
         */
        SaveFolderRequestBody.prototype.folder = null;

        /**
         * SaveFolderRequestBody dst.
         * @member {string} dst
         * @memberof fs.SaveFolderRequestBody
         * @instance
         */
        SaveFolderRequestBody.prototype.dst = "";

        /**
         * SaveFolderRequestBody mergeAndOverwrite.
         * @member {common.IBooleanValue|null|undefined} mergeAndOverwrite
         * @memberof fs.SaveFolderRequestBody
         * @instance
         */
        SaveFolderRequestBody.prototype.mergeAndOverwrite = null;

        /**
         * Creates a new SaveFolderRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.SaveFolderRequestBody
         * @static
         * @param {fs.ISaveFolderRequestBody=} [properties] Properties to set
         * @returns {fs.SaveFolderRequestBody} SaveFolderRequestBody instance
         */
        SaveFolderRequestBody.create = function create(properties) {
            return new SaveFolderRequestBody(properties);
        };

        /**
         * Encodes the specified SaveFolderRequestBody message. Does not implicitly {@link fs.SaveFolderRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.SaveFolderRequestBody
         * @static
         * @param {fs.ISaveFolderRequestBody} message SaveFolderRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SaveFolderRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.folder != null && Object.hasOwnProperty.call(message, "folder"))
                $root.common.ObjectReference.encode(message.folder, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.dst);
            if (message.mergeAndOverwrite != null && Object.hasOwnProperty.call(message, "mergeAndOverwrite"))
                $root.common.BooleanValue.encode(message.mergeAndOverwrite, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified SaveFolderRequestBody message, length delimited. Does not implicitly {@link fs.SaveFolderRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.SaveFolderRequestBody
         * @static
         * @param {fs.ISaveFolderRequestBody} message SaveFolderRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        SaveFolderRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a SaveFolderRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.SaveFolderRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.SaveFolderRequestBody} SaveFolderRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SaveFolderRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.SaveFolderRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.folder = $root.common.ObjectReference.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.dst = reader.string();
                        break;
                    }
                case 3: {
                        message.mergeAndOverwrite = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a SaveFolderRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.SaveFolderRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.SaveFolderRequestBody} SaveFolderRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        SaveFolderRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a SaveFolderRequestBody message.
         * @function verify
         * @memberof fs.SaveFolderRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        SaveFolderRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.folder != null && Object.hasOwnProperty.call(message, "folder")) {
                var error = $root.common.ObjectReference.verify(message.folder, long + 1);
                if (error)
                    return "folder." + error;
            }
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                if (!$util.isString(message.dst))
                    return "dst: string expected";
            if (message.mergeAndOverwrite != null && Object.hasOwnProperty.call(message, "mergeAndOverwrite")) {
                var error = $root.common.BooleanValue.verify(message.mergeAndOverwrite, long + 1);
                if (error)
                    return "mergeAndOverwrite." + error;
            }
            return null;
        };

        /**
         * Creates a SaveFolderRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.SaveFolderRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.SaveFolderRequestBody} SaveFolderRequestBody
         */
        SaveFolderRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.SaveFolderRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.SaveFolderRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.SaveFolderRequestBody();
            if (object.folder != null) {
                if (!$util.isObject(object.folder))
                    throw TypeError(".fs.SaveFolderRequestBody.folder: object expected");
                message.folder = $root.common.ObjectReference.fromObject(object.folder, long + 1);
            }
            if (object.dst != null)
                message.dst = String(object.dst);
            if (object.mergeAndOverwrite != null) {
                if (!$util.isObject(object.mergeAndOverwrite))
                    throw TypeError(".fs.SaveFolderRequestBody.mergeAndOverwrite: object expected");
                message.mergeAndOverwrite = $root.common.BooleanValue.fromObject(object.mergeAndOverwrite, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a SaveFolderRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.SaveFolderRequestBody
         * @static
         * @param {fs.SaveFolderRequestBody} message SaveFolderRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        SaveFolderRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.folder = null;
                object.dst = "";
                object.mergeAndOverwrite = null;
            }
            if (message.folder != null && Object.hasOwnProperty.call(message, "folder"))
                object.folder = $root.common.ObjectReference.toObject(message.folder, options, q + 1);
            if (message.dst != null && Object.hasOwnProperty.call(message, "dst"))
                object.dst = message.dst;
            if (message.mergeAndOverwrite != null && Object.hasOwnProperty.call(message, "mergeAndOverwrite"))
                object.mergeAndOverwrite = $root.common.BooleanValue.toObject(message.mergeAndOverwrite, options, q + 1);
            return object;
        };

        /**
         * Converts this SaveFolderRequestBody to JSON.
         * @function toJSON
         * @memberof fs.SaveFolderRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        SaveFolderRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for SaveFolderRequestBody
         * @function getTypeUrl
         * @memberof fs.SaveFolderRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        SaveFolderRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.SaveFolderRequestBody";
        };

        return SaveFolderRequestBody;
    })();

    fs.LinkRequestBody = (function() {

        /**
         * Properties of a LinkRequestBody.
         * @memberof fs
         * @interface ILinkRequestBody
         * @property {string|null} [path] LinkRequestBody path
         * @property {common.IObjectReference|null} [target] LinkRequestBody target
         */

        /**
         * Constructs a new LinkRequestBody.
         * @memberof fs
         * @classdesc Represents a LinkRequestBody.
         * @implements ILinkRequestBody
         * @constructor
         * @param {fs.ILinkRequestBody=} [properties] Properties to set
         */
        function LinkRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * LinkRequestBody path.
         * @member {string} path
         * @memberof fs.LinkRequestBody
         * @instance
         */
        LinkRequestBody.prototype.path = "";

        /**
         * LinkRequestBody target.
         * @member {common.IObjectReference|null|undefined} target
         * @memberof fs.LinkRequestBody
         * @instance
         */
        LinkRequestBody.prototype.target = null;

        /**
         * Creates a new LinkRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.LinkRequestBody
         * @static
         * @param {fs.ILinkRequestBody=} [properties] Properties to set
         * @returns {fs.LinkRequestBody} LinkRequestBody instance
         */
        LinkRequestBody.create = function create(properties) {
            return new LinkRequestBody(properties);
        };

        /**
         * Encodes the specified LinkRequestBody message. Does not implicitly {@link fs.LinkRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.LinkRequestBody
         * @static
         * @param {fs.ILinkRequestBody} message LinkRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        LinkRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.target != null && Object.hasOwnProperty.call(message, "target"))
                $root.common.ObjectReference.encode(message.target, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified LinkRequestBody message, length delimited. Does not implicitly {@link fs.LinkRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.LinkRequestBody
         * @static
         * @param {fs.ILinkRequestBody} message LinkRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        LinkRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a LinkRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.LinkRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.LinkRequestBody} LinkRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        LinkRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.LinkRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.target = $root.common.ObjectReference.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a LinkRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.LinkRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.LinkRequestBody} LinkRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        LinkRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a LinkRequestBody message.
         * @function verify
         * @memberof fs.LinkRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        LinkRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.target != null && Object.hasOwnProperty.call(message, "target")) {
                var error = $root.common.ObjectReference.verify(message.target, long + 1);
                if (error)
                    return "target." + error;
            }
            return null;
        };

        /**
         * Creates a LinkRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.LinkRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.LinkRequestBody} LinkRequestBody
         */
        LinkRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.LinkRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.LinkRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.LinkRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.target != null) {
                if (!$util.isObject(object.target))
                    throw TypeError(".fs.LinkRequestBody.target: object expected");
                message.target = $root.common.ObjectReference.fromObject(object.target, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a LinkRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.LinkRequestBody
         * @static
         * @param {fs.LinkRequestBody} message LinkRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        LinkRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.target = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.target != null && Object.hasOwnProperty.call(message, "target"))
                object.target = $root.common.ObjectReference.toObject(message.target, options, q + 1);
            return object;
        };

        /**
         * Converts this LinkRequestBody to JSON.
         * @function toJSON
         * @memberof fs.LinkRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        LinkRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for LinkRequestBody
         * @function getTypeUrl
         * @memberof fs.LinkRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        LinkRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.LinkRequestBody";
        };

        return LinkRequestBody;
    })();

    fs.PathAndOptFileFlags = (function() {

        /**
         * Properties of a PathAndOptFileFlags.
         * @memberof fs
         * @interface IPathAndOptFileFlags
         * @property {string|null} [path] PathAndOptFileFlags path
         * @property {fs.IFileFlags|null} [flags] PathAndOptFileFlags flags
         */

        /**
         * Constructs a new PathAndOptFileFlags.
         * @memberof fs
         * @classdesc Represents a PathAndOptFileFlags.
         * @implements IPathAndOptFileFlags
         * @constructor
         * @param {fs.IPathAndOptFileFlags=} [properties] Properties to set
         */
        function PathAndOptFileFlags(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * PathAndOptFileFlags path.
         * @member {string} path
         * @memberof fs.PathAndOptFileFlags
         * @instance
         */
        PathAndOptFileFlags.prototype.path = "";

        /**
         * PathAndOptFileFlags flags.
         * @member {fs.IFileFlags|null|undefined} flags
         * @memberof fs.PathAndOptFileFlags
         * @instance
         */
        PathAndOptFileFlags.prototype.flags = null;

        /**
         * Creates a new PathAndOptFileFlags instance using the specified properties.
         * @function create
         * @memberof fs.PathAndOptFileFlags
         * @static
         * @param {fs.IPathAndOptFileFlags=} [properties] Properties to set
         * @returns {fs.PathAndOptFileFlags} PathAndOptFileFlags instance
         */
        PathAndOptFileFlags.create = function create(properties) {
            return new PathAndOptFileFlags(properties);
        };

        /**
         * Encodes the specified PathAndOptFileFlags message. Does not implicitly {@link fs.PathAndOptFileFlags.verify|verify} messages.
         * @function encode
         * @memberof fs.PathAndOptFileFlags
         * @static
         * @param {fs.IPathAndOptFileFlags} message PathAndOptFileFlags message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PathAndOptFileFlags.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.fs.FileFlags.encode(message.flags, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified PathAndOptFileFlags message, length delimited. Does not implicitly {@link fs.PathAndOptFileFlags.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.PathAndOptFileFlags
         * @static
         * @param {fs.IPathAndOptFileFlags} message PathAndOptFileFlags message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        PathAndOptFileFlags.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a PathAndOptFileFlags message from the specified reader or buffer.
         * @function decode
         * @memberof fs.PathAndOptFileFlags
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.PathAndOptFileFlags} PathAndOptFileFlags
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PathAndOptFileFlags.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.PathAndOptFileFlags();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.flags = $root.fs.FileFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a PathAndOptFileFlags message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.PathAndOptFileFlags
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.PathAndOptFileFlags} PathAndOptFileFlags
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        PathAndOptFileFlags.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a PathAndOptFileFlags message.
         * @function verify
         * @memberof fs.PathAndOptFileFlags
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        PathAndOptFileFlags.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.fs.FileFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a PathAndOptFileFlags message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.PathAndOptFileFlags
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.PathAndOptFileFlags} PathAndOptFileFlags
         */
        PathAndOptFileFlags.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.PathAndOptFileFlags)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.PathAndOptFileFlags: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.PathAndOptFileFlags();
            if (object.path != null)
                message.path = String(object.path);
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".fs.PathAndOptFileFlags.flags: object expected");
                message.flags = $root.fs.FileFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a PathAndOptFileFlags message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.PathAndOptFileFlags
         * @static
         * @param {fs.PathAndOptFileFlags} message PathAndOptFileFlags
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        PathAndOptFileFlags.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.flags = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.fs.FileFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this PathAndOptFileFlags to JSON.
         * @function toJSON
         * @memberof fs.PathAndOptFileFlags
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        PathAndOptFileFlags.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for PathAndOptFileFlags
         * @function getTypeUrl
         * @memberof fs.PathAndOptFileFlags
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        PathAndOptFileFlags.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.PathAndOptFileFlags";
        };

        return PathAndOptFileFlags;
    })();

    fs.FileFlags = (function() {

        /**
         * Properties of a FileFlags.
         * @memberof fs
         * @interface IFileFlags
         * @property {common.IBooleanValue|null} [truncate] FileFlags truncate
         * @property {common.IBooleanValue|null} [create] FileFlags create
         * @property {common.IBooleanValue|null} [exclusive] FileFlags exclusive
         */

        /**
         * Constructs a new FileFlags.
         * @memberof fs
         * @classdesc Represents a FileFlags.
         * @implements IFileFlags
         * @constructor
         * @param {fs.IFileFlags=} [properties] Properties to set
         */
        function FileFlags(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FileFlags truncate.
         * @member {common.IBooleanValue|null|undefined} truncate
         * @memberof fs.FileFlags
         * @instance
         */
        FileFlags.prototype.truncate = null;

        /**
         * FileFlags create.
         * @member {common.IBooleanValue|null|undefined} create
         * @memberof fs.FileFlags
         * @instance
         */
        FileFlags.prototype.create = null;

        /**
         * FileFlags exclusive.
         * @member {common.IBooleanValue|null|undefined} exclusive
         * @memberof fs.FileFlags
         * @instance
         */
        FileFlags.prototype.exclusive = null;

        /**
         * Creates a new FileFlags instance using the specified properties.
         * @function create
         * @memberof fs.FileFlags
         * @static
         * @param {fs.IFileFlags=} [properties] Properties to set
         * @returns {fs.FileFlags} FileFlags instance
         */
        FileFlags.create = function create(properties) {
            return new FileFlags(properties);
        };

        /**
         * Encodes the specified FileFlags message. Does not implicitly {@link fs.FileFlags.verify|verify} messages.
         * @function encode
         * @memberof fs.FileFlags
         * @static
         * @param {fs.IFileFlags} message FileFlags message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileFlags.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.truncate != null && Object.hasOwnProperty.call(message, "truncate"))
                $root.common.BooleanValue.encode(message.truncate, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.create != null && Object.hasOwnProperty.call(message, "create"))
                $root.common.BooleanValue.encode(message.create, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.exclusive != null && Object.hasOwnProperty.call(message, "exclusive"))
                $root.common.BooleanValue.encode(message.exclusive, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified FileFlags message, length delimited. Does not implicitly {@link fs.FileFlags.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FileFlags
         * @static
         * @param {fs.IFileFlags} message FileFlags message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FileFlags.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FileFlags message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FileFlags
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FileFlags} FileFlags
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileFlags.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FileFlags();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.truncate = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.create = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.exclusive = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FileFlags message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FileFlags
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FileFlags} FileFlags
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FileFlags.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FileFlags message.
         * @function verify
         * @memberof fs.FileFlags
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FileFlags.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.truncate != null && Object.hasOwnProperty.call(message, "truncate")) {
                var error = $root.common.BooleanValue.verify(message.truncate, long + 1);
                if (error)
                    return "truncate." + error;
            }
            if (message.create != null && Object.hasOwnProperty.call(message, "create")) {
                var error = $root.common.BooleanValue.verify(message.create, long + 1);
                if (error)
                    return "create." + error;
            }
            if (message.exclusive != null && Object.hasOwnProperty.call(message, "exclusive")) {
                var error = $root.common.BooleanValue.verify(message.exclusive, long + 1);
                if (error)
                    return "exclusive." + error;
            }
            return null;
        };

        /**
         * Creates a FileFlags message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FileFlags
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FileFlags} FileFlags
         */
        FileFlags.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FileFlags)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FileFlags: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FileFlags();
            if (object.truncate != null) {
                if (!$util.isObject(object.truncate))
                    throw TypeError(".fs.FileFlags.truncate: object expected");
                message.truncate = $root.common.BooleanValue.fromObject(object.truncate, long + 1);
            }
            if (object.create != null) {
                if (!$util.isObject(object.create))
                    throw TypeError(".fs.FileFlags.create: object expected");
                message.create = $root.common.BooleanValue.fromObject(object.create, long + 1);
            }
            if (object.exclusive != null) {
                if (!$util.isObject(object.exclusive))
                    throw TypeError(".fs.FileFlags.exclusive: object expected");
                message.exclusive = $root.common.BooleanValue.fromObject(object.exclusive, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a FileFlags message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FileFlags
         * @static
         * @param {fs.FileFlags} message FileFlags
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FileFlags.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.truncate = null;
                object.create = null;
                object.exclusive = null;
            }
            if (message.truncate != null && Object.hasOwnProperty.call(message, "truncate"))
                object.truncate = $root.common.BooleanValue.toObject(message.truncate, options, q + 1);
            if (message.create != null && Object.hasOwnProperty.call(message, "create"))
                object.create = $root.common.BooleanValue.toObject(message.create, options, q + 1);
            if (message.exclusive != null && Object.hasOwnProperty.call(message, "exclusive"))
                object.exclusive = $root.common.BooleanValue.toObject(message.exclusive, options, q + 1);
            return object;
        };

        /**
         * Converts this FileFlags to JSON.
         * @function toJSON
         * @memberof fs.FileFlags
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FileFlags.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FileFlags
         * @function getTypeUrl
         * @memberof fs.FileFlags
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FileFlags.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FileFlags";
        };

        return FileFlags;
    })();

    fs.WriteJsonFileRequestBody = (function() {

        /**
         * Properties of a WriteJsonFileRequestBody.
         * @memberof fs
         * @interface IWriteJsonFileRequestBody
         * @property {string|null} [path] WriteJsonFileRequestBody path
         * @property {string|null} [json] WriteJsonFileRequestBody json
         * @property {fs.IFileFlags|null} [flags] WriteJsonFileRequestBody flags
         */

        /**
         * Constructs a new WriteJsonFileRequestBody.
         * @memberof fs
         * @classdesc Represents a WriteJsonFileRequestBody.
         * @implements IWriteJsonFileRequestBody
         * @constructor
         * @param {fs.IWriteJsonFileRequestBody=} [properties] Properties to set
         */
        function WriteJsonFileRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * WriteJsonFileRequestBody path.
         * @member {string} path
         * @memberof fs.WriteJsonFileRequestBody
         * @instance
         */
        WriteJsonFileRequestBody.prototype.path = "";

        /**
         * WriteJsonFileRequestBody json.
         * @member {string} json
         * @memberof fs.WriteJsonFileRequestBody
         * @instance
         */
        WriteJsonFileRequestBody.prototype.json = "";

        /**
         * WriteJsonFileRequestBody flags.
         * @member {fs.IFileFlags|null|undefined} flags
         * @memberof fs.WriteJsonFileRequestBody
         * @instance
         */
        WriteJsonFileRequestBody.prototype.flags = null;

        /**
         * Creates a new WriteJsonFileRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.WriteJsonFileRequestBody
         * @static
         * @param {fs.IWriteJsonFileRequestBody=} [properties] Properties to set
         * @returns {fs.WriteJsonFileRequestBody} WriteJsonFileRequestBody instance
         */
        WriteJsonFileRequestBody.create = function create(properties) {
            return new WriteJsonFileRequestBody(properties);
        };

        /**
         * Encodes the specified WriteJsonFileRequestBody message. Does not implicitly {@link fs.WriteJsonFileRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.WriteJsonFileRequestBody
         * @static
         * @param {fs.IWriteJsonFileRequestBody} message WriteJsonFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteJsonFileRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.json);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.fs.FileFlags.encode(message.flags, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified WriteJsonFileRequestBody message, length delimited. Does not implicitly {@link fs.WriteJsonFileRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.WriteJsonFileRequestBody
         * @static
         * @param {fs.IWriteJsonFileRequestBody} message WriteJsonFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteJsonFileRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a WriteJsonFileRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.WriteJsonFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.WriteJsonFileRequestBody} WriteJsonFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteJsonFileRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.WriteJsonFileRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.json = reader.string();
                        break;
                    }
                case 3: {
                        message.flags = $root.fs.FileFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a WriteJsonFileRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.WriteJsonFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.WriteJsonFileRequestBody} WriteJsonFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteJsonFileRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a WriteJsonFileRequestBody message.
         * @function verify
         * @memberof fs.WriteJsonFileRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        WriteJsonFileRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                if (!$util.isString(message.json))
                    return "json: string expected";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.fs.FileFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a WriteJsonFileRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.WriteJsonFileRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.WriteJsonFileRequestBody} WriteJsonFileRequestBody
         */
        WriteJsonFileRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.WriteJsonFileRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.WriteJsonFileRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.WriteJsonFileRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.json != null)
                message.json = String(object.json);
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".fs.WriteJsonFileRequestBody.flags: object expected");
                message.flags = $root.fs.FileFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a WriteJsonFileRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.WriteJsonFileRequestBody
         * @static
         * @param {fs.WriteJsonFileRequestBody} message WriteJsonFileRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        WriteJsonFileRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.json = "";
                object.flags = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                object.json = message.json;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.fs.FileFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this WriteJsonFileRequestBody to JSON.
         * @function toJSON
         * @memberof fs.WriteJsonFileRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        WriteJsonFileRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for WriteJsonFileRequestBody
         * @function getTypeUrl
         * @memberof fs.WriteJsonFileRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        WriteJsonFileRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.WriteJsonFileRequestBody";
        };

        return WriteJsonFileRequestBody;
    })();

    fs.WriteTxtFileRequestBody = (function() {

        /**
         * Properties of a WriteTxtFileRequestBody.
         * @memberof fs
         * @interface IWriteTxtFileRequestBody
         * @property {string|null} [path] WriteTxtFileRequestBody path
         * @property {string|null} [txt] WriteTxtFileRequestBody txt
         * @property {fs.IFileFlags|null} [flags] WriteTxtFileRequestBody flags
         */

        /**
         * Constructs a new WriteTxtFileRequestBody.
         * @memberof fs
         * @classdesc Represents a WriteTxtFileRequestBody.
         * @implements IWriteTxtFileRequestBody
         * @constructor
         * @param {fs.IWriteTxtFileRequestBody=} [properties] Properties to set
         */
        function WriteTxtFileRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * WriteTxtFileRequestBody path.
         * @member {string} path
         * @memberof fs.WriteTxtFileRequestBody
         * @instance
         */
        WriteTxtFileRequestBody.prototype.path = "";

        /**
         * WriteTxtFileRequestBody txt.
         * @member {string} txt
         * @memberof fs.WriteTxtFileRequestBody
         * @instance
         */
        WriteTxtFileRequestBody.prototype.txt = "";

        /**
         * WriteTxtFileRequestBody flags.
         * @member {fs.IFileFlags|null|undefined} flags
         * @memberof fs.WriteTxtFileRequestBody
         * @instance
         */
        WriteTxtFileRequestBody.prototype.flags = null;

        /**
         * Creates a new WriteTxtFileRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.WriteTxtFileRequestBody
         * @static
         * @param {fs.IWriteTxtFileRequestBody=} [properties] Properties to set
         * @returns {fs.WriteTxtFileRequestBody} WriteTxtFileRequestBody instance
         */
        WriteTxtFileRequestBody.create = function create(properties) {
            return new WriteTxtFileRequestBody(properties);
        };

        /**
         * Encodes the specified WriteTxtFileRequestBody message. Does not implicitly {@link fs.WriteTxtFileRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.WriteTxtFileRequestBody
         * @static
         * @param {fs.IWriteTxtFileRequestBody} message WriteTxtFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteTxtFileRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.txt);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.fs.FileFlags.encode(message.flags, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified WriteTxtFileRequestBody message, length delimited. Does not implicitly {@link fs.WriteTxtFileRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.WriteTxtFileRequestBody
         * @static
         * @param {fs.IWriteTxtFileRequestBody} message WriteTxtFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteTxtFileRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a WriteTxtFileRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.WriteTxtFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.WriteTxtFileRequestBody} WriteTxtFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteTxtFileRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.WriteTxtFileRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.txt = reader.string();
                        break;
                    }
                case 3: {
                        message.flags = $root.fs.FileFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a WriteTxtFileRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.WriteTxtFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.WriteTxtFileRequestBody} WriteTxtFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteTxtFileRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a WriteTxtFileRequestBody message.
         * @function verify
         * @memberof fs.WriteTxtFileRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        WriteTxtFileRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                if (!$util.isString(message.txt))
                    return "txt: string expected";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.fs.FileFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a WriteTxtFileRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.WriteTxtFileRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.WriteTxtFileRequestBody} WriteTxtFileRequestBody
         */
        WriteTxtFileRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.WriteTxtFileRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.WriteTxtFileRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.WriteTxtFileRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.txt != null)
                message.txt = String(object.txt);
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".fs.WriteTxtFileRequestBody.flags: object expected");
                message.flags = $root.fs.FileFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a WriteTxtFileRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.WriteTxtFileRequestBody
         * @static
         * @param {fs.WriteTxtFileRequestBody} message WriteTxtFileRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        WriteTxtFileRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.txt = "";
                object.flags = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                object.txt = message.txt;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.fs.FileFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this WriteTxtFileRequestBody to JSON.
         * @function toJSON
         * @memberof fs.WriteTxtFileRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        WriteTxtFileRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for WriteTxtFileRequestBody
         * @function getTypeUrl
         * @memberof fs.WriteTxtFileRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        WriteTxtFileRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.WriteTxtFileRequestBody";
        };

        return WriteTxtFileRequestBody;
    })();

    fs.WriteBytesRequestBody = (function() {

        /**
         * Properties of a WriteBytesRequestBody.
         * @memberof fs
         * @interface IWriteBytesRequestBody
         * @property {string|null} [path] WriteBytesRequestBody path
         * @property {Uint8Array|null} [bytes] WriteBytesRequestBody bytes
         * @property {fs.IFileFlags|null} [flags] WriteBytesRequestBody flags
         */

        /**
         * Constructs a new WriteBytesRequestBody.
         * @memberof fs
         * @classdesc Represents a WriteBytesRequestBody.
         * @implements IWriteBytesRequestBody
         * @constructor
         * @param {fs.IWriteBytesRequestBody=} [properties] Properties to set
         */
        function WriteBytesRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * WriteBytesRequestBody path.
         * @member {string} path
         * @memberof fs.WriteBytesRequestBody
         * @instance
         */
        WriteBytesRequestBody.prototype.path = "";

        /**
         * WriteBytesRequestBody bytes.
         * @member {Uint8Array} bytes
         * @memberof fs.WriteBytesRequestBody
         * @instance
         */
        WriteBytesRequestBody.prototype.bytes = $util.newBuffer([]);

        /**
         * WriteBytesRequestBody flags.
         * @member {fs.IFileFlags|null|undefined} flags
         * @memberof fs.WriteBytesRequestBody
         * @instance
         */
        WriteBytesRequestBody.prototype.flags = null;

        /**
         * Creates a new WriteBytesRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.WriteBytesRequestBody
         * @static
         * @param {fs.IWriteBytesRequestBody=} [properties] Properties to set
         * @returns {fs.WriteBytesRequestBody} WriteBytesRequestBody instance
         */
        WriteBytesRequestBody.create = function create(properties) {
            return new WriteBytesRequestBody(properties);
        };

        /**
         * Encodes the specified WriteBytesRequestBody message. Does not implicitly {@link fs.WriteBytesRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.WriteBytesRequestBody
         * @static
         * @param {fs.IWriteBytesRequestBody} message WriteBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteBytesRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.bytes);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.fs.FileFlags.encode(message.flags, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified WriteBytesRequestBody message, length delimited. Does not implicitly {@link fs.WriteBytesRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.WriteBytesRequestBody
         * @static
         * @param {fs.IWriteBytesRequestBody} message WriteBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        WriteBytesRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a WriteBytesRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.WriteBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.WriteBytesRequestBody} WriteBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteBytesRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.WriteBytesRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.bytes = reader.bytes();
                        break;
                    }
                case 3: {
                        message.flags = $root.fs.FileFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a WriteBytesRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.WriteBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.WriteBytesRequestBody} WriteBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        WriteBytesRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a WriteBytesRequestBody message.
         * @function verify
         * @memberof fs.WriteBytesRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        WriteBytesRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                if (!(message.bytes && typeof message.bytes.length === "number" || $util.isString(message.bytes)))
                    return "bytes: buffer expected";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.fs.FileFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a WriteBytesRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.WriteBytesRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.WriteBytesRequestBody} WriteBytesRequestBody
         */
        WriteBytesRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.WriteBytesRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.WriteBytesRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.WriteBytesRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.bytes != null)
                if (typeof object.bytes === "string")
                    $util.base64.decode(object.bytes, message.bytes = $util.newBuffer($util.base64.length(object.bytes)), 0);
                else if (object.bytes.length >= 0)
                    message.bytes = object.bytes;
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".fs.WriteBytesRequestBody.flags: object expected");
                message.flags = $root.fs.FileFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a WriteBytesRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.WriteBytesRequestBody
         * @static
         * @param {fs.WriteBytesRequestBody} message WriteBytesRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        WriteBytesRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                if (options.bytes === String)
                    object.bytes = "";
                else {
                    object.bytes = [];
                    if (options.bytes !== Array)
                        object.bytes = $util.newBuffer(object.bytes);
                }
                object.flags = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                object.bytes = options.bytes === String ? $util.base64.encode(message.bytes, 0, message.bytes.length) : options.bytes === Array ? Array.prototype.slice.call(message.bytes) : message.bytes;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.fs.FileFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this WriteBytesRequestBody to JSON.
         * @function toJSON
         * @memberof fs.WriteBytesRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        WriteBytesRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for WriteBytesRequestBody
         * @function getTypeUrl
         * @memberof fs.WriteBytesRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        WriteBytesRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.WriteBytesRequestBody";
        };

        return WriteBytesRequestBody;
    })();

    fs.VersionedWriteJsonFileRequestBody = (function() {

        /**
         * Properties of a VersionedWriteJsonFileRequestBody.
         * @memberof fs
         * @interface IVersionedWriteJsonFileRequestBody
         * @property {string|null} [path] VersionedWriteJsonFileRequestBody path
         * @property {string|null} [json] VersionedWriteJsonFileRequestBody json
         * @property {fs.IVersionedFileWriteFlags|null} [flags] VersionedWriteJsonFileRequestBody flags
         */

        /**
         * Constructs a new VersionedWriteJsonFileRequestBody.
         * @memberof fs
         * @classdesc Represents a VersionedWriteJsonFileRequestBody.
         * @implements IVersionedWriteJsonFileRequestBody
         * @constructor
         * @param {fs.IVersionedWriteJsonFileRequestBody=} [properties] Properties to set
         */
        function VersionedWriteJsonFileRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedWriteJsonFileRequestBody path.
         * @member {string} path
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @instance
         */
        VersionedWriteJsonFileRequestBody.prototype.path = "";

        /**
         * VersionedWriteJsonFileRequestBody json.
         * @member {string} json
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @instance
         */
        VersionedWriteJsonFileRequestBody.prototype.json = "";

        /**
         * VersionedWriteJsonFileRequestBody flags.
         * @member {fs.IVersionedFileWriteFlags|null|undefined} flags
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @instance
         */
        VersionedWriteJsonFileRequestBody.prototype.flags = null;

        /**
         * Creates a new VersionedWriteJsonFileRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @static
         * @param {fs.IVersionedWriteJsonFileRequestBody=} [properties] Properties to set
         * @returns {fs.VersionedWriteJsonFileRequestBody} VersionedWriteJsonFileRequestBody instance
         */
        VersionedWriteJsonFileRequestBody.create = function create(properties) {
            return new VersionedWriteJsonFileRequestBody(properties);
        };

        /**
         * Encodes the specified VersionedWriteJsonFileRequestBody message. Does not implicitly {@link fs.VersionedWriteJsonFileRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @static
         * @param {fs.IVersionedWriteJsonFileRequestBody} message VersionedWriteJsonFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedWriteJsonFileRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.json);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.fs.VersionedFileWriteFlags.encode(message.flags, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedWriteJsonFileRequestBody message, length delimited. Does not implicitly {@link fs.VersionedWriteJsonFileRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @static
         * @param {fs.IVersionedWriteJsonFileRequestBody} message VersionedWriteJsonFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedWriteJsonFileRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedWriteJsonFileRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.VersionedWriteJsonFileRequestBody} VersionedWriteJsonFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedWriteJsonFileRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.VersionedWriteJsonFileRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.json = reader.string();
                        break;
                    }
                case 3: {
                        message.flags = $root.fs.VersionedFileWriteFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedWriteJsonFileRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.VersionedWriteJsonFileRequestBody} VersionedWriteJsonFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedWriteJsonFileRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedWriteJsonFileRequestBody message.
         * @function verify
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedWriteJsonFileRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                if (!$util.isString(message.json))
                    return "json: string expected";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.fs.VersionedFileWriteFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedWriteJsonFileRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.VersionedWriteJsonFileRequestBody} VersionedWriteJsonFileRequestBody
         */
        VersionedWriteJsonFileRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.VersionedWriteJsonFileRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.VersionedWriteJsonFileRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.VersionedWriteJsonFileRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.json != null)
                message.json = String(object.json);
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".fs.VersionedWriteJsonFileRequestBody.flags: object expected");
                message.flags = $root.fs.VersionedFileWriteFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedWriteJsonFileRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @static
         * @param {fs.VersionedWriteJsonFileRequestBody} message VersionedWriteJsonFileRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedWriteJsonFileRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.json = "";
                object.flags = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.json != null && Object.hasOwnProperty.call(message, "json"))
                object.json = message.json;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.fs.VersionedFileWriteFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedWriteJsonFileRequestBody to JSON.
         * @function toJSON
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedWriteJsonFileRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedWriteJsonFileRequestBody
         * @function getTypeUrl
         * @memberof fs.VersionedWriteJsonFileRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedWriteJsonFileRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.VersionedWriteJsonFileRequestBody";
        };

        return VersionedWriteJsonFileRequestBody;
    })();

    fs.VersionedFileWriteFlags = (function() {

        /**
         * Properties of a VersionedFileWriteFlags.
         * @memberof fs
         * @interface IVersionedFileWriteFlags
         * @property {common.IBooleanValue|null} [truncate] VersionedFileWriteFlags truncate
         * @property {common.IBooleanValue|null} [create] VersionedFileWriteFlags create
         * @property {common.IBooleanValue|null} [exclusive] VersionedFileWriteFlags exclusive
         * @property {common.IUInt64Value|null} [currentVersion] VersionedFileWriteFlags currentVersion
         */

        /**
         * Constructs a new VersionedFileWriteFlags.
         * @memberof fs
         * @classdesc Represents a VersionedFileWriteFlags.
         * @implements IVersionedFileWriteFlags
         * @constructor
         * @param {fs.IVersionedFileWriteFlags=} [properties] Properties to set
         */
        function VersionedFileWriteFlags(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedFileWriteFlags truncate.
         * @member {common.IBooleanValue|null|undefined} truncate
         * @memberof fs.VersionedFileWriteFlags
         * @instance
         */
        VersionedFileWriteFlags.prototype.truncate = null;

        /**
         * VersionedFileWriteFlags create.
         * @member {common.IBooleanValue|null|undefined} create
         * @memberof fs.VersionedFileWriteFlags
         * @instance
         */
        VersionedFileWriteFlags.prototype.create = null;

        /**
         * VersionedFileWriteFlags exclusive.
         * @member {common.IBooleanValue|null|undefined} exclusive
         * @memberof fs.VersionedFileWriteFlags
         * @instance
         */
        VersionedFileWriteFlags.prototype.exclusive = null;

        /**
         * VersionedFileWriteFlags currentVersion.
         * @member {common.IUInt64Value|null|undefined} currentVersion
         * @memberof fs.VersionedFileWriteFlags
         * @instance
         */
        VersionedFileWriteFlags.prototype.currentVersion = null;

        /**
         * Creates a new VersionedFileWriteFlags instance using the specified properties.
         * @function create
         * @memberof fs.VersionedFileWriteFlags
         * @static
         * @param {fs.IVersionedFileWriteFlags=} [properties] Properties to set
         * @returns {fs.VersionedFileWriteFlags} VersionedFileWriteFlags instance
         */
        VersionedFileWriteFlags.create = function create(properties) {
            return new VersionedFileWriteFlags(properties);
        };

        /**
         * Encodes the specified VersionedFileWriteFlags message. Does not implicitly {@link fs.VersionedFileWriteFlags.verify|verify} messages.
         * @function encode
         * @memberof fs.VersionedFileWriteFlags
         * @static
         * @param {fs.IVersionedFileWriteFlags} message VersionedFileWriteFlags message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedFileWriteFlags.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.truncate != null && Object.hasOwnProperty.call(message, "truncate"))
                $root.common.BooleanValue.encode(message.truncate, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            if (message.create != null && Object.hasOwnProperty.call(message, "create"))
                $root.common.BooleanValue.encode(message.create, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            if (message.exclusive != null && Object.hasOwnProperty.call(message, "exclusive"))
                $root.common.BooleanValue.encode(message.exclusive, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion"))
                $root.common.UInt64Value.encode(message.currentVersion, writer.uint32(/* id 10, wireType 2 =*/82).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedFileWriteFlags message, length delimited. Does not implicitly {@link fs.VersionedFileWriteFlags.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.VersionedFileWriteFlags
         * @static
         * @param {fs.IVersionedFileWriteFlags} message VersionedFileWriteFlags message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedFileWriteFlags.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedFileWriteFlags message from the specified reader or buffer.
         * @function decode
         * @memberof fs.VersionedFileWriteFlags
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.VersionedFileWriteFlags} VersionedFileWriteFlags
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedFileWriteFlags.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.VersionedFileWriteFlags();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.truncate = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 2: {
                        message.create = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 3: {
                        message.exclusive = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 10: {
                        message.currentVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedFileWriteFlags message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.VersionedFileWriteFlags
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.VersionedFileWriteFlags} VersionedFileWriteFlags
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedFileWriteFlags.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedFileWriteFlags message.
         * @function verify
         * @memberof fs.VersionedFileWriteFlags
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedFileWriteFlags.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.truncate != null && Object.hasOwnProperty.call(message, "truncate")) {
                var error = $root.common.BooleanValue.verify(message.truncate, long + 1);
                if (error)
                    return "truncate." + error;
            }
            if (message.create != null && Object.hasOwnProperty.call(message, "create")) {
                var error = $root.common.BooleanValue.verify(message.create, long + 1);
                if (error)
                    return "create." + error;
            }
            if (message.exclusive != null && Object.hasOwnProperty.call(message, "exclusive")) {
                var error = $root.common.BooleanValue.verify(message.exclusive, long + 1);
                if (error)
                    return "exclusive." + error;
            }
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion")) {
                var error = $root.common.UInt64Value.verify(message.currentVersion, long + 1);
                if (error)
                    return "currentVersion." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedFileWriteFlags message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.VersionedFileWriteFlags
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.VersionedFileWriteFlags} VersionedFileWriteFlags
         */
        VersionedFileWriteFlags.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.VersionedFileWriteFlags)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.VersionedFileWriteFlags: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.VersionedFileWriteFlags();
            if (object.truncate != null) {
                if (!$util.isObject(object.truncate))
                    throw TypeError(".fs.VersionedFileWriteFlags.truncate: object expected");
                message.truncate = $root.common.BooleanValue.fromObject(object.truncate, long + 1);
            }
            if (object.create != null) {
                if (!$util.isObject(object.create))
                    throw TypeError(".fs.VersionedFileWriteFlags.create: object expected");
                message.create = $root.common.BooleanValue.fromObject(object.create, long + 1);
            }
            if (object.exclusive != null) {
                if (!$util.isObject(object.exclusive))
                    throw TypeError(".fs.VersionedFileWriteFlags.exclusive: object expected");
                message.exclusive = $root.common.BooleanValue.fromObject(object.exclusive, long + 1);
            }
            if (object.currentVersion != null) {
                if (!$util.isObject(object.currentVersion))
                    throw TypeError(".fs.VersionedFileWriteFlags.currentVersion: object expected");
                message.currentVersion = $root.common.UInt64Value.fromObject(object.currentVersion, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedFileWriteFlags message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.VersionedFileWriteFlags
         * @static
         * @param {fs.VersionedFileWriteFlags} message VersionedFileWriteFlags
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedFileWriteFlags.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.truncate = null;
                object.create = null;
                object.exclusive = null;
                object.currentVersion = null;
            }
            if (message.truncate != null && Object.hasOwnProperty.call(message, "truncate"))
                object.truncate = $root.common.BooleanValue.toObject(message.truncate, options, q + 1);
            if (message.create != null && Object.hasOwnProperty.call(message, "create"))
                object.create = $root.common.BooleanValue.toObject(message.create, options, q + 1);
            if (message.exclusive != null && Object.hasOwnProperty.call(message, "exclusive"))
                object.exclusive = $root.common.BooleanValue.toObject(message.exclusive, options, q + 1);
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion"))
                object.currentVersion = $root.common.UInt64Value.toObject(message.currentVersion, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedFileWriteFlags to JSON.
         * @function toJSON
         * @memberof fs.VersionedFileWriteFlags
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedFileWriteFlags.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedFileWriteFlags
         * @function getTypeUrl
         * @memberof fs.VersionedFileWriteFlags
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedFileWriteFlags.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.VersionedFileWriteFlags";
        };

        return VersionedFileWriteFlags;
    })();

    fs.VersionedWriteTxtFileRequestBody = (function() {

        /**
         * Properties of a VersionedWriteTxtFileRequestBody.
         * @memberof fs
         * @interface IVersionedWriteTxtFileRequestBody
         * @property {string|null} [path] VersionedWriteTxtFileRequestBody path
         * @property {string|null} [txt] VersionedWriteTxtFileRequestBody txt
         * @property {fs.IVersionedFileWriteFlags|null} [flags] VersionedWriteTxtFileRequestBody flags
         */

        /**
         * Constructs a new VersionedWriteTxtFileRequestBody.
         * @memberof fs
         * @classdesc Represents a VersionedWriteTxtFileRequestBody.
         * @implements IVersionedWriteTxtFileRequestBody
         * @constructor
         * @param {fs.IVersionedWriteTxtFileRequestBody=} [properties] Properties to set
         */
        function VersionedWriteTxtFileRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedWriteTxtFileRequestBody path.
         * @member {string} path
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @instance
         */
        VersionedWriteTxtFileRequestBody.prototype.path = "";

        /**
         * VersionedWriteTxtFileRequestBody txt.
         * @member {string} txt
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @instance
         */
        VersionedWriteTxtFileRequestBody.prototype.txt = "";

        /**
         * VersionedWriteTxtFileRequestBody flags.
         * @member {fs.IVersionedFileWriteFlags|null|undefined} flags
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @instance
         */
        VersionedWriteTxtFileRequestBody.prototype.flags = null;

        /**
         * Creates a new VersionedWriteTxtFileRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @static
         * @param {fs.IVersionedWriteTxtFileRequestBody=} [properties] Properties to set
         * @returns {fs.VersionedWriteTxtFileRequestBody} VersionedWriteTxtFileRequestBody instance
         */
        VersionedWriteTxtFileRequestBody.create = function create(properties) {
            return new VersionedWriteTxtFileRequestBody(properties);
        };

        /**
         * Encodes the specified VersionedWriteTxtFileRequestBody message. Does not implicitly {@link fs.VersionedWriteTxtFileRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @static
         * @param {fs.IVersionedWriteTxtFileRequestBody} message VersionedWriteTxtFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedWriteTxtFileRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.txt);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.fs.VersionedFileWriteFlags.encode(message.flags, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedWriteTxtFileRequestBody message, length delimited. Does not implicitly {@link fs.VersionedWriteTxtFileRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @static
         * @param {fs.IVersionedWriteTxtFileRequestBody} message VersionedWriteTxtFileRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedWriteTxtFileRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedWriteTxtFileRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.VersionedWriteTxtFileRequestBody} VersionedWriteTxtFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedWriteTxtFileRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.VersionedWriteTxtFileRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.txt = reader.string();
                        break;
                    }
                case 3: {
                        message.flags = $root.fs.VersionedFileWriteFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedWriteTxtFileRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.VersionedWriteTxtFileRequestBody} VersionedWriteTxtFileRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedWriteTxtFileRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedWriteTxtFileRequestBody message.
         * @function verify
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedWriteTxtFileRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                if (!$util.isString(message.txt))
                    return "txt: string expected";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.fs.VersionedFileWriteFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedWriteTxtFileRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.VersionedWriteTxtFileRequestBody} VersionedWriteTxtFileRequestBody
         */
        VersionedWriteTxtFileRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.VersionedWriteTxtFileRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.VersionedWriteTxtFileRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.VersionedWriteTxtFileRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.txt != null)
                message.txt = String(object.txt);
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".fs.VersionedWriteTxtFileRequestBody.flags: object expected");
                message.flags = $root.fs.VersionedFileWriteFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedWriteTxtFileRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @static
         * @param {fs.VersionedWriteTxtFileRequestBody} message VersionedWriteTxtFileRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedWriteTxtFileRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.txt = "";
                object.flags = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.txt != null && Object.hasOwnProperty.call(message, "txt"))
                object.txt = message.txt;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.fs.VersionedFileWriteFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedWriteTxtFileRequestBody to JSON.
         * @function toJSON
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedWriteTxtFileRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedWriteTxtFileRequestBody
         * @function getTypeUrl
         * @memberof fs.VersionedWriteTxtFileRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedWriteTxtFileRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.VersionedWriteTxtFileRequestBody";
        };

        return VersionedWriteTxtFileRequestBody;
    })();

    fs.VersionedWriteBytesRequestBody = (function() {

        /**
         * Properties of a VersionedWriteBytesRequestBody.
         * @memberof fs
         * @interface IVersionedWriteBytesRequestBody
         * @property {string|null} [path] VersionedWriteBytesRequestBody path
         * @property {Uint8Array|null} [bytes] VersionedWriteBytesRequestBody bytes
         * @property {fs.IVersionedFileWriteFlags|null} [flags] VersionedWriteBytesRequestBody flags
         */

        /**
         * Constructs a new VersionedWriteBytesRequestBody.
         * @memberof fs
         * @classdesc Represents a VersionedWriteBytesRequestBody.
         * @implements IVersionedWriteBytesRequestBody
         * @constructor
         * @param {fs.IVersionedWriteBytesRequestBody=} [properties] Properties to set
         */
        function VersionedWriteBytesRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedWriteBytesRequestBody path.
         * @member {string} path
         * @memberof fs.VersionedWriteBytesRequestBody
         * @instance
         */
        VersionedWriteBytesRequestBody.prototype.path = "";

        /**
         * VersionedWriteBytesRequestBody bytes.
         * @member {Uint8Array} bytes
         * @memberof fs.VersionedWriteBytesRequestBody
         * @instance
         */
        VersionedWriteBytesRequestBody.prototype.bytes = $util.newBuffer([]);

        /**
         * VersionedWriteBytesRequestBody flags.
         * @member {fs.IVersionedFileWriteFlags|null|undefined} flags
         * @memberof fs.VersionedWriteBytesRequestBody
         * @instance
         */
        VersionedWriteBytesRequestBody.prototype.flags = null;

        /**
         * Creates a new VersionedWriteBytesRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.VersionedWriteBytesRequestBody
         * @static
         * @param {fs.IVersionedWriteBytesRequestBody=} [properties] Properties to set
         * @returns {fs.VersionedWriteBytesRequestBody} VersionedWriteBytesRequestBody instance
         */
        VersionedWriteBytesRequestBody.create = function create(properties) {
            return new VersionedWriteBytesRequestBody(properties);
        };

        /**
         * Encodes the specified VersionedWriteBytesRequestBody message. Does not implicitly {@link fs.VersionedWriteBytesRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.VersionedWriteBytesRequestBody
         * @static
         * @param {fs.IVersionedWriteBytesRequestBody} message VersionedWriteBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedWriteBytesRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.bytes);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.fs.VersionedFileWriteFlags.encode(message.flags, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedWriteBytesRequestBody message, length delimited. Does not implicitly {@link fs.VersionedWriteBytesRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.VersionedWriteBytesRequestBody
         * @static
         * @param {fs.IVersionedWriteBytesRequestBody} message VersionedWriteBytesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedWriteBytesRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedWriteBytesRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.VersionedWriteBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.VersionedWriteBytesRequestBody} VersionedWriteBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedWriteBytesRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.VersionedWriteBytesRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.bytes = reader.bytes();
                        break;
                    }
                case 3: {
                        message.flags = $root.fs.VersionedFileWriteFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedWriteBytesRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.VersionedWriteBytesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.VersionedWriteBytesRequestBody} VersionedWriteBytesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedWriteBytesRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedWriteBytesRequestBody message.
         * @function verify
         * @memberof fs.VersionedWriteBytesRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedWriteBytesRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                if (!(message.bytes && typeof message.bytes.length === "number" || $util.isString(message.bytes)))
                    return "bytes: buffer expected";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.fs.VersionedFileWriteFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedWriteBytesRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.VersionedWriteBytesRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.VersionedWriteBytesRequestBody} VersionedWriteBytesRequestBody
         */
        VersionedWriteBytesRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.VersionedWriteBytesRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.VersionedWriteBytesRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.VersionedWriteBytesRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.bytes != null)
                if (typeof object.bytes === "string")
                    $util.base64.decode(object.bytes, message.bytes = $util.newBuffer($util.base64.length(object.bytes)), 0);
                else if (object.bytes.length >= 0)
                    message.bytes = object.bytes;
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".fs.VersionedWriteBytesRequestBody.flags: object expected");
                message.flags = $root.fs.VersionedFileWriteFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedWriteBytesRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.VersionedWriteBytesRequestBody
         * @static
         * @param {fs.VersionedWriteBytesRequestBody} message VersionedWriteBytesRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedWriteBytesRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                if (options.bytes === String)
                    object.bytes = "";
                else {
                    object.bytes = [];
                    if (options.bytes !== Array)
                        object.bytes = $util.newBuffer(object.bytes);
                }
                object.flags = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.bytes != null && Object.hasOwnProperty.call(message, "bytes"))
                object.bytes = options.bytes === String ? $util.base64.encode(message.bytes, 0, message.bytes.length) : options.bytes === Array ? Array.prototype.slice.call(message.bytes) : message.bytes;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.fs.VersionedFileWriteFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedWriteBytesRequestBody to JSON.
         * @function toJSON
         * @memberof fs.VersionedWriteBytesRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedWriteBytesRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedWriteBytesRequestBody
         * @function getTypeUrl
         * @memberof fs.VersionedWriteBytesRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedWriteBytesRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.VersionedWriteBytesRequestBody";
        };

        return VersionedWriteBytesRequestBody;
    })();

    fs.VersionedGetByteSinkRequestBody = (function() {

        /**
         * Properties of a VersionedGetByteSinkRequestBody.
         * @memberof fs
         * @interface IVersionedGetByteSinkRequestBody
         * @property {string|null} [path] VersionedGetByteSinkRequestBody path
         * @property {fs.IVersionedFileWriteFlags|null} [flags] VersionedGetByteSinkRequestBody flags
         */

        /**
         * Constructs a new VersionedGetByteSinkRequestBody.
         * @memberof fs
         * @classdesc Represents a VersionedGetByteSinkRequestBody.
         * @implements IVersionedGetByteSinkRequestBody
         * @constructor
         * @param {fs.IVersionedGetByteSinkRequestBody=} [properties] Properties to set
         */
        function VersionedGetByteSinkRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * VersionedGetByteSinkRequestBody path.
         * @member {string} path
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @instance
         */
        VersionedGetByteSinkRequestBody.prototype.path = "";

        /**
         * VersionedGetByteSinkRequestBody flags.
         * @member {fs.IVersionedFileWriteFlags|null|undefined} flags
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @instance
         */
        VersionedGetByteSinkRequestBody.prototype.flags = null;

        /**
         * Creates a new VersionedGetByteSinkRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @static
         * @param {fs.IVersionedGetByteSinkRequestBody=} [properties] Properties to set
         * @returns {fs.VersionedGetByteSinkRequestBody} VersionedGetByteSinkRequestBody instance
         */
        VersionedGetByteSinkRequestBody.create = function create(properties) {
            return new VersionedGetByteSinkRequestBody(properties);
        };

        /**
         * Encodes the specified VersionedGetByteSinkRequestBody message. Does not implicitly {@link fs.VersionedGetByteSinkRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @static
         * @param {fs.IVersionedGetByteSinkRequestBody} message VersionedGetByteSinkRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetByteSinkRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                $root.fs.VersionedFileWriteFlags.encode(message.flags, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified VersionedGetByteSinkRequestBody message, length delimited. Does not implicitly {@link fs.VersionedGetByteSinkRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @static
         * @param {fs.IVersionedGetByteSinkRequestBody} message VersionedGetByteSinkRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        VersionedGetByteSinkRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a VersionedGetByteSinkRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.VersionedGetByteSinkRequestBody} VersionedGetByteSinkRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetByteSinkRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.VersionedGetByteSinkRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.flags = $root.fs.VersionedFileWriteFlags.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a VersionedGetByteSinkRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.VersionedGetByteSinkRequestBody} VersionedGetByteSinkRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        VersionedGetByteSinkRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a VersionedGetByteSinkRequestBody message.
         * @function verify
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        VersionedGetByteSinkRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) {
                var error = $root.fs.VersionedFileWriteFlags.verify(message.flags, long + 1);
                if (error)
                    return "flags." + error;
            }
            return null;
        };

        /**
         * Creates a VersionedGetByteSinkRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.VersionedGetByteSinkRequestBody} VersionedGetByteSinkRequestBody
         */
        VersionedGetByteSinkRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.VersionedGetByteSinkRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.VersionedGetByteSinkRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.VersionedGetByteSinkRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.flags != null) {
                if (!$util.isObject(object.flags))
                    throw TypeError(".fs.VersionedGetByteSinkRequestBody.flags: object expected");
                message.flags = $root.fs.VersionedFileWriteFlags.fromObject(object.flags, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a VersionedGetByteSinkRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @static
         * @param {fs.VersionedGetByteSinkRequestBody} message VersionedGetByteSinkRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        VersionedGetByteSinkRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.flags = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.flags != null && Object.hasOwnProperty.call(message, "flags"))
                object.flags = $root.fs.VersionedFileWriteFlags.toObject(message.flags, options, q + 1);
            return object;
        };

        /**
         * Converts this VersionedGetByteSinkRequestBody to JSON.
         * @function toJSON
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        VersionedGetByteSinkRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for VersionedGetByteSinkRequestBody
         * @function getTypeUrl
         * @memberof fs.VersionedGetByteSinkRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        VersionedGetByteSinkRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.VersionedGetByteSinkRequestBody";
        };

        return VersionedGetByteSinkRequestBody;
    })();

    fs.ArchiveCurrentRequestBody = (function() {

        /**
         * Properties of an ArchiveCurrentRequestBody.
         * @memberof fs
         * @interface IArchiveCurrentRequestBody
         * @property {string|null} [path] ArchiveCurrentRequestBody path
         * @property {common.IUInt64Value|null} [version] ArchiveCurrentRequestBody version
         */

        /**
         * Constructs a new ArchiveCurrentRequestBody.
         * @memberof fs
         * @classdesc Represents an ArchiveCurrentRequestBody.
         * @implements IArchiveCurrentRequestBody
         * @constructor
         * @param {fs.IArchiveCurrentRequestBody=} [properties] Properties to set
         */
        function ArchiveCurrentRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * ArchiveCurrentRequestBody path.
         * @member {string} path
         * @memberof fs.ArchiveCurrentRequestBody
         * @instance
         */
        ArchiveCurrentRequestBody.prototype.path = "";

        /**
         * ArchiveCurrentRequestBody version.
         * @member {common.IUInt64Value|null|undefined} version
         * @memberof fs.ArchiveCurrentRequestBody
         * @instance
         */
        ArchiveCurrentRequestBody.prototype.version = null;

        /**
         * Creates a new ArchiveCurrentRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.ArchiveCurrentRequestBody
         * @static
         * @param {fs.IArchiveCurrentRequestBody=} [properties] Properties to set
         * @returns {fs.ArchiveCurrentRequestBody} ArchiveCurrentRequestBody instance
         */
        ArchiveCurrentRequestBody.create = function create(properties) {
            return new ArchiveCurrentRequestBody(properties);
        };

        /**
         * Encodes the specified ArchiveCurrentRequestBody message. Does not implicitly {@link fs.ArchiveCurrentRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.ArchiveCurrentRequestBody
         * @static
         * @param {fs.IArchiveCurrentRequestBody} message ArchiveCurrentRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ArchiveCurrentRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                $root.common.UInt64Value.encode(message.version, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified ArchiveCurrentRequestBody message, length delimited. Does not implicitly {@link fs.ArchiveCurrentRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.ArchiveCurrentRequestBody
         * @static
         * @param {fs.IArchiveCurrentRequestBody} message ArchiveCurrentRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        ArchiveCurrentRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an ArchiveCurrentRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.ArchiveCurrentRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.ArchiveCurrentRequestBody} ArchiveCurrentRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ArchiveCurrentRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.ArchiveCurrentRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.version = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an ArchiveCurrentRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.ArchiveCurrentRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.ArchiveCurrentRequestBody} ArchiveCurrentRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        ArchiveCurrentRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an ArchiveCurrentRequestBody message.
         * @function verify
         * @memberof fs.ArchiveCurrentRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        ArchiveCurrentRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.version != null && Object.hasOwnProperty.call(message, "version")) {
                var error = $root.common.UInt64Value.verify(message.version, long + 1);
                if (error)
                    return "version." + error;
            }
            return null;
        };

        /**
         * Creates an ArchiveCurrentRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.ArchiveCurrentRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.ArchiveCurrentRequestBody} ArchiveCurrentRequestBody
         */
        ArchiveCurrentRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.ArchiveCurrentRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.ArchiveCurrentRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.ArchiveCurrentRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.version != null) {
                if (!$util.isObject(object.version))
                    throw TypeError(".fs.ArchiveCurrentRequestBody.version: object expected");
                message.version = $root.common.UInt64Value.fromObject(object.version, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an ArchiveCurrentRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.ArchiveCurrentRequestBody
         * @static
         * @param {fs.ArchiveCurrentRequestBody} message ArchiveCurrentRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        ArchiveCurrentRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.version = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                object.version = $root.common.UInt64Value.toObject(message.version, options, q + 1);
            return object;
        };

        /**
         * Converts this ArchiveCurrentRequestBody to JSON.
         * @function toJSON
         * @memberof fs.ArchiveCurrentRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        ArchiveCurrentRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for ArchiveCurrentRequestBody
         * @function getTypeUrl
         * @memberof fs.ArchiveCurrentRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        ArchiveCurrentRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.ArchiveCurrentRequestBody";
        };

        return ArchiveCurrentRequestBody;
    })();

    fs.FSSyncStatusRequestBody = (function() {

        /**
         * Properties of a FSSyncStatusRequestBody.
         * @memberof fs
         * @interface IFSSyncStatusRequestBody
         * @property {string|null} [path] FSSyncStatusRequestBody path
         * @property {boolean|null} [skipServerCheck] FSSyncStatusRequestBody skipServerCheck
         */

        /**
         * Constructs a new FSSyncStatusRequestBody.
         * @memberof fs
         * @classdesc Represents a FSSyncStatusRequestBody.
         * @implements IFSSyncStatusRequestBody
         * @constructor
         * @param {fs.IFSSyncStatusRequestBody=} [properties] Properties to set
         */
        function FSSyncStatusRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FSSyncStatusRequestBody path.
         * @member {string} path
         * @memberof fs.FSSyncStatusRequestBody
         * @instance
         */
        FSSyncStatusRequestBody.prototype.path = "";

        /**
         * FSSyncStatusRequestBody skipServerCheck.
         * @member {boolean} skipServerCheck
         * @memberof fs.FSSyncStatusRequestBody
         * @instance
         */
        FSSyncStatusRequestBody.prototype.skipServerCheck = false;

        /**
         * Creates a new FSSyncStatusRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.FSSyncStatusRequestBody
         * @static
         * @param {fs.IFSSyncStatusRequestBody=} [properties] Properties to set
         * @returns {fs.FSSyncStatusRequestBody} FSSyncStatusRequestBody instance
         */
        FSSyncStatusRequestBody.create = function create(properties) {
            return new FSSyncStatusRequestBody(properties);
        };

        /**
         * Encodes the specified FSSyncStatusRequestBody message. Does not implicitly {@link fs.FSSyncStatusRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.FSSyncStatusRequestBody
         * @static
         * @param {fs.IFSSyncStatusRequestBody} message FSSyncStatusRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSSyncStatusRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.skipServerCheck != null && Object.hasOwnProperty.call(message, "skipServerCheck"))
                writer.uint32(/* id 2, wireType 0 =*/16).bool(message.skipServerCheck);
            return writer;
        };

        /**
         * Encodes the specified FSSyncStatusRequestBody message, length delimited. Does not implicitly {@link fs.FSSyncStatusRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FSSyncStatusRequestBody
         * @static
         * @param {fs.IFSSyncStatusRequestBody} message FSSyncStatusRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSSyncStatusRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FSSyncStatusRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FSSyncStatusRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FSSyncStatusRequestBody} FSSyncStatusRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSSyncStatusRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FSSyncStatusRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.skipServerCheck = reader.bool();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FSSyncStatusRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FSSyncStatusRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FSSyncStatusRequestBody} FSSyncStatusRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSSyncStatusRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FSSyncStatusRequestBody message.
         * @function verify
         * @memberof fs.FSSyncStatusRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FSSyncStatusRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.skipServerCheck != null && Object.hasOwnProperty.call(message, "skipServerCheck"))
                if (typeof message.skipServerCheck !== "boolean")
                    return "skipServerCheck: boolean expected";
            return null;
        };

        /**
         * Creates a FSSyncStatusRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FSSyncStatusRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FSSyncStatusRequestBody} FSSyncStatusRequestBody
         */
        FSSyncStatusRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FSSyncStatusRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FSSyncStatusRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FSSyncStatusRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.skipServerCheck != null)
                message.skipServerCheck = Boolean(object.skipServerCheck);
            return message;
        };

        /**
         * Creates a plain object from a FSSyncStatusRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FSSyncStatusRequestBody
         * @static
         * @param {fs.FSSyncStatusRequestBody} message FSSyncStatusRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FSSyncStatusRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.skipServerCheck = false;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.skipServerCheck != null && Object.hasOwnProperty.call(message, "skipServerCheck"))
                object.skipServerCheck = message.skipServerCheck;
            return object;
        };

        /**
         * Converts this FSSyncStatusRequestBody to JSON.
         * @function toJSON
         * @memberof fs.FSSyncStatusRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FSSyncStatusRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FSSyncStatusRequestBody
         * @function getTypeUrl
         * @memberof fs.FSSyncStatusRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FSSyncStatusRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FSSyncStatusRequestBody";
        };

        return FSSyncStatusRequestBody;
    })();

    fs.FSSyncIsOnDiskRequestBody = (function() {

        /**
         * Properties of a FSSyncIsOnDiskRequestBody.
         * @memberof fs
         * @interface IFSSyncIsOnDiskRequestBody
         * @property {string|null} [path] FSSyncIsOnDiskRequestBody path
         * @property {number|Long|null} [version] FSSyncIsOnDiskRequestBody version
         */

        /**
         * Constructs a new FSSyncIsOnDiskRequestBody.
         * @memberof fs
         * @classdesc Represents a FSSyncIsOnDiskRequestBody.
         * @implements IFSSyncIsOnDiskRequestBody
         * @constructor
         * @param {fs.IFSSyncIsOnDiskRequestBody=} [properties] Properties to set
         */
        function FSSyncIsOnDiskRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FSSyncIsOnDiskRequestBody path.
         * @member {string} path
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @instance
         */
        FSSyncIsOnDiskRequestBody.prototype.path = "";

        /**
         * FSSyncIsOnDiskRequestBody version.
         * @member {number|Long} version
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @instance
         */
        FSSyncIsOnDiskRequestBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new FSSyncIsOnDiskRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @static
         * @param {fs.IFSSyncIsOnDiskRequestBody=} [properties] Properties to set
         * @returns {fs.FSSyncIsOnDiskRequestBody} FSSyncIsOnDiskRequestBody instance
         */
        FSSyncIsOnDiskRequestBody.create = function create(properties) {
            return new FSSyncIsOnDiskRequestBody(properties);
        };

        /**
         * Encodes the specified FSSyncIsOnDiskRequestBody message. Does not implicitly {@link fs.FSSyncIsOnDiskRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @static
         * @param {fs.IFSSyncIsOnDiskRequestBody} message FSSyncIsOnDiskRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSSyncIsOnDiskRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.version);
            return writer;
        };

        /**
         * Encodes the specified FSSyncIsOnDiskRequestBody message, length delimited. Does not implicitly {@link fs.FSSyncIsOnDiskRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @static
         * @param {fs.IFSSyncIsOnDiskRequestBody} message FSSyncIsOnDiskRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSSyncIsOnDiskRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FSSyncIsOnDiskRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FSSyncIsOnDiskRequestBody} FSSyncIsOnDiskRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSSyncIsOnDiskRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FSSyncIsOnDiskRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.version = reader.uint64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FSSyncIsOnDiskRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FSSyncIsOnDiskRequestBody} FSSyncIsOnDiskRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSSyncIsOnDiskRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FSSyncIsOnDiskRequestBody message.
         * @function verify
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FSSyncIsOnDiskRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            return null;
        };

        /**
         * Creates a FSSyncIsOnDiskRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FSSyncIsOnDiskRequestBody} FSSyncIsOnDiskRequestBody
         */
        FSSyncIsOnDiskRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FSSyncIsOnDiskRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FSSyncIsOnDiskRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FSSyncIsOnDiskRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a FSSyncIsOnDiskRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @static
         * @param {fs.FSSyncIsOnDiskRequestBody} message FSSyncIsOnDiskRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FSSyncIsOnDiskRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            return object;
        };

        /**
         * Converts this FSSyncIsOnDiskRequestBody to JSON.
         * @function toJSON
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FSSyncIsOnDiskRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FSSyncIsOnDiskRequestBody
         * @function getTypeUrl
         * @memberof fs.FSSyncIsOnDiskRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FSSyncIsOnDiskRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FSSyncIsOnDiskRequestBody";
        };

        return FSSyncIsOnDiskRequestBody;
    })();

    fs.FSSyncIsOnDiskReplyBody = (function() {

        /**
         * Properties of a FSSyncIsOnDiskReplyBody.
         * @memberof fs
         * @interface IFSSyncIsOnDiskReplyBody
         * @property {string|null} [status] FSSyncIsOnDiskReplyBody status
         */

        /**
         * Constructs a new FSSyncIsOnDiskReplyBody.
         * @memberof fs
         * @classdesc Represents a FSSyncIsOnDiskReplyBody.
         * @implements IFSSyncIsOnDiskReplyBody
         * @constructor
         * @param {fs.IFSSyncIsOnDiskReplyBody=} [properties] Properties to set
         */
        function FSSyncIsOnDiskReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FSSyncIsOnDiskReplyBody status.
         * @member {string} status
         * @memberof fs.FSSyncIsOnDiskReplyBody
         * @instance
         */
        FSSyncIsOnDiskReplyBody.prototype.status = "";

        /**
         * Creates a new FSSyncIsOnDiskReplyBody instance using the specified properties.
         * @function create
         * @memberof fs.FSSyncIsOnDiskReplyBody
         * @static
         * @param {fs.IFSSyncIsOnDiskReplyBody=} [properties] Properties to set
         * @returns {fs.FSSyncIsOnDiskReplyBody} FSSyncIsOnDiskReplyBody instance
         */
        FSSyncIsOnDiskReplyBody.create = function create(properties) {
            return new FSSyncIsOnDiskReplyBody(properties);
        };

        /**
         * Encodes the specified FSSyncIsOnDiskReplyBody message. Does not implicitly {@link fs.FSSyncIsOnDiskReplyBody.verify|verify} messages.
         * @function encode
         * @memberof fs.FSSyncIsOnDiskReplyBody
         * @static
         * @param {fs.IFSSyncIsOnDiskReplyBody} message FSSyncIsOnDiskReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSSyncIsOnDiskReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.status != null && Object.hasOwnProperty.call(message, "status"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.status);
            return writer;
        };

        /**
         * Encodes the specified FSSyncIsOnDiskReplyBody message, length delimited. Does not implicitly {@link fs.FSSyncIsOnDiskReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FSSyncIsOnDiskReplyBody
         * @static
         * @param {fs.IFSSyncIsOnDiskReplyBody} message FSSyncIsOnDiskReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSSyncIsOnDiskReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FSSyncIsOnDiskReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FSSyncIsOnDiskReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FSSyncIsOnDiskReplyBody} FSSyncIsOnDiskReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSSyncIsOnDiskReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FSSyncIsOnDiskReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.status = reader.string();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FSSyncIsOnDiskReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FSSyncIsOnDiskReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FSSyncIsOnDiskReplyBody} FSSyncIsOnDiskReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSSyncIsOnDiskReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FSSyncIsOnDiskReplyBody message.
         * @function verify
         * @memberof fs.FSSyncIsOnDiskReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FSSyncIsOnDiskReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.status != null && Object.hasOwnProperty.call(message, "status"))
                if (!$util.isString(message.status))
                    return "status: string expected";
            return null;
        };

        /**
         * Creates a FSSyncIsOnDiskReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FSSyncIsOnDiskReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FSSyncIsOnDiskReplyBody} FSSyncIsOnDiskReplyBody
         */
        FSSyncIsOnDiskReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FSSyncIsOnDiskReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FSSyncIsOnDiskReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FSSyncIsOnDiskReplyBody();
            if (object.status != null)
                message.status = String(object.status);
            return message;
        };

        /**
         * Creates a plain object from a FSSyncIsOnDiskReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FSSyncIsOnDiskReplyBody
         * @static
         * @param {fs.FSSyncIsOnDiskReplyBody} message FSSyncIsOnDiskReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FSSyncIsOnDiskReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.status = "";
            if (message.status != null && Object.hasOwnProperty.call(message, "status"))
                object.status = message.status;
            return object;
        };

        /**
         * Converts this FSSyncIsOnDiskReplyBody to JSON.
         * @function toJSON
         * @memberof fs.FSSyncIsOnDiskReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FSSyncIsOnDiskReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FSSyncIsOnDiskReplyBody
         * @function getTypeUrl
         * @memberof fs.FSSyncIsOnDiskReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FSSyncIsOnDiskReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FSSyncIsOnDiskReplyBody";
        };

        return FSSyncIsOnDiskReplyBody;
    })();

    fs.FSSyncStartDownloadRequestBody = (function() {

        /**
         * Properties of a FSSyncStartDownloadRequestBody.
         * @memberof fs
         * @interface IFSSyncStartDownloadRequestBody
         * @property {string|null} [path] FSSyncStartDownloadRequestBody path
         * @property {number|Long|null} [version] FSSyncStartDownloadRequestBody version
         */

        /**
         * Constructs a new FSSyncStartDownloadRequestBody.
         * @memberof fs
         * @classdesc Represents a FSSyncStartDownloadRequestBody.
         * @implements IFSSyncStartDownloadRequestBody
         * @constructor
         * @param {fs.IFSSyncStartDownloadRequestBody=} [properties] Properties to set
         */
        function FSSyncStartDownloadRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FSSyncStartDownloadRequestBody path.
         * @member {string} path
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @instance
         */
        FSSyncStartDownloadRequestBody.prototype.path = "";

        /**
         * FSSyncStartDownloadRequestBody version.
         * @member {number|Long} version
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @instance
         */
        FSSyncStartDownloadRequestBody.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new FSSyncStartDownloadRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @static
         * @param {fs.IFSSyncStartDownloadRequestBody=} [properties] Properties to set
         * @returns {fs.FSSyncStartDownloadRequestBody} FSSyncStartDownloadRequestBody instance
         */
        FSSyncStartDownloadRequestBody.create = function create(properties) {
            return new FSSyncStartDownloadRequestBody(properties);
        };

        /**
         * Encodes the specified FSSyncStartDownloadRequestBody message. Does not implicitly {@link fs.FSSyncStartDownloadRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @static
         * @param {fs.IFSSyncStartDownloadRequestBody} message FSSyncStartDownloadRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSSyncStartDownloadRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.version);
            return writer;
        };

        /**
         * Encodes the specified FSSyncStartDownloadRequestBody message, length delimited. Does not implicitly {@link fs.FSSyncStartDownloadRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @static
         * @param {fs.IFSSyncStartDownloadRequestBody} message FSSyncStartDownloadRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSSyncStartDownloadRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FSSyncStartDownloadRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FSSyncStartDownloadRequestBody} FSSyncStartDownloadRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSSyncStartDownloadRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FSSyncStartDownloadRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.version = reader.uint64();
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FSSyncStartDownloadRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FSSyncStartDownloadRequestBody} FSSyncStartDownloadRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSSyncStartDownloadRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FSSyncStartDownloadRequestBody message.
         * @function verify
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FSSyncStartDownloadRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            return null;
        };

        /**
         * Creates a FSSyncStartDownloadRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FSSyncStartDownloadRequestBody} FSSyncStartDownloadRequestBody
         */
        FSSyncStartDownloadRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FSSyncStartDownloadRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FSSyncStartDownloadRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FSSyncStartDownloadRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.version != null)
                if ($util.Long)
                    message.version = $util.Long.fromValue(object.version, true);
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a FSSyncStartDownloadRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @static
         * @param {fs.FSSyncStartDownloadRequestBody} message FSSyncStartDownloadRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FSSyncStartDownloadRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.version = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.version != null && Object.hasOwnProperty.call(message, "version"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.version = typeof message.version === "number" ? BigInt(message.version) : $util.Long.fromBits(message.version.low >>> 0, message.version.high >>> 0, true).toBigInt();
                else if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
            return object;
        };

        /**
         * Converts this FSSyncStartDownloadRequestBody to JSON.
         * @function toJSON
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FSSyncStartDownloadRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FSSyncStartDownloadRequestBody
         * @function getTypeUrl
         * @memberof fs.FSSyncStartDownloadRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FSSyncStartDownloadRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FSSyncStartDownloadRequestBody";
        };

        return FSSyncStartDownloadRequestBody;
    })();

    fs.AdoptRemoteRequestBody = (function() {

        /**
         * Properties of an AdoptRemoteRequestBody.
         * @memberof fs
         * @interface IAdoptRemoteRequestBody
         * @property {string|null} [path] AdoptRemoteRequestBody path
         * @property {file.IOptionsToAdopteRemote|null} [opts] AdoptRemoteRequestBody opts
         */

        /**
         * Constructs a new AdoptRemoteRequestBody.
         * @memberof fs
         * @classdesc Represents an AdoptRemoteRequestBody.
         * @implements IAdoptRemoteRequestBody
         * @constructor
         * @param {fs.IAdoptRemoteRequestBody=} [properties] Properties to set
         */
        function AdoptRemoteRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * AdoptRemoteRequestBody path.
         * @member {string} path
         * @memberof fs.AdoptRemoteRequestBody
         * @instance
         */
        AdoptRemoteRequestBody.prototype.path = "";

        /**
         * AdoptRemoteRequestBody opts.
         * @member {file.IOptionsToAdopteRemote|null|undefined} opts
         * @memberof fs.AdoptRemoteRequestBody
         * @instance
         */
        AdoptRemoteRequestBody.prototype.opts = null;

        /**
         * Creates a new AdoptRemoteRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.AdoptRemoteRequestBody
         * @static
         * @param {fs.IAdoptRemoteRequestBody=} [properties] Properties to set
         * @returns {fs.AdoptRemoteRequestBody} AdoptRemoteRequestBody instance
         */
        AdoptRemoteRequestBody.create = function create(properties) {
            return new AdoptRemoteRequestBody(properties);
        };

        /**
         * Encodes the specified AdoptRemoteRequestBody message. Does not implicitly {@link fs.AdoptRemoteRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.AdoptRemoteRequestBody
         * @static
         * @param {fs.IAdoptRemoteRequestBody} message AdoptRemoteRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AdoptRemoteRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                $root.file.OptionsToAdopteRemote.encode(message.opts, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified AdoptRemoteRequestBody message, length delimited. Does not implicitly {@link fs.AdoptRemoteRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.AdoptRemoteRequestBody
         * @static
         * @param {fs.IAdoptRemoteRequestBody} message AdoptRemoteRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AdoptRemoteRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an AdoptRemoteRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.AdoptRemoteRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.AdoptRemoteRequestBody} AdoptRemoteRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AdoptRemoteRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.AdoptRemoteRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.opts = $root.file.OptionsToAdopteRemote.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an AdoptRemoteRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.AdoptRemoteRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.AdoptRemoteRequestBody} AdoptRemoteRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AdoptRemoteRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an AdoptRemoteRequestBody message.
         * @function verify
         * @memberof fs.AdoptRemoteRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        AdoptRemoteRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts")) {
                var error = $root.file.OptionsToAdopteRemote.verify(message.opts, long + 1);
                if (error)
                    return "opts." + error;
            }
            return null;
        };

        /**
         * Creates an AdoptRemoteRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.AdoptRemoteRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.AdoptRemoteRequestBody} AdoptRemoteRequestBody
         */
        AdoptRemoteRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.AdoptRemoteRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.AdoptRemoteRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.AdoptRemoteRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.opts != null) {
                if (!$util.isObject(object.opts))
                    throw TypeError(".fs.AdoptRemoteRequestBody.opts: object expected");
                message.opts = $root.file.OptionsToAdopteRemote.fromObject(object.opts, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an AdoptRemoteRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.AdoptRemoteRequestBody
         * @static
         * @param {fs.AdoptRemoteRequestBody} message AdoptRemoteRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        AdoptRemoteRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.opts = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                object.opts = $root.file.OptionsToAdopteRemote.toObject(message.opts, options, q + 1);
            return object;
        };

        /**
         * Converts this AdoptRemoteRequestBody to JSON.
         * @function toJSON
         * @memberof fs.AdoptRemoteRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        AdoptRemoteRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for AdoptRemoteRequestBody
         * @function getTypeUrl
         * @memberof fs.AdoptRemoteRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        AdoptRemoteRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.AdoptRemoteRequestBody";
        };

        return AdoptRemoteRequestBody;
    })();

    fs.DiffCurrentAndRemoteFileVersionsRequestBody = (function() {

        /**
         * Properties of a DiffCurrentAndRemoteFileVersionsRequestBody.
         * @memberof fs
         * @interface IDiffCurrentAndRemoteFileVersionsRequestBody
         * @property {string|null} [path] DiffCurrentAndRemoteFileVersionsRequestBody path
         * @property {file.IOptionsToDiffFileVersions|null} [opts] DiffCurrentAndRemoteFileVersionsRequestBody opts
         */

        /**
         * Constructs a new DiffCurrentAndRemoteFileVersionsRequestBody.
         * @memberof fs
         * @classdesc Represents a DiffCurrentAndRemoteFileVersionsRequestBody.
         * @implements IDiffCurrentAndRemoteFileVersionsRequestBody
         * @constructor
         * @param {fs.IDiffCurrentAndRemoteFileVersionsRequestBody=} [properties] Properties to set
         */
        function DiffCurrentAndRemoteFileVersionsRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DiffCurrentAndRemoteFileVersionsRequestBody path.
         * @member {string} path
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @instance
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.prototype.path = "";

        /**
         * DiffCurrentAndRemoteFileVersionsRequestBody opts.
         * @member {file.IOptionsToDiffFileVersions|null|undefined} opts
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @instance
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.prototype.opts = null;

        /**
         * Creates a new DiffCurrentAndRemoteFileVersionsRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @static
         * @param {fs.IDiffCurrentAndRemoteFileVersionsRequestBody=} [properties] Properties to set
         * @returns {fs.DiffCurrentAndRemoteFileVersionsRequestBody} DiffCurrentAndRemoteFileVersionsRequestBody instance
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.create = function create(properties) {
            return new DiffCurrentAndRemoteFileVersionsRequestBody(properties);
        };

        /**
         * Encodes the specified DiffCurrentAndRemoteFileVersionsRequestBody message. Does not implicitly {@link fs.DiffCurrentAndRemoteFileVersionsRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @static
         * @param {fs.IDiffCurrentAndRemoteFileVersionsRequestBody} message DiffCurrentAndRemoteFileVersionsRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                $root.file.OptionsToDiffFileVersions.encode(message.opts, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DiffCurrentAndRemoteFileVersionsRequestBody message, length delimited. Does not implicitly {@link fs.DiffCurrentAndRemoteFileVersionsRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @static
         * @param {fs.IDiffCurrentAndRemoteFileVersionsRequestBody} message DiffCurrentAndRemoteFileVersionsRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a DiffCurrentAndRemoteFileVersionsRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.DiffCurrentAndRemoteFileVersionsRequestBody} DiffCurrentAndRemoteFileVersionsRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.DiffCurrentAndRemoteFileVersionsRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.opts = $root.file.OptionsToDiffFileVersions.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DiffCurrentAndRemoteFileVersionsRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.DiffCurrentAndRemoteFileVersionsRequestBody} DiffCurrentAndRemoteFileVersionsRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DiffCurrentAndRemoteFileVersionsRequestBody message.
         * @function verify
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts")) {
                var error = $root.file.OptionsToDiffFileVersions.verify(message.opts, long + 1);
                if (error)
                    return "opts." + error;
            }
            return null;
        };

        /**
         * Creates a DiffCurrentAndRemoteFileVersionsRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.DiffCurrentAndRemoteFileVersionsRequestBody} DiffCurrentAndRemoteFileVersionsRequestBody
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.DiffCurrentAndRemoteFileVersionsRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.DiffCurrentAndRemoteFileVersionsRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.DiffCurrentAndRemoteFileVersionsRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.opts != null) {
                if (!$util.isObject(object.opts))
                    throw TypeError(".fs.DiffCurrentAndRemoteFileVersionsRequestBody.opts: object expected");
                message.opts = $root.file.OptionsToDiffFileVersions.fromObject(object.opts, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a DiffCurrentAndRemoteFileVersionsRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @static
         * @param {fs.DiffCurrentAndRemoteFileVersionsRequestBody} message DiffCurrentAndRemoteFileVersionsRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.opts = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                object.opts = $root.file.OptionsToDiffFileVersions.toObject(message.opts, options, q + 1);
            return object;
        };

        /**
         * Converts this DiffCurrentAndRemoteFileVersionsRequestBody to JSON.
         * @function toJSON
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DiffCurrentAndRemoteFileVersionsRequestBody
         * @function getTypeUrl
         * @memberof fs.DiffCurrentAndRemoteFileVersionsRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DiffCurrentAndRemoteFileVersionsRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.DiffCurrentAndRemoteFileVersionsRequestBody";
        };

        return DiffCurrentAndRemoteFileVersionsRequestBody;
    })();

    fs.DiffCurrentAndRemoteFolderVersionsRequestBody = (function() {

        /**
         * Properties of a DiffCurrentAndRemoteFolderVersionsRequestBody.
         * @memberof fs
         * @interface IDiffCurrentAndRemoteFolderVersionsRequestBody
         * @property {string|null} [path] DiffCurrentAndRemoteFolderVersionsRequestBody path
         * @property {common.IUInt64Value|null} [remoteVersion] DiffCurrentAndRemoteFolderVersionsRequestBody remoteVersion
         */

        /**
         * Constructs a new DiffCurrentAndRemoteFolderVersionsRequestBody.
         * @memberof fs
         * @classdesc Represents a DiffCurrentAndRemoteFolderVersionsRequestBody.
         * @implements IDiffCurrentAndRemoteFolderVersionsRequestBody
         * @constructor
         * @param {fs.IDiffCurrentAndRemoteFolderVersionsRequestBody=} [properties] Properties to set
         */
        function DiffCurrentAndRemoteFolderVersionsRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DiffCurrentAndRemoteFolderVersionsRequestBody path.
         * @member {string} path
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @instance
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.prototype.path = "";

        /**
         * DiffCurrentAndRemoteFolderVersionsRequestBody remoteVersion.
         * @member {common.IUInt64Value|null|undefined} remoteVersion
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @instance
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.prototype.remoteVersion = null;

        /**
         * Creates a new DiffCurrentAndRemoteFolderVersionsRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @static
         * @param {fs.IDiffCurrentAndRemoteFolderVersionsRequestBody=} [properties] Properties to set
         * @returns {fs.DiffCurrentAndRemoteFolderVersionsRequestBody} DiffCurrentAndRemoteFolderVersionsRequestBody instance
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.create = function create(properties) {
            return new DiffCurrentAndRemoteFolderVersionsRequestBody(properties);
        };

        /**
         * Encodes the specified DiffCurrentAndRemoteFolderVersionsRequestBody message. Does not implicitly {@link fs.DiffCurrentAndRemoteFolderVersionsRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @static
         * @param {fs.IDiffCurrentAndRemoteFolderVersionsRequestBody} message DiffCurrentAndRemoteFolderVersionsRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                $root.common.UInt64Value.encode(message.remoteVersion, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DiffCurrentAndRemoteFolderVersionsRequestBody message, length delimited. Does not implicitly {@link fs.DiffCurrentAndRemoteFolderVersionsRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @static
         * @param {fs.IDiffCurrentAndRemoteFolderVersionsRequestBody} message DiffCurrentAndRemoteFolderVersionsRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a DiffCurrentAndRemoteFolderVersionsRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.DiffCurrentAndRemoteFolderVersionsRequestBody} DiffCurrentAndRemoteFolderVersionsRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.DiffCurrentAndRemoteFolderVersionsRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.remoteVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DiffCurrentAndRemoteFolderVersionsRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.DiffCurrentAndRemoteFolderVersionsRequestBody} DiffCurrentAndRemoteFolderVersionsRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DiffCurrentAndRemoteFolderVersionsRequestBody message.
         * @function verify
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion")) {
                var error = $root.common.UInt64Value.verify(message.remoteVersion, long + 1);
                if (error)
                    return "remoteVersion." + error;
            }
            return null;
        };

        /**
         * Creates a DiffCurrentAndRemoteFolderVersionsRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.DiffCurrentAndRemoteFolderVersionsRequestBody} DiffCurrentAndRemoteFolderVersionsRequestBody
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.DiffCurrentAndRemoteFolderVersionsRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.DiffCurrentAndRemoteFolderVersionsRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.DiffCurrentAndRemoteFolderVersionsRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.remoteVersion != null) {
                if (!$util.isObject(object.remoteVersion))
                    throw TypeError(".fs.DiffCurrentAndRemoteFolderVersionsRequestBody.remoteVersion: object expected");
                message.remoteVersion = $root.common.UInt64Value.fromObject(object.remoteVersion, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a DiffCurrentAndRemoteFolderVersionsRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @static
         * @param {fs.DiffCurrentAndRemoteFolderVersionsRequestBody} message DiffCurrentAndRemoteFolderVersionsRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.remoteVersion = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                object.remoteVersion = $root.common.UInt64Value.toObject(message.remoteVersion, options, q + 1);
            return object;
        };

        /**
         * Converts this DiffCurrentAndRemoteFolderVersionsRequestBody to JSON.
         * @function toJSON
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DiffCurrentAndRemoteFolderVersionsRequestBody
         * @function getTypeUrl
         * @memberof fs.DiffCurrentAndRemoteFolderVersionsRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DiffCurrentAndRemoteFolderVersionsRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.DiffCurrentAndRemoteFolderVersionsRequestBody";
        };

        return DiffCurrentAndRemoteFolderVersionsRequestBody;
    })();

    fs.DiffCurrentAndRemoteReplyBody = (function() {

        /**
         * Properties of a DiffCurrentAndRemoteReplyBody.
         * @memberof fs
         * @interface IDiffCurrentAndRemoteReplyBody
         * @property {fs.IFolderDiff|null} [diff] DiffCurrentAndRemoteReplyBody diff
         */

        /**
         * Constructs a new DiffCurrentAndRemoteReplyBody.
         * @memberof fs
         * @classdesc Represents a DiffCurrentAndRemoteReplyBody.
         * @implements IDiffCurrentAndRemoteReplyBody
         * @constructor
         * @param {fs.IDiffCurrentAndRemoteReplyBody=} [properties] Properties to set
         */
        function DiffCurrentAndRemoteReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * DiffCurrentAndRemoteReplyBody diff.
         * @member {fs.IFolderDiff|null|undefined} diff
         * @memberof fs.DiffCurrentAndRemoteReplyBody
         * @instance
         */
        DiffCurrentAndRemoteReplyBody.prototype.diff = null;

        /**
         * Creates a new DiffCurrentAndRemoteReplyBody instance using the specified properties.
         * @function create
         * @memberof fs.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {fs.IDiffCurrentAndRemoteReplyBody=} [properties] Properties to set
         * @returns {fs.DiffCurrentAndRemoteReplyBody} DiffCurrentAndRemoteReplyBody instance
         */
        DiffCurrentAndRemoteReplyBody.create = function create(properties) {
            return new DiffCurrentAndRemoteReplyBody(properties);
        };

        /**
         * Encodes the specified DiffCurrentAndRemoteReplyBody message. Does not implicitly {@link fs.DiffCurrentAndRemoteReplyBody.verify|verify} messages.
         * @function encode
         * @memberof fs.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {fs.IDiffCurrentAndRemoteReplyBody} message DiffCurrentAndRemoteReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DiffCurrentAndRemoteReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.diff != null && Object.hasOwnProperty.call(message, "diff"))
                $root.fs.FolderDiff.encode(message.diff, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified DiffCurrentAndRemoteReplyBody message, length delimited. Does not implicitly {@link fs.DiffCurrentAndRemoteReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {fs.IDiffCurrentAndRemoteReplyBody} message DiffCurrentAndRemoteReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        DiffCurrentAndRemoteReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a DiffCurrentAndRemoteReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.DiffCurrentAndRemoteReplyBody} DiffCurrentAndRemoteReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DiffCurrentAndRemoteReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.DiffCurrentAndRemoteReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.diff = $root.fs.FolderDiff.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a DiffCurrentAndRemoteReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.DiffCurrentAndRemoteReplyBody} DiffCurrentAndRemoteReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        DiffCurrentAndRemoteReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a DiffCurrentAndRemoteReplyBody message.
         * @function verify
         * @memberof fs.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        DiffCurrentAndRemoteReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.diff != null && Object.hasOwnProperty.call(message, "diff")) {
                var error = $root.fs.FolderDiff.verify(message.diff, long + 1);
                if (error)
                    return "diff." + error;
            }
            return null;
        };

        /**
         * Creates a DiffCurrentAndRemoteReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.DiffCurrentAndRemoteReplyBody} DiffCurrentAndRemoteReplyBody
         */
        DiffCurrentAndRemoteReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.DiffCurrentAndRemoteReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.DiffCurrentAndRemoteReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.DiffCurrentAndRemoteReplyBody();
            if (object.diff != null) {
                if (!$util.isObject(object.diff))
                    throw TypeError(".fs.DiffCurrentAndRemoteReplyBody.diff: object expected");
                message.diff = $root.fs.FolderDiff.fromObject(object.diff, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a DiffCurrentAndRemoteReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {fs.DiffCurrentAndRemoteReplyBody} message DiffCurrentAndRemoteReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        DiffCurrentAndRemoteReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.diff = null;
            if (message.diff != null && Object.hasOwnProperty.call(message, "diff"))
                object.diff = $root.fs.FolderDiff.toObject(message.diff, options, q + 1);
            return object;
        };

        /**
         * Converts this DiffCurrentAndRemoteReplyBody to JSON.
         * @function toJSON
         * @memberof fs.DiffCurrentAndRemoteReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        DiffCurrentAndRemoteReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for DiffCurrentAndRemoteReplyBody
         * @function getTypeUrl
         * @memberof fs.DiffCurrentAndRemoteReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        DiffCurrentAndRemoteReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.DiffCurrentAndRemoteReplyBody";
        };

        return DiffCurrentAndRemoteReplyBody;
    })();

    fs.FolderDiff = (function() {

        /**
         * Properties of a FolderDiff.
         * @memberof fs
         * @interface IFolderDiff
         * @property {number|Long|null} [currentVersion] FolderDiff currentVersion
         * @property {boolean|null} [isCurrentLocal] FolderDiff isCurrentLocal
         * @property {common.IUInt64Value|null} [remoteVersion] FolderDiff remoteVersion
         * @property {common.IUInt64Value|null} [syncedVersion] FolderDiff syncedVersion
         * @property {boolean|null} [isRemoteRemoved] FolderDiff isRemoteRemoved
         * @property {file.ITimeStampsDiff|null} [ctime] FolderDiff ctime
         * @property {file.ITimeStampsDiff|null} [mtime] FolderDiff mtime
         * @property {Array.<file.IXAttrDiff>|null} [xattrs] FolderDiff xattrs
         * @property {fs.FolderDiff.IItemsByBranches|null} [removed] FolderDiff removed
         * @property {Array.<fs.FolderDiff.IRenamed>|null} [renamed] FolderDiff renamed
         * @property {fs.FolderDiff.IItemsByBranches|null} [added] FolderDiff added
         * @property {Array.<fs.FolderDiff.IRekeyed>|null} [rekeyed] FolderDiff rekeyed
         * @property {Array.<string>|null} [nameOverlaps] FolderDiff nameOverlaps
         */

        /**
         * Constructs a new FolderDiff.
         * @memberof fs
         * @classdesc Represents a FolderDiff.
         * @implements IFolderDiff
         * @constructor
         * @param {fs.IFolderDiff=} [properties] Properties to set
         */
        function FolderDiff(properties) {
            this.xattrs = [];
            this.renamed = [];
            this.rekeyed = [];
            this.nameOverlaps = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FolderDiff currentVersion.
         * @member {number|Long} currentVersion
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.currentVersion = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * FolderDiff isCurrentLocal.
         * @member {boolean} isCurrentLocal
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.isCurrentLocal = false;

        /**
         * FolderDiff remoteVersion.
         * @member {common.IUInt64Value|null|undefined} remoteVersion
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.remoteVersion = null;

        /**
         * FolderDiff syncedVersion.
         * @member {common.IUInt64Value|null|undefined} syncedVersion
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.syncedVersion = null;

        /**
         * FolderDiff isRemoteRemoved.
         * @member {boolean} isRemoteRemoved
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.isRemoteRemoved = false;

        /**
         * FolderDiff ctime.
         * @member {file.ITimeStampsDiff|null|undefined} ctime
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.ctime = null;

        /**
         * FolderDiff mtime.
         * @member {file.ITimeStampsDiff|null|undefined} mtime
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.mtime = null;

        /**
         * FolderDiff xattrs.
         * @member {Array.<file.IXAttrDiff>} xattrs
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.xattrs = $util.emptyArray;

        /**
         * FolderDiff removed.
         * @member {fs.FolderDiff.IItemsByBranches|null|undefined} removed
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.removed = null;

        /**
         * FolderDiff renamed.
         * @member {Array.<fs.FolderDiff.IRenamed>} renamed
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.renamed = $util.emptyArray;

        /**
         * FolderDiff added.
         * @member {fs.FolderDiff.IItemsByBranches|null|undefined} added
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.added = null;

        /**
         * FolderDiff rekeyed.
         * @member {Array.<fs.FolderDiff.IRekeyed>} rekeyed
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.rekeyed = $util.emptyArray;

        /**
         * FolderDiff nameOverlaps.
         * @member {Array.<string>} nameOverlaps
         * @memberof fs.FolderDiff
         * @instance
         */
        FolderDiff.prototype.nameOverlaps = $util.emptyArray;

        /**
         * Creates a new FolderDiff instance using the specified properties.
         * @function create
         * @memberof fs.FolderDiff
         * @static
         * @param {fs.IFolderDiff=} [properties] Properties to set
         * @returns {fs.FolderDiff} FolderDiff instance
         */
        FolderDiff.create = function create(properties) {
            return new FolderDiff(properties);
        };

        /**
         * Encodes the specified FolderDiff message. Does not implicitly {@link fs.FolderDiff.verify|verify} messages.
         * @function encode
         * @memberof fs.FolderDiff
         * @static
         * @param {fs.IFolderDiff} message FolderDiff message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FolderDiff.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.currentVersion);
            if (message.isCurrentLocal != null && Object.hasOwnProperty.call(message, "isCurrentLocal"))
                writer.uint32(/* id 2, wireType 0 =*/16).bool(message.isCurrentLocal);
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                $root.common.UInt64Value.encode(message.remoteVersion, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            if (message.syncedVersion != null && Object.hasOwnProperty.call(message, "syncedVersion"))
                $root.common.UInt64Value.encode(message.syncedVersion, writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
            if (message.isRemoteRemoved != null && Object.hasOwnProperty.call(message, "isRemoteRemoved"))
                writer.uint32(/* id 5, wireType 0 =*/40).bool(message.isRemoteRemoved);
            if (message.ctime != null && Object.hasOwnProperty.call(message, "ctime"))
                $root.file.TimeStampsDiff.encode(message.ctime, writer.uint32(/* id 6, wireType 2 =*/50).fork(), q + 1).ldelim();
            if (message.mtime != null && Object.hasOwnProperty.call(message, "mtime"))
                $root.file.TimeStampsDiff.encode(message.mtime, writer.uint32(/* id 7, wireType 2 =*/58).fork(), q + 1).ldelim();
            if (message.xattrs != null && message.xattrs.length)
                for (var i = 0; i < message.xattrs.length; ++i)
                    $root.file.XAttrDiff.encode(message.xattrs[i], writer.uint32(/* id 8, wireType 2 =*/66).fork(), q + 1).ldelim();
            if (message.removed != null && Object.hasOwnProperty.call(message, "removed"))
                $root.fs.FolderDiff.ItemsByBranches.encode(message.removed, writer.uint32(/* id 11, wireType 2 =*/90).fork(), q + 1).ldelim();
            if (message.renamed != null && message.renamed.length)
                for (var i = 0; i < message.renamed.length; ++i)
                    $root.fs.FolderDiff.Renamed.encode(message.renamed[i], writer.uint32(/* id 12, wireType 2 =*/98).fork(), q + 1).ldelim();
            if (message.added != null && Object.hasOwnProperty.call(message, "added"))
                $root.fs.FolderDiff.ItemsByBranches.encode(message.added, writer.uint32(/* id 13, wireType 2 =*/106).fork(), q + 1).ldelim();
            if (message.rekeyed != null && message.rekeyed.length)
                for (var i = 0; i < message.rekeyed.length; ++i)
                    $root.fs.FolderDiff.Rekeyed.encode(message.rekeyed[i], writer.uint32(/* id 14, wireType 2 =*/114).fork(), q + 1).ldelim();
            if (message.nameOverlaps != null && message.nameOverlaps.length)
                for (var i = 0; i < message.nameOverlaps.length; ++i)
                    writer.uint32(/* id 15, wireType 2 =*/122).string(message.nameOverlaps[i]);
            return writer;
        };

        /**
         * Encodes the specified FolderDiff message, length delimited. Does not implicitly {@link fs.FolderDiff.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FolderDiff
         * @static
         * @param {fs.IFolderDiff} message FolderDiff message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FolderDiff.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FolderDiff message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FolderDiff
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FolderDiff} FolderDiff
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FolderDiff.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FolderDiff();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.currentVersion = reader.uint64();
                        break;
                    }
                case 2: {
                        message.isCurrentLocal = reader.bool();
                        break;
                    }
                case 3: {
                        message.remoteVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 4: {
                        message.syncedVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 5: {
                        message.isRemoteRemoved = reader.bool();
                        break;
                    }
                case 6: {
                        message.ctime = $root.file.TimeStampsDiff.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 7: {
                        message.mtime = $root.file.TimeStampsDiff.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 8: {
                        if (!(message.xattrs && message.xattrs.length))
                            message.xattrs = [];
                        message.xattrs.push($root.file.XAttrDiff.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                case 11: {
                        message.removed = $root.fs.FolderDiff.ItemsByBranches.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 12: {
                        if (!(message.renamed && message.renamed.length))
                            message.renamed = [];
                        message.renamed.push($root.fs.FolderDiff.Renamed.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                case 13: {
                        message.added = $root.fs.FolderDiff.ItemsByBranches.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                case 14: {
                        if (!(message.rekeyed && message.rekeyed.length))
                            message.rekeyed = [];
                        message.rekeyed.push($root.fs.FolderDiff.Rekeyed.decode(reader, reader.uint32(), undefined, long + 1));
                        break;
                    }
                case 15: {
                        if (!(message.nameOverlaps && message.nameOverlaps.length))
                            message.nameOverlaps = [];
                        message.nameOverlaps.push(reader.string());
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FolderDiff message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FolderDiff
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FolderDiff} FolderDiff
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FolderDiff.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FolderDiff message.
         * @function verify
         * @memberof fs.FolderDiff
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FolderDiff.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion"))
                if (!$util.isInteger(message.currentVersion) && !(message.currentVersion && $util.isInteger(message.currentVersion.low) && $util.isInteger(message.currentVersion.high)))
                    return "currentVersion: integer|Long expected";
            if (message.isCurrentLocal != null && Object.hasOwnProperty.call(message, "isCurrentLocal"))
                if (typeof message.isCurrentLocal !== "boolean")
                    return "isCurrentLocal: boolean expected";
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion")) {
                var error = $root.common.UInt64Value.verify(message.remoteVersion, long + 1);
                if (error)
                    return "remoteVersion." + error;
            }
            if (message.syncedVersion != null && Object.hasOwnProperty.call(message, "syncedVersion")) {
                var error = $root.common.UInt64Value.verify(message.syncedVersion, long + 1);
                if (error)
                    return "syncedVersion." + error;
            }
            if (message.isRemoteRemoved != null && Object.hasOwnProperty.call(message, "isRemoteRemoved"))
                if (typeof message.isRemoteRemoved !== "boolean")
                    return "isRemoteRemoved: boolean expected";
            if (message.ctime != null && Object.hasOwnProperty.call(message, "ctime")) {
                var error = $root.file.TimeStampsDiff.verify(message.ctime, long + 1);
                if (error)
                    return "ctime." + error;
            }
            if (message.mtime != null && Object.hasOwnProperty.call(message, "mtime")) {
                var error = $root.file.TimeStampsDiff.verify(message.mtime, long + 1);
                if (error)
                    return "mtime." + error;
            }
            if (message.xattrs != null && Object.hasOwnProperty.call(message, "xattrs")) {
                if (!Array.isArray(message.xattrs))
                    return "xattrs: array expected";
                for (var i = 0; i < message.xattrs.length; ++i) {
                    var error = $root.file.XAttrDiff.verify(message.xattrs[i], long + 1);
                    if (error)
                        return "xattrs." + error;
                }
            }
            if (message.removed != null && Object.hasOwnProperty.call(message, "removed")) {
                var error = $root.fs.FolderDiff.ItemsByBranches.verify(message.removed, long + 1);
                if (error)
                    return "removed." + error;
            }
            if (message.renamed != null && Object.hasOwnProperty.call(message, "renamed")) {
                if (!Array.isArray(message.renamed))
                    return "renamed: array expected";
                for (var i = 0; i < message.renamed.length; ++i) {
                    var error = $root.fs.FolderDiff.Renamed.verify(message.renamed[i], long + 1);
                    if (error)
                        return "renamed." + error;
                }
            }
            if (message.added != null && Object.hasOwnProperty.call(message, "added")) {
                var error = $root.fs.FolderDiff.ItemsByBranches.verify(message.added, long + 1);
                if (error)
                    return "added." + error;
            }
            if (message.rekeyed != null && Object.hasOwnProperty.call(message, "rekeyed")) {
                if (!Array.isArray(message.rekeyed))
                    return "rekeyed: array expected";
                for (var i = 0; i < message.rekeyed.length; ++i) {
                    var error = $root.fs.FolderDiff.Rekeyed.verify(message.rekeyed[i], long + 1);
                    if (error)
                        return "rekeyed." + error;
                }
            }
            if (message.nameOverlaps != null && Object.hasOwnProperty.call(message, "nameOverlaps")) {
                if (!Array.isArray(message.nameOverlaps))
                    return "nameOverlaps: array expected";
                for (var i = 0; i < message.nameOverlaps.length; ++i)
                    if (!$util.isString(message.nameOverlaps[i]))
                        return "nameOverlaps: string[] expected";
            }
            return null;
        };

        /**
         * Creates a FolderDiff message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FolderDiff
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FolderDiff} FolderDiff
         */
        FolderDiff.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FolderDiff)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FolderDiff: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FolderDiff();
            if (object.currentVersion != null)
                if ($util.Long)
                    message.currentVersion = $util.Long.fromValue(object.currentVersion, true);
                else if (typeof object.currentVersion === "string")
                    message.currentVersion = parseInt(object.currentVersion, 10);
                else if (typeof object.currentVersion === "number")
                    message.currentVersion = object.currentVersion;
                else if (typeof object.currentVersion === "object")
                    message.currentVersion = new $util.LongBits(object.currentVersion.low >>> 0, object.currentVersion.high >>> 0).toNumber(true);
            if (object.isCurrentLocal != null)
                message.isCurrentLocal = Boolean(object.isCurrentLocal);
            if (object.remoteVersion != null) {
                if (!$util.isObject(object.remoteVersion))
                    throw TypeError(".fs.FolderDiff.remoteVersion: object expected");
                message.remoteVersion = $root.common.UInt64Value.fromObject(object.remoteVersion, long + 1);
            }
            if (object.syncedVersion != null) {
                if (!$util.isObject(object.syncedVersion))
                    throw TypeError(".fs.FolderDiff.syncedVersion: object expected");
                message.syncedVersion = $root.common.UInt64Value.fromObject(object.syncedVersion, long + 1);
            }
            if (object.isRemoteRemoved != null)
                message.isRemoteRemoved = Boolean(object.isRemoteRemoved);
            if (object.ctime != null) {
                if (!$util.isObject(object.ctime))
                    throw TypeError(".fs.FolderDiff.ctime: object expected");
                message.ctime = $root.file.TimeStampsDiff.fromObject(object.ctime, long + 1);
            }
            if (object.mtime != null) {
                if (!$util.isObject(object.mtime))
                    throw TypeError(".fs.FolderDiff.mtime: object expected");
                message.mtime = $root.file.TimeStampsDiff.fromObject(object.mtime, long + 1);
            }
            if (object.xattrs) {
                if (!Array.isArray(object.xattrs))
                    throw TypeError(".fs.FolderDiff.xattrs: array expected");
                message.xattrs = [];
                for (var i = 0; i < object.xattrs.length; ++i) {
                    if (!$util.isObject(object.xattrs[i]))
                        throw TypeError(".fs.FolderDiff.xattrs: object expected");
                    message.xattrs[i] = $root.file.XAttrDiff.fromObject(object.xattrs[i], long + 1);
                }
            }
            if (object.removed != null) {
                if (!$util.isObject(object.removed))
                    throw TypeError(".fs.FolderDiff.removed: object expected");
                message.removed = $root.fs.FolderDiff.ItemsByBranches.fromObject(object.removed, long + 1);
            }
            if (object.renamed) {
                if (!Array.isArray(object.renamed))
                    throw TypeError(".fs.FolderDiff.renamed: array expected");
                message.renamed = [];
                for (var i = 0; i < object.renamed.length; ++i) {
                    if (!$util.isObject(object.renamed[i]))
                        throw TypeError(".fs.FolderDiff.renamed: object expected");
                    message.renamed[i] = $root.fs.FolderDiff.Renamed.fromObject(object.renamed[i], long + 1);
                }
            }
            if (object.added != null) {
                if (!$util.isObject(object.added))
                    throw TypeError(".fs.FolderDiff.added: object expected");
                message.added = $root.fs.FolderDiff.ItemsByBranches.fromObject(object.added, long + 1);
            }
            if (object.rekeyed) {
                if (!Array.isArray(object.rekeyed))
                    throw TypeError(".fs.FolderDiff.rekeyed: array expected");
                message.rekeyed = [];
                for (var i = 0; i < object.rekeyed.length; ++i) {
                    if (!$util.isObject(object.rekeyed[i]))
                        throw TypeError(".fs.FolderDiff.rekeyed: object expected");
                    message.rekeyed[i] = $root.fs.FolderDiff.Rekeyed.fromObject(object.rekeyed[i], long + 1);
                }
            }
            if (object.nameOverlaps) {
                if (!Array.isArray(object.nameOverlaps))
                    throw TypeError(".fs.FolderDiff.nameOverlaps: array expected");
                message.nameOverlaps = [];
                for (var i = 0; i < object.nameOverlaps.length; ++i)
                    message.nameOverlaps[i] = String(object.nameOverlaps[i]);
            }
            return message;
        };

        /**
         * Creates a plain object from a FolderDiff message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FolderDiff
         * @static
         * @param {fs.FolderDiff} message FolderDiff
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FolderDiff.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.arrays || options.defaults) {
                object.xattrs = [];
                object.renamed = [];
                object.rekeyed = [];
                object.nameOverlaps = [];
            }
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.currentVersion = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : typeof BigInt !== "undefined" && options.longs === BigInt ? long.toBigInt() : long;
                } else
                    object.currentVersion = options.longs === String ? "0" : typeof BigInt !== "undefined" && options.longs === BigInt ? BigInt("0") : 0;
                object.isCurrentLocal = false;
                object.remoteVersion = null;
                object.syncedVersion = null;
                object.isRemoteRemoved = false;
                object.ctime = null;
                object.mtime = null;
                object.removed = null;
                object.added = null;
            }
            if (message.currentVersion != null && Object.hasOwnProperty.call(message, "currentVersion"))
                if (typeof BigInt !== "undefined" && options.longs === BigInt)
                    object.currentVersion = typeof message.currentVersion === "number" ? BigInt(message.currentVersion) : $util.Long.fromBits(message.currentVersion.low >>> 0, message.currentVersion.high >>> 0, true).toBigInt();
                else if (typeof message.currentVersion === "number")
                    object.currentVersion = options.longs === String ? String(message.currentVersion) : message.currentVersion;
                else
                    object.currentVersion = options.longs === String ? $util.Long.prototype.toString.call(message.currentVersion) : options.longs === Number ? new $util.LongBits(message.currentVersion.low >>> 0, message.currentVersion.high >>> 0).toNumber(true) : message.currentVersion;
            if (message.isCurrentLocal != null && Object.hasOwnProperty.call(message, "isCurrentLocal"))
                object.isCurrentLocal = message.isCurrentLocal;
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                object.remoteVersion = $root.common.UInt64Value.toObject(message.remoteVersion, options, q + 1);
            if (message.syncedVersion != null && Object.hasOwnProperty.call(message, "syncedVersion"))
                object.syncedVersion = $root.common.UInt64Value.toObject(message.syncedVersion, options, q + 1);
            if (message.isRemoteRemoved != null && Object.hasOwnProperty.call(message, "isRemoteRemoved"))
                object.isRemoteRemoved = message.isRemoteRemoved;
            if (message.ctime != null && Object.hasOwnProperty.call(message, "ctime"))
                object.ctime = $root.file.TimeStampsDiff.toObject(message.ctime, options, q + 1);
            if (message.mtime != null && Object.hasOwnProperty.call(message, "mtime"))
                object.mtime = $root.file.TimeStampsDiff.toObject(message.mtime, options, q + 1);
            if (message.xattrs && message.xattrs.length) {
                object.xattrs = [];
                for (var j = 0; j < message.xattrs.length; ++j)
                    object.xattrs[j] = $root.file.XAttrDiff.toObject(message.xattrs[j], options, q + 1);
            }
            if (message.removed != null && Object.hasOwnProperty.call(message, "removed"))
                object.removed = $root.fs.FolderDiff.ItemsByBranches.toObject(message.removed, options, q + 1);
            if (message.renamed && message.renamed.length) {
                object.renamed = [];
                for (var j = 0; j < message.renamed.length; ++j)
                    object.renamed[j] = $root.fs.FolderDiff.Renamed.toObject(message.renamed[j], options, q + 1);
            }
            if (message.added != null && Object.hasOwnProperty.call(message, "added"))
                object.added = $root.fs.FolderDiff.ItemsByBranches.toObject(message.added, options, q + 1);
            if (message.rekeyed && message.rekeyed.length) {
                object.rekeyed = [];
                for (var j = 0; j < message.rekeyed.length; ++j)
                    object.rekeyed[j] = $root.fs.FolderDiff.Rekeyed.toObject(message.rekeyed[j], options, q + 1);
            }
            if (message.nameOverlaps && message.nameOverlaps.length) {
                object.nameOverlaps = [];
                for (var j = 0; j < message.nameOverlaps.length; ++j)
                    object.nameOverlaps[j] = message.nameOverlaps[j];
            }
            return object;
        };

        /**
         * Converts this FolderDiff to JSON.
         * @function toJSON
         * @memberof fs.FolderDiff
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FolderDiff.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FolderDiff
         * @function getTypeUrl
         * @memberof fs.FolderDiff
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FolderDiff.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FolderDiff";
        };

        FolderDiff.ItemsByBranches = (function() {

            /**
             * Properties of an ItemsByBranches.
             * @memberof fs.FolderDiff
             * @interface IItemsByBranches
             * @property {Array.<string>|null} [inLocal] ItemsByBranches inLocal
             * @property {Array.<string>|null} [inRemote] ItemsByBranches inRemote
             */

            /**
             * Constructs a new ItemsByBranches.
             * @memberof fs.FolderDiff
             * @classdesc Represents an ItemsByBranches.
             * @implements IItemsByBranches
             * @constructor
             * @param {fs.FolderDiff.IItemsByBranches=} [properties] Properties to set
             */
            function ItemsByBranches(properties) {
                this.inLocal = [];
                this.inRemote = [];
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                            this[keys[i]] = properties[keys[i]];
            }

            /**
             * ItemsByBranches inLocal.
             * @member {Array.<string>} inLocal
             * @memberof fs.FolderDiff.ItemsByBranches
             * @instance
             */
            ItemsByBranches.prototype.inLocal = $util.emptyArray;

            /**
             * ItemsByBranches inRemote.
             * @member {Array.<string>} inRemote
             * @memberof fs.FolderDiff.ItemsByBranches
             * @instance
             */
            ItemsByBranches.prototype.inRemote = $util.emptyArray;

            /**
             * Creates a new ItemsByBranches instance using the specified properties.
             * @function create
             * @memberof fs.FolderDiff.ItemsByBranches
             * @static
             * @param {fs.FolderDiff.IItemsByBranches=} [properties] Properties to set
             * @returns {fs.FolderDiff.ItemsByBranches} ItemsByBranches instance
             */
            ItemsByBranches.create = function create(properties) {
                return new ItemsByBranches(properties);
            };

            /**
             * Encodes the specified ItemsByBranches message. Does not implicitly {@link fs.FolderDiff.ItemsByBranches.verify|verify} messages.
             * @function encode
             * @memberof fs.FolderDiff.ItemsByBranches
             * @static
             * @param {fs.FolderDiff.IItemsByBranches} message ItemsByBranches message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            ItemsByBranches.encode = function encode(message, writer, q) {
                if (!writer)
                    writer = $Writer.create();
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                if (message.inLocal != null && message.inLocal.length)
                    for (var i = 0; i < message.inLocal.length; ++i)
                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.inLocal[i]);
                if (message.inRemote != null && message.inRemote.length)
                    for (var i = 0; i < message.inRemote.length; ++i)
                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.inRemote[i]);
                return writer;
            };

            /**
             * Encodes the specified ItemsByBranches message, length delimited. Does not implicitly {@link fs.FolderDiff.ItemsByBranches.verify|verify} messages.
             * @function encodeDelimited
             * @memberof fs.FolderDiff.ItemsByBranches
             * @static
             * @param {fs.FolderDiff.IItemsByBranches} message ItemsByBranches message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            ItemsByBranches.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
            };

            /**
             * Decodes an ItemsByBranches message from the specified reader or buffer.
             * @function decode
             * @memberof fs.FolderDiff.ItemsByBranches
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {fs.FolderDiff.ItemsByBranches} ItemsByBranches
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            ItemsByBranches.decode = function decode(reader, length, error, long) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                if (long === undefined)
                    long = 0;
                if (long > $Reader.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FolderDiff.ItemsByBranches();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    if (tag === error)
                        break;
                    switch (tag >>> 3) {
                    case 1: {
                            if (!(message.inLocal && message.inLocal.length))
                                message.inLocal = [];
                            message.inLocal.push(reader.string());
                            break;
                        }
                    case 2: {
                            if (!(message.inRemote && message.inRemote.length))
                                message.inRemote = [];
                            message.inRemote.push(reader.string());
                            break;
                        }
                    default:
                        reader.skipType(tag & 7, long);
                        break;
                    }
                }
                return message;
            };

            /**
             * Decodes an ItemsByBranches message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof fs.FolderDiff.ItemsByBranches
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {fs.FolderDiff.ItemsByBranches} ItemsByBranches
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            ItemsByBranches.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };

            /**
             * Verifies an ItemsByBranches message.
             * @function verify
             * @memberof fs.FolderDiff.ItemsByBranches
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            ItemsByBranches.verify = function verify(message, long) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    return "maximum nesting depth exceeded";
                if (message.inLocal != null && Object.hasOwnProperty.call(message, "inLocal")) {
                    if (!Array.isArray(message.inLocal))
                        return "inLocal: array expected";
                    for (var i = 0; i < message.inLocal.length; ++i)
                        if (!$util.isString(message.inLocal[i]))
                            return "inLocal: string[] expected";
                }
                if (message.inRemote != null && Object.hasOwnProperty.call(message, "inRemote")) {
                    if (!Array.isArray(message.inRemote))
                        return "inRemote: array expected";
                    for (var i = 0; i < message.inRemote.length; ++i)
                        if (!$util.isString(message.inRemote[i]))
                            return "inRemote: string[] expected";
                }
                return null;
            };

            /**
             * Creates an ItemsByBranches message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof fs.FolderDiff.ItemsByBranches
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {fs.FolderDiff.ItemsByBranches} ItemsByBranches
             */
            ItemsByBranches.fromObject = function fromObject(object, long) {
                if (object instanceof $root.fs.FolderDiff.ItemsByBranches)
                    return object;
                if (!$util.isObject(object))
                    throw TypeError(".fs.FolderDiff.ItemsByBranches: object expected");
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var message = new $root.fs.FolderDiff.ItemsByBranches();
                if (object.inLocal) {
                    if (!Array.isArray(object.inLocal))
                        throw TypeError(".fs.FolderDiff.ItemsByBranches.inLocal: array expected");
                    message.inLocal = [];
                    for (var i = 0; i < object.inLocal.length; ++i)
                        message.inLocal[i] = String(object.inLocal[i]);
                }
                if (object.inRemote) {
                    if (!Array.isArray(object.inRemote))
                        throw TypeError(".fs.FolderDiff.ItemsByBranches.inRemote: array expected");
                    message.inRemote = [];
                    for (var i = 0; i < object.inRemote.length; ++i)
                        message.inRemote[i] = String(object.inRemote[i]);
                }
                return message;
            };

            /**
             * Creates a plain object from an ItemsByBranches message. Also converts values to other types if specified.
             * @function toObject
             * @memberof fs.FolderDiff.ItemsByBranches
             * @static
             * @param {fs.FolderDiff.ItemsByBranches} message ItemsByBranches
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            ItemsByBranches.toObject = function toObject(message, options, q) {
                if (!options)
                    options = {};
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                var object = {};
                if (options.arrays || options.defaults) {
                    object.inLocal = [];
                    object.inRemote = [];
                }
                if (message.inLocal && message.inLocal.length) {
                    object.inLocal = [];
                    for (var j = 0; j < message.inLocal.length; ++j)
                        object.inLocal[j] = message.inLocal[j];
                }
                if (message.inRemote && message.inRemote.length) {
                    object.inRemote = [];
                    for (var j = 0; j < message.inRemote.length; ++j)
                        object.inRemote[j] = message.inRemote[j];
                }
                return object;
            };

            /**
             * Converts this ItemsByBranches to JSON.
             * @function toJSON
             * @memberof fs.FolderDiff.ItemsByBranches
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            ItemsByBranches.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };

            /**
             * Gets the default type url for ItemsByBranches
             * @function getTypeUrl
             * @memberof fs.FolderDiff.ItemsByBranches
             * @static
             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns {string} The default type url
             */
            ItemsByBranches.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
                if (typeUrlPrefix === undefined) {
                    typeUrlPrefix = "type.googleapis.com";
                }
                return typeUrlPrefix + "/fs.FolderDiff.ItemsByBranches";
            };

            return ItemsByBranches;
        })();

        FolderDiff.Renamed = (function() {

            /**
             * Properties of a Renamed.
             * @memberof fs.FolderDiff
             * @interface IRenamed
             * @property {string|null} [local] Renamed local
             * @property {string|null} [remote] Renamed remote
             * @property {string|null} [renamedIn] Renamed renamedIn
             */

            /**
             * Constructs a new Renamed.
             * @memberof fs.FolderDiff
             * @classdesc Represents a Renamed.
             * @implements IRenamed
             * @constructor
             * @param {fs.FolderDiff.IRenamed=} [properties] Properties to set
             */
            function Renamed(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                            this[keys[i]] = properties[keys[i]];
            }

            /**
             * Renamed local.
             * @member {string} local
             * @memberof fs.FolderDiff.Renamed
             * @instance
             */
            Renamed.prototype.local = "";

            /**
             * Renamed remote.
             * @member {string} remote
             * @memberof fs.FolderDiff.Renamed
             * @instance
             */
            Renamed.prototype.remote = "";

            /**
             * Renamed renamedIn.
             * @member {string} renamedIn
             * @memberof fs.FolderDiff.Renamed
             * @instance
             */
            Renamed.prototype.renamedIn = "";

            /**
             * Creates a new Renamed instance using the specified properties.
             * @function create
             * @memberof fs.FolderDiff.Renamed
             * @static
             * @param {fs.FolderDiff.IRenamed=} [properties] Properties to set
             * @returns {fs.FolderDiff.Renamed} Renamed instance
             */
            Renamed.create = function create(properties) {
                return new Renamed(properties);
            };

            /**
             * Encodes the specified Renamed message. Does not implicitly {@link fs.FolderDiff.Renamed.verify|verify} messages.
             * @function encode
             * @memberof fs.FolderDiff.Renamed
             * @static
             * @param {fs.FolderDiff.IRenamed} message Renamed message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Renamed.encode = function encode(message, writer, q) {
                if (!writer)
                    writer = $Writer.create();
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                if (message.local != null && Object.hasOwnProperty.call(message, "local"))
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.local);
                if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.remote);
                if (message.renamedIn != null && Object.hasOwnProperty.call(message, "renamedIn"))
                    writer.uint32(/* id 3, wireType 2 =*/26).string(message.renamedIn);
                return writer;
            };

            /**
             * Encodes the specified Renamed message, length delimited. Does not implicitly {@link fs.FolderDiff.Renamed.verify|verify} messages.
             * @function encodeDelimited
             * @memberof fs.FolderDiff.Renamed
             * @static
             * @param {fs.FolderDiff.IRenamed} message Renamed message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Renamed.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
            };

            /**
             * Decodes a Renamed message from the specified reader or buffer.
             * @function decode
             * @memberof fs.FolderDiff.Renamed
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {fs.FolderDiff.Renamed} Renamed
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Renamed.decode = function decode(reader, length, error, long) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                if (long === undefined)
                    long = 0;
                if (long > $Reader.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FolderDiff.Renamed();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    if (tag === error)
                        break;
                    switch (tag >>> 3) {
                    case 1: {
                            message.local = reader.string();
                            break;
                        }
                    case 2: {
                            message.remote = reader.string();
                            break;
                        }
                    case 3: {
                            message.renamedIn = reader.string();
                            break;
                        }
                    default:
                        reader.skipType(tag & 7, long);
                        break;
                    }
                }
                return message;
            };

            /**
             * Decodes a Renamed message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof fs.FolderDiff.Renamed
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {fs.FolderDiff.Renamed} Renamed
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Renamed.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };

            /**
             * Verifies a Renamed message.
             * @function verify
             * @memberof fs.FolderDiff.Renamed
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            Renamed.verify = function verify(message, long) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    return "maximum nesting depth exceeded";
                if (message.local != null && Object.hasOwnProperty.call(message, "local"))
                    if (!$util.isString(message.local))
                        return "local: string expected";
                if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                    if (!$util.isString(message.remote))
                        return "remote: string expected";
                if (message.renamedIn != null && Object.hasOwnProperty.call(message, "renamedIn"))
                    if (!$util.isString(message.renamedIn))
                        return "renamedIn: string expected";
                return null;
            };

            /**
             * Creates a Renamed message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof fs.FolderDiff.Renamed
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {fs.FolderDiff.Renamed} Renamed
             */
            Renamed.fromObject = function fromObject(object, long) {
                if (object instanceof $root.fs.FolderDiff.Renamed)
                    return object;
                if (!$util.isObject(object))
                    throw TypeError(".fs.FolderDiff.Renamed: object expected");
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var message = new $root.fs.FolderDiff.Renamed();
                if (object.local != null)
                    message.local = String(object.local);
                if (object.remote != null)
                    message.remote = String(object.remote);
                if (object.renamedIn != null)
                    message.renamedIn = String(object.renamedIn);
                return message;
            };

            /**
             * Creates a plain object from a Renamed message. Also converts values to other types if specified.
             * @function toObject
             * @memberof fs.FolderDiff.Renamed
             * @static
             * @param {fs.FolderDiff.Renamed} message Renamed
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            Renamed.toObject = function toObject(message, options, q) {
                if (!options)
                    options = {};
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                var object = {};
                if (options.defaults) {
                    object.local = "";
                    object.remote = "";
                    object.renamedIn = "";
                }
                if (message.local != null && Object.hasOwnProperty.call(message, "local"))
                    object.local = message.local;
                if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                    object.remote = message.remote;
                if (message.renamedIn != null && Object.hasOwnProperty.call(message, "renamedIn"))
                    object.renamedIn = message.renamedIn;
                return object;
            };

            /**
             * Converts this Renamed to JSON.
             * @function toJSON
             * @memberof fs.FolderDiff.Renamed
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            Renamed.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };

            /**
             * Gets the default type url for Renamed
             * @function getTypeUrl
             * @memberof fs.FolderDiff.Renamed
             * @static
             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns {string} The default type url
             */
            Renamed.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
                if (typeUrlPrefix === undefined) {
                    typeUrlPrefix = "type.googleapis.com";
                }
                return typeUrlPrefix + "/fs.FolderDiff.Renamed";
            };

            return Renamed;
        })();

        FolderDiff.Rekeyed = (function() {

            /**
             * Properties of a Rekeyed.
             * @memberof fs.FolderDiff
             * @interface IRekeyed
             * @property {string|null} [local] Rekeyed local
             * @property {string|null} [remote] Rekeyed remote
             * @property {string|null} [rekeyedIn] Rekeyed rekeyedIn
             */

            /**
             * Constructs a new Rekeyed.
             * @memberof fs.FolderDiff
             * @classdesc Represents a Rekeyed.
             * @implements IRekeyed
             * @constructor
             * @param {fs.FolderDiff.IRekeyed=} [properties] Properties to set
             */
            function Rekeyed(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                            this[keys[i]] = properties[keys[i]];
            }

            /**
             * Rekeyed local.
             * @member {string} local
             * @memberof fs.FolderDiff.Rekeyed
             * @instance
             */
            Rekeyed.prototype.local = "";

            /**
             * Rekeyed remote.
             * @member {string} remote
             * @memberof fs.FolderDiff.Rekeyed
             * @instance
             */
            Rekeyed.prototype.remote = "";

            /**
             * Rekeyed rekeyedIn.
             * @member {string} rekeyedIn
             * @memberof fs.FolderDiff.Rekeyed
             * @instance
             */
            Rekeyed.prototype.rekeyedIn = "";

            /**
             * Creates a new Rekeyed instance using the specified properties.
             * @function create
             * @memberof fs.FolderDiff.Rekeyed
             * @static
             * @param {fs.FolderDiff.IRekeyed=} [properties] Properties to set
             * @returns {fs.FolderDiff.Rekeyed} Rekeyed instance
             */
            Rekeyed.create = function create(properties) {
                return new Rekeyed(properties);
            };

            /**
             * Encodes the specified Rekeyed message. Does not implicitly {@link fs.FolderDiff.Rekeyed.verify|verify} messages.
             * @function encode
             * @memberof fs.FolderDiff.Rekeyed
             * @static
             * @param {fs.FolderDiff.IRekeyed} message Rekeyed message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Rekeyed.encode = function encode(message, writer, q) {
                if (!writer)
                    writer = $Writer.create();
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                if (message.local != null && Object.hasOwnProperty.call(message, "local"))
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.local);
                if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.remote);
                if (message.rekeyedIn != null && Object.hasOwnProperty.call(message, "rekeyedIn"))
                    writer.uint32(/* id 3, wireType 2 =*/26).string(message.rekeyedIn);
                return writer;
            };

            /**
             * Encodes the specified Rekeyed message, length delimited. Does not implicitly {@link fs.FolderDiff.Rekeyed.verify|verify} messages.
             * @function encodeDelimited
             * @memberof fs.FolderDiff.Rekeyed
             * @static
             * @param {fs.FolderDiff.IRekeyed} message Rekeyed message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Rekeyed.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
            };

            /**
             * Decodes a Rekeyed message from the specified reader or buffer.
             * @function decode
             * @memberof fs.FolderDiff.Rekeyed
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {fs.FolderDiff.Rekeyed} Rekeyed
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Rekeyed.decode = function decode(reader, length, error, long) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                if (long === undefined)
                    long = 0;
                if (long > $Reader.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FolderDiff.Rekeyed();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    if (tag === error)
                        break;
                    switch (tag >>> 3) {
                    case 1: {
                            message.local = reader.string();
                            break;
                        }
                    case 2: {
                            message.remote = reader.string();
                            break;
                        }
                    case 3: {
                            message.rekeyedIn = reader.string();
                            break;
                        }
                    default:
                        reader.skipType(tag & 7, long);
                        break;
                    }
                }
                return message;
            };

            /**
             * Decodes a Rekeyed message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof fs.FolderDiff.Rekeyed
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {fs.FolderDiff.Rekeyed} Rekeyed
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Rekeyed.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };

            /**
             * Verifies a Rekeyed message.
             * @function verify
             * @memberof fs.FolderDiff.Rekeyed
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            Rekeyed.verify = function verify(message, long) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    return "maximum nesting depth exceeded";
                if (message.local != null && Object.hasOwnProperty.call(message, "local"))
                    if (!$util.isString(message.local))
                        return "local: string expected";
                if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                    if (!$util.isString(message.remote))
                        return "remote: string expected";
                if (message.rekeyedIn != null && Object.hasOwnProperty.call(message, "rekeyedIn"))
                    if (!$util.isString(message.rekeyedIn))
                        return "rekeyedIn: string expected";
                return null;
            };

            /**
             * Creates a Rekeyed message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof fs.FolderDiff.Rekeyed
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {fs.FolderDiff.Rekeyed} Rekeyed
             */
            Rekeyed.fromObject = function fromObject(object, long) {
                if (object instanceof $root.fs.FolderDiff.Rekeyed)
                    return object;
                if (!$util.isObject(object))
                    throw TypeError(".fs.FolderDiff.Rekeyed: object expected");
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var message = new $root.fs.FolderDiff.Rekeyed();
                if (object.local != null)
                    message.local = String(object.local);
                if (object.remote != null)
                    message.remote = String(object.remote);
                if (object.rekeyedIn != null)
                    message.rekeyedIn = String(object.rekeyedIn);
                return message;
            };

            /**
             * Creates a plain object from a Rekeyed message. Also converts values to other types if specified.
             * @function toObject
             * @memberof fs.FolderDiff.Rekeyed
             * @static
             * @param {fs.FolderDiff.Rekeyed} message Rekeyed
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            Rekeyed.toObject = function toObject(message, options, q) {
                if (!options)
                    options = {};
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                var object = {};
                if (options.defaults) {
                    object.local = "";
                    object.remote = "";
                    object.rekeyedIn = "";
                }
                if (message.local != null && Object.hasOwnProperty.call(message, "local"))
                    object.local = message.local;
                if (message.remote != null && Object.hasOwnProperty.call(message, "remote"))
                    object.remote = message.remote;
                if (message.rekeyedIn != null && Object.hasOwnProperty.call(message, "rekeyedIn"))
                    object.rekeyedIn = message.rekeyedIn;
                return object;
            };

            /**
             * Converts this Rekeyed to JSON.
             * @function toJSON
             * @memberof fs.FolderDiff.Rekeyed
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            Rekeyed.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };

            /**
             * Gets the default type url for Rekeyed
             * @function getTypeUrl
             * @memberof fs.FolderDiff.Rekeyed
             * @static
             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns {string} The default type url
             */
            Rekeyed.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
                if (typeUrlPrefix === undefined) {
                    typeUrlPrefix = "type.googleapis.com";
                }
                return typeUrlPrefix + "/fs.FolderDiff.Rekeyed";
            };

            return Rekeyed;
        })();

        return FolderDiff;
    })();

    fs.RemoteChildRequestBody = (function() {

        /**
         * Properties of a RemoteChildRequestBody.
         * @memberof fs
         * @interface IRemoteChildRequestBody
         * @property {string|null} [path] RemoteChildRequestBody path
         * @property {string|null} [remoteItemName] RemoteChildRequestBody remoteItemName
         * @property {common.IUInt64Value|null} [remoteVersion] RemoteChildRequestBody remoteVersion
         */

        /**
         * Constructs a new RemoteChildRequestBody.
         * @memberof fs
         * @classdesc Represents a RemoteChildRequestBody.
         * @implements IRemoteChildRequestBody
         * @constructor
         * @param {fs.IRemoteChildRequestBody=} [properties] Properties to set
         */
        function RemoteChildRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * RemoteChildRequestBody path.
         * @member {string} path
         * @memberof fs.RemoteChildRequestBody
         * @instance
         */
        RemoteChildRequestBody.prototype.path = "";

        /**
         * RemoteChildRequestBody remoteItemName.
         * @member {string} remoteItemName
         * @memberof fs.RemoteChildRequestBody
         * @instance
         */
        RemoteChildRequestBody.prototype.remoteItemName = "";

        /**
         * RemoteChildRequestBody remoteVersion.
         * @member {common.IUInt64Value|null|undefined} remoteVersion
         * @memberof fs.RemoteChildRequestBody
         * @instance
         */
        RemoteChildRequestBody.prototype.remoteVersion = null;

        /**
         * Creates a new RemoteChildRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.RemoteChildRequestBody
         * @static
         * @param {fs.IRemoteChildRequestBody=} [properties] Properties to set
         * @returns {fs.RemoteChildRequestBody} RemoteChildRequestBody instance
         */
        RemoteChildRequestBody.create = function create(properties) {
            return new RemoteChildRequestBody(properties);
        };

        /**
         * Encodes the specified RemoteChildRequestBody message. Does not implicitly {@link fs.RemoteChildRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.RemoteChildRequestBody
         * @static
         * @param {fs.IRemoteChildRequestBody} message RemoteChildRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        RemoteChildRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.remoteItemName != null && Object.hasOwnProperty.call(message, "remoteItemName"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.remoteItemName);
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                $root.common.UInt64Value.encode(message.remoteVersion, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified RemoteChildRequestBody message, length delimited. Does not implicitly {@link fs.RemoteChildRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.RemoteChildRequestBody
         * @static
         * @param {fs.IRemoteChildRequestBody} message RemoteChildRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        RemoteChildRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a RemoteChildRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.RemoteChildRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.RemoteChildRequestBody} RemoteChildRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        RemoteChildRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.RemoteChildRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.remoteItemName = reader.string();
                        break;
                    }
                case 3: {
                        message.remoteVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a RemoteChildRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.RemoteChildRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.RemoteChildRequestBody} RemoteChildRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        RemoteChildRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a RemoteChildRequestBody message.
         * @function verify
         * @memberof fs.RemoteChildRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        RemoteChildRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.remoteItemName != null && Object.hasOwnProperty.call(message, "remoteItemName"))
                if (!$util.isString(message.remoteItemName))
                    return "remoteItemName: string expected";
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion")) {
                var error = $root.common.UInt64Value.verify(message.remoteVersion, long + 1);
                if (error)
                    return "remoteVersion." + error;
            }
            return null;
        };

        /**
         * Creates a RemoteChildRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.RemoteChildRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.RemoteChildRequestBody} RemoteChildRequestBody
         */
        RemoteChildRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.RemoteChildRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.RemoteChildRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.RemoteChildRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.remoteItemName != null)
                message.remoteItemName = String(object.remoteItemName);
            if (object.remoteVersion != null) {
                if (!$util.isObject(object.remoteVersion))
                    throw TypeError(".fs.RemoteChildRequestBody.remoteVersion: object expected");
                message.remoteVersion = $root.common.UInt64Value.fromObject(object.remoteVersion, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a RemoteChildRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.RemoteChildRequestBody
         * @static
         * @param {fs.RemoteChildRequestBody} message RemoteChildRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        RemoteChildRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.remoteItemName = "";
                object.remoteVersion = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.remoteItemName != null && Object.hasOwnProperty.call(message, "remoteItemName"))
                object.remoteItemName = message.remoteItemName;
            if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                object.remoteVersion = $root.common.UInt64Value.toObject(message.remoteVersion, options, q + 1);
            return object;
        };

        /**
         * Converts this RemoteChildRequestBody to JSON.
         * @function toJSON
         * @memberof fs.RemoteChildRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        RemoteChildRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for RemoteChildRequestBody
         * @function getTypeUrl
         * @memberof fs.RemoteChildRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        RemoteChildRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.RemoteChildRequestBody";
        };

        return RemoteChildRequestBody;
    })();

    fs.FSSyncUploadRequestBody = (function() {

        /**
         * Properties of a FSSyncUploadRequestBody.
         * @memberof fs
         * @interface IFSSyncUploadRequestBody
         * @property {string|null} [path] FSSyncUploadRequestBody path
         * @property {file.IOptionsToUploadLocal|null} [opts] FSSyncUploadRequestBody opts
         */

        /**
         * Constructs a new FSSyncUploadRequestBody.
         * @memberof fs
         * @classdesc Represents a FSSyncUploadRequestBody.
         * @implements IFSSyncUploadRequestBody
         * @constructor
         * @param {fs.IFSSyncUploadRequestBody=} [properties] Properties to set
         */
        function FSSyncUploadRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * FSSyncUploadRequestBody path.
         * @member {string} path
         * @memberof fs.FSSyncUploadRequestBody
         * @instance
         */
        FSSyncUploadRequestBody.prototype.path = "";

        /**
         * FSSyncUploadRequestBody opts.
         * @member {file.IOptionsToUploadLocal|null|undefined} opts
         * @memberof fs.FSSyncUploadRequestBody
         * @instance
         */
        FSSyncUploadRequestBody.prototype.opts = null;

        /**
         * Creates a new FSSyncUploadRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.FSSyncUploadRequestBody
         * @static
         * @param {fs.IFSSyncUploadRequestBody=} [properties] Properties to set
         * @returns {fs.FSSyncUploadRequestBody} FSSyncUploadRequestBody instance
         */
        FSSyncUploadRequestBody.create = function create(properties) {
            return new FSSyncUploadRequestBody(properties);
        };

        /**
         * Encodes the specified FSSyncUploadRequestBody message. Does not implicitly {@link fs.FSSyncUploadRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.FSSyncUploadRequestBody
         * @static
         * @param {fs.IFSSyncUploadRequestBody} message FSSyncUploadRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSSyncUploadRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                $root.file.OptionsToUploadLocal.encode(message.opts, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified FSSyncUploadRequestBody message, length delimited. Does not implicitly {@link fs.FSSyncUploadRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.FSSyncUploadRequestBody
         * @static
         * @param {fs.IFSSyncUploadRequestBody} message FSSyncUploadRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        FSSyncUploadRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes a FSSyncUploadRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.FSSyncUploadRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.FSSyncUploadRequestBody} FSSyncUploadRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSSyncUploadRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.FSSyncUploadRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.opts = $root.file.OptionsToUploadLocal.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a FSSyncUploadRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.FSSyncUploadRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.FSSyncUploadRequestBody} FSSyncUploadRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        FSSyncUploadRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a FSSyncUploadRequestBody message.
         * @function verify
         * @memberof fs.FSSyncUploadRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        FSSyncUploadRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts")) {
                var error = $root.file.OptionsToUploadLocal.verify(message.opts, long + 1);
                if (error)
                    return "opts." + error;
            }
            return null;
        };

        /**
         * Creates a FSSyncUploadRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.FSSyncUploadRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.FSSyncUploadRequestBody} FSSyncUploadRequestBody
         */
        FSSyncUploadRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.FSSyncUploadRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.FSSyncUploadRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.FSSyncUploadRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.opts != null) {
                if (!$util.isObject(object.opts))
                    throw TypeError(".fs.FSSyncUploadRequestBody.opts: object expected");
                message.opts = $root.file.OptionsToUploadLocal.fromObject(object.opts, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from a FSSyncUploadRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.FSSyncUploadRequestBody
         * @static
         * @param {fs.FSSyncUploadRequestBody} message FSSyncUploadRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        FSSyncUploadRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.opts = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                object.opts = $root.file.OptionsToUploadLocal.toObject(message.opts, options, q + 1);
            return object;
        };

        /**
         * Converts this FSSyncUploadRequestBody to JSON.
         * @function toJSON
         * @memberof fs.FSSyncUploadRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        FSSyncUploadRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for FSSyncUploadRequestBody
         * @function getTypeUrl
         * @memberof fs.FSSyncUploadRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        FSSyncUploadRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.FSSyncUploadRequestBody";
        };

        return FSSyncUploadRequestBody;
    })();

    fs.AdoptRemoteFolderItemRequestBody = (function() {

        /**
         * Properties of an AdoptRemoteFolderItemRequestBody.
         * @memberof fs
         * @interface IAdoptRemoteFolderItemRequestBody
         * @property {string|null} [path] AdoptRemoteFolderItemRequestBody path
         * @property {string|null} [itemName] AdoptRemoteFolderItemRequestBody itemName
         * @property {fs.AdoptRemoteFolderItemRequestBody.IOptions|null} [opts] AdoptRemoteFolderItemRequestBody opts
         */

        /**
         * Constructs a new AdoptRemoteFolderItemRequestBody.
         * @memberof fs
         * @classdesc Represents an AdoptRemoteFolderItemRequestBody.
         * @implements IAdoptRemoteFolderItemRequestBody
         * @constructor
         * @param {fs.IAdoptRemoteFolderItemRequestBody=} [properties] Properties to set
         */
        function AdoptRemoteFolderItemRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * AdoptRemoteFolderItemRequestBody path.
         * @member {string} path
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @instance
         */
        AdoptRemoteFolderItemRequestBody.prototype.path = "";

        /**
         * AdoptRemoteFolderItemRequestBody itemName.
         * @member {string} itemName
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @instance
         */
        AdoptRemoteFolderItemRequestBody.prototype.itemName = "";

        /**
         * AdoptRemoteFolderItemRequestBody opts.
         * @member {fs.AdoptRemoteFolderItemRequestBody.IOptions|null|undefined} opts
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @instance
         */
        AdoptRemoteFolderItemRequestBody.prototype.opts = null;

        /**
         * Creates a new AdoptRemoteFolderItemRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @static
         * @param {fs.IAdoptRemoteFolderItemRequestBody=} [properties] Properties to set
         * @returns {fs.AdoptRemoteFolderItemRequestBody} AdoptRemoteFolderItemRequestBody instance
         */
        AdoptRemoteFolderItemRequestBody.create = function create(properties) {
            return new AdoptRemoteFolderItemRequestBody(properties);
        };

        /**
         * Encodes the specified AdoptRemoteFolderItemRequestBody message. Does not implicitly {@link fs.AdoptRemoteFolderItemRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @static
         * @param {fs.IAdoptRemoteFolderItemRequestBody} message AdoptRemoteFolderItemRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AdoptRemoteFolderItemRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.itemName != null && Object.hasOwnProperty.call(message, "itemName"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.itemName);
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                $root.fs.AdoptRemoteFolderItemRequestBody.Options.encode(message.opts, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified AdoptRemoteFolderItemRequestBody message, length delimited. Does not implicitly {@link fs.AdoptRemoteFolderItemRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @static
         * @param {fs.IAdoptRemoteFolderItemRequestBody} message AdoptRemoteFolderItemRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AdoptRemoteFolderItemRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an AdoptRemoteFolderItemRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.AdoptRemoteFolderItemRequestBody} AdoptRemoteFolderItemRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AdoptRemoteFolderItemRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.AdoptRemoteFolderItemRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.itemName = reader.string();
                        break;
                    }
                case 3: {
                        message.opts = $root.fs.AdoptRemoteFolderItemRequestBody.Options.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an AdoptRemoteFolderItemRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.AdoptRemoteFolderItemRequestBody} AdoptRemoteFolderItemRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AdoptRemoteFolderItemRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an AdoptRemoteFolderItemRequestBody message.
         * @function verify
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        AdoptRemoteFolderItemRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.itemName != null && Object.hasOwnProperty.call(message, "itemName"))
                if (!$util.isString(message.itemName))
                    return "itemName: string expected";
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts")) {
                var error = $root.fs.AdoptRemoteFolderItemRequestBody.Options.verify(message.opts, long + 1);
                if (error)
                    return "opts." + error;
            }
            return null;
        };

        /**
         * Creates an AdoptRemoteFolderItemRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.AdoptRemoteFolderItemRequestBody} AdoptRemoteFolderItemRequestBody
         */
        AdoptRemoteFolderItemRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.AdoptRemoteFolderItemRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.AdoptRemoteFolderItemRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.AdoptRemoteFolderItemRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.itemName != null)
                message.itemName = String(object.itemName);
            if (object.opts != null) {
                if (!$util.isObject(object.opts))
                    throw TypeError(".fs.AdoptRemoteFolderItemRequestBody.opts: object expected");
                message.opts = $root.fs.AdoptRemoteFolderItemRequestBody.Options.fromObject(object.opts, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an AdoptRemoteFolderItemRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @static
         * @param {fs.AdoptRemoteFolderItemRequestBody} message AdoptRemoteFolderItemRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        AdoptRemoteFolderItemRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.itemName = "";
                object.opts = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.itemName != null && Object.hasOwnProperty.call(message, "itemName"))
                object.itemName = message.itemName;
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                object.opts = $root.fs.AdoptRemoteFolderItemRequestBody.Options.toObject(message.opts, options, q + 1);
            return object;
        };

        /**
         * Converts this AdoptRemoteFolderItemRequestBody to JSON.
         * @function toJSON
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        AdoptRemoteFolderItemRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for AdoptRemoteFolderItemRequestBody
         * @function getTypeUrl
         * @memberof fs.AdoptRemoteFolderItemRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        AdoptRemoteFolderItemRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.AdoptRemoteFolderItemRequestBody";
        };

        AdoptRemoteFolderItemRequestBody.Options = (function() {

            /**
             * Properties of an Options.
             * @memberof fs.AdoptRemoteFolderItemRequestBody
             * @interface IOptions
             * @property {common.IUInt64Value|null} [localVersion] Options localVersion
             * @property {common.IUInt64Value|null} [uploadVersion] Options uploadVersion
             * @property {common.IBooleanValue|null} [replaceLocalItem] Options replaceLocalItem
             * @property {common.IStringValue|null} [newItemName] Options newItemName
             */

            /**
             * Constructs a new Options.
             * @memberof fs.AdoptRemoteFolderItemRequestBody
             * @classdesc Represents an Options.
             * @implements IOptions
             * @constructor
             * @param {fs.AdoptRemoteFolderItemRequestBody.IOptions=} [properties] Properties to set
             */
            function Options(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                            this[keys[i]] = properties[keys[i]];
            }

            /**
             * Options localVersion.
             * @member {common.IUInt64Value|null|undefined} localVersion
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @instance
             */
            Options.prototype.localVersion = null;

            /**
             * Options uploadVersion.
             * @member {common.IUInt64Value|null|undefined} uploadVersion
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @instance
             */
            Options.prototype.uploadVersion = null;

            /**
             * Options replaceLocalItem.
             * @member {common.IBooleanValue|null|undefined} replaceLocalItem
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @instance
             */
            Options.prototype.replaceLocalItem = null;

            /**
             * Options newItemName.
             * @member {common.IStringValue|null|undefined} newItemName
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @instance
             */
            Options.prototype.newItemName = null;

            /**
             * Creates a new Options instance using the specified properties.
             * @function create
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @static
             * @param {fs.AdoptRemoteFolderItemRequestBody.IOptions=} [properties] Properties to set
             * @returns {fs.AdoptRemoteFolderItemRequestBody.Options} Options instance
             */
            Options.create = function create(properties) {
                return new Options(properties);
            };

            /**
             * Encodes the specified Options message. Does not implicitly {@link fs.AdoptRemoteFolderItemRequestBody.Options.verify|verify} messages.
             * @function encode
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @static
             * @param {fs.AdoptRemoteFolderItemRequestBody.IOptions} message Options message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Options.encode = function encode(message, writer, q) {
                if (!writer)
                    writer = $Writer.create();
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                    $root.common.UInt64Value.encode(message.localVersion, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
                if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion"))
                    $root.common.UInt64Value.encode(message.uploadVersion, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
                if (message.replaceLocalItem != null && Object.hasOwnProperty.call(message, "replaceLocalItem"))
                    $root.common.BooleanValue.encode(message.replaceLocalItem, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
                if (message.newItemName != null && Object.hasOwnProperty.call(message, "newItemName"))
                    $root.common.StringValue.encode(message.newItemName, writer.uint32(/* id 4, wireType 2 =*/34).fork(), q + 1).ldelim();
                return writer;
            };

            /**
             * Encodes the specified Options message, length delimited. Does not implicitly {@link fs.AdoptRemoteFolderItemRequestBody.Options.verify|verify} messages.
             * @function encodeDelimited
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @static
             * @param {fs.AdoptRemoteFolderItemRequestBody.IOptions} message Options message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Options.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
            };

            /**
             * Decodes an Options message from the specified reader or buffer.
             * @function decode
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {fs.AdoptRemoteFolderItemRequestBody.Options} Options
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Options.decode = function decode(reader, length, error, long) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                if (long === undefined)
                    long = 0;
                if (long > $Reader.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.AdoptRemoteFolderItemRequestBody.Options();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    if (tag === error)
                        break;
                    switch (tag >>> 3) {
                    case 1: {
                            message.localVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 2: {
                            message.uploadVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 3: {
                            message.replaceLocalItem = $root.common.BooleanValue.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 4: {
                            message.newItemName = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    default:
                        reader.skipType(tag & 7, long);
                        break;
                    }
                }
                return message;
            };

            /**
             * Decodes an Options message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {fs.AdoptRemoteFolderItemRequestBody.Options} Options
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Options.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };

            /**
             * Verifies an Options message.
             * @function verify
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            Options.verify = function verify(message, long) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    return "maximum nesting depth exceeded";
                if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion")) {
                    var error = $root.common.UInt64Value.verify(message.localVersion, long + 1);
                    if (error)
                        return "localVersion." + error;
                }
                if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion")) {
                    var error = $root.common.UInt64Value.verify(message.uploadVersion, long + 1);
                    if (error)
                        return "uploadVersion." + error;
                }
                if (message.replaceLocalItem != null && Object.hasOwnProperty.call(message, "replaceLocalItem")) {
                    var error = $root.common.BooleanValue.verify(message.replaceLocalItem, long + 1);
                    if (error)
                        return "replaceLocalItem." + error;
                }
                if (message.newItemName != null && Object.hasOwnProperty.call(message, "newItemName")) {
                    var error = $root.common.StringValue.verify(message.newItemName, long + 1);
                    if (error)
                        return "newItemName." + error;
                }
                return null;
            };

            /**
             * Creates an Options message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {fs.AdoptRemoteFolderItemRequestBody.Options} Options
             */
            Options.fromObject = function fromObject(object, long) {
                if (object instanceof $root.fs.AdoptRemoteFolderItemRequestBody.Options)
                    return object;
                if (!$util.isObject(object))
                    throw TypeError(".fs.AdoptRemoteFolderItemRequestBody.Options: object expected");
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var message = new $root.fs.AdoptRemoteFolderItemRequestBody.Options();
                if (object.localVersion != null) {
                    if (!$util.isObject(object.localVersion))
                        throw TypeError(".fs.AdoptRemoteFolderItemRequestBody.Options.localVersion: object expected");
                    message.localVersion = $root.common.UInt64Value.fromObject(object.localVersion, long + 1);
                }
                if (object.uploadVersion != null) {
                    if (!$util.isObject(object.uploadVersion))
                        throw TypeError(".fs.AdoptRemoteFolderItemRequestBody.Options.uploadVersion: object expected");
                    message.uploadVersion = $root.common.UInt64Value.fromObject(object.uploadVersion, long + 1);
                }
                if (object.replaceLocalItem != null) {
                    if (!$util.isObject(object.replaceLocalItem))
                        throw TypeError(".fs.AdoptRemoteFolderItemRequestBody.Options.replaceLocalItem: object expected");
                    message.replaceLocalItem = $root.common.BooleanValue.fromObject(object.replaceLocalItem, long + 1);
                }
                if (object.newItemName != null) {
                    if (!$util.isObject(object.newItemName))
                        throw TypeError(".fs.AdoptRemoteFolderItemRequestBody.Options.newItemName: object expected");
                    message.newItemName = $root.common.StringValue.fromObject(object.newItemName, long + 1);
                }
                return message;
            };

            /**
             * Creates a plain object from an Options message. Also converts values to other types if specified.
             * @function toObject
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @static
             * @param {fs.AdoptRemoteFolderItemRequestBody.Options} message Options
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            Options.toObject = function toObject(message, options, q) {
                if (!options)
                    options = {};
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                var object = {};
                if (options.defaults) {
                    object.localVersion = null;
                    object.uploadVersion = null;
                    object.replaceLocalItem = null;
                    object.newItemName = null;
                }
                if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                    object.localVersion = $root.common.UInt64Value.toObject(message.localVersion, options, q + 1);
                if (message.uploadVersion != null && Object.hasOwnProperty.call(message, "uploadVersion"))
                    object.uploadVersion = $root.common.UInt64Value.toObject(message.uploadVersion, options, q + 1);
                if (message.replaceLocalItem != null && Object.hasOwnProperty.call(message, "replaceLocalItem"))
                    object.replaceLocalItem = $root.common.BooleanValue.toObject(message.replaceLocalItem, options, q + 1);
                if (message.newItemName != null && Object.hasOwnProperty.call(message, "newItemName"))
                    object.newItemName = $root.common.StringValue.toObject(message.newItemName, options, q + 1);
                return object;
            };

            /**
             * Converts this Options to JSON.
             * @function toJSON
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            Options.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };

            /**
             * Gets the default type url for Options
             * @function getTypeUrl
             * @memberof fs.AdoptRemoteFolderItemRequestBody.Options
             * @static
             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns {string} The default type url
             */
            Options.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
                if (typeUrlPrefix === undefined) {
                    typeUrlPrefix = "type.googleapis.com";
                }
                return typeUrlPrefix + "/fs.AdoptRemoteFolderItemRequestBody.Options";
            };

            return Options;
        })();

        return AdoptRemoteFolderItemRequestBody;
    })();

    fs.AbsorbRemoteFolderChangesRequestBody = (function() {

        /**
         * Properties of an AbsorbRemoteFolderChangesRequestBody.
         * @memberof fs
         * @interface IAbsorbRemoteFolderChangesRequestBody
         * @property {string|null} [path] AbsorbRemoteFolderChangesRequestBody path
         * @property {fs.AbsorbRemoteFolderChangesRequestBody.IOptions|null} [opts] AbsorbRemoteFolderChangesRequestBody opts
         */

        /**
         * Constructs a new AbsorbRemoteFolderChangesRequestBody.
         * @memberof fs
         * @classdesc Represents an AbsorbRemoteFolderChangesRequestBody.
         * @implements IAbsorbRemoteFolderChangesRequestBody
         * @constructor
         * @param {fs.IAbsorbRemoteFolderChangesRequestBody=} [properties] Properties to set
         */
        function AbsorbRemoteFolderChangesRequestBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * AbsorbRemoteFolderChangesRequestBody path.
         * @member {string} path
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @instance
         */
        AbsorbRemoteFolderChangesRequestBody.prototype.path = "";

        /**
         * AbsorbRemoteFolderChangesRequestBody opts.
         * @member {fs.AbsorbRemoteFolderChangesRequestBody.IOptions|null|undefined} opts
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @instance
         */
        AbsorbRemoteFolderChangesRequestBody.prototype.opts = null;

        /**
         * Creates a new AbsorbRemoteFolderChangesRequestBody instance using the specified properties.
         * @function create
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @static
         * @param {fs.IAbsorbRemoteFolderChangesRequestBody=} [properties] Properties to set
         * @returns {fs.AbsorbRemoteFolderChangesRequestBody} AbsorbRemoteFolderChangesRequestBody instance
         */
        AbsorbRemoteFolderChangesRequestBody.create = function create(properties) {
            return new AbsorbRemoteFolderChangesRequestBody(properties);
        };

        /**
         * Encodes the specified AbsorbRemoteFolderChangesRequestBody message. Does not implicitly {@link fs.AbsorbRemoteFolderChangesRequestBody.verify|verify} messages.
         * @function encode
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @static
         * @param {fs.IAbsorbRemoteFolderChangesRequestBody} message AbsorbRemoteFolderChangesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AbsorbRemoteFolderChangesRequestBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.path);
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                $root.fs.AbsorbRemoteFolderChangesRequestBody.Options.encode(message.opts, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified AbsorbRemoteFolderChangesRequestBody message, length delimited. Does not implicitly {@link fs.AbsorbRemoteFolderChangesRequestBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @static
         * @param {fs.IAbsorbRemoteFolderChangesRequestBody} message AbsorbRemoteFolderChangesRequestBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AbsorbRemoteFolderChangesRequestBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an AbsorbRemoteFolderChangesRequestBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.AbsorbRemoteFolderChangesRequestBody} AbsorbRemoteFolderChangesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AbsorbRemoteFolderChangesRequestBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.AbsorbRemoteFolderChangesRequestBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.path = reader.string();
                        break;
                    }
                case 2: {
                        message.opts = $root.fs.AbsorbRemoteFolderChangesRequestBody.Options.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an AbsorbRemoteFolderChangesRequestBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.AbsorbRemoteFolderChangesRequestBody} AbsorbRemoteFolderChangesRequestBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AbsorbRemoteFolderChangesRequestBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an AbsorbRemoteFolderChangesRequestBody message.
         * @function verify
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        AbsorbRemoteFolderChangesRequestBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                if (!$util.isString(message.path))
                    return "path: string expected";
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts")) {
                var error = $root.fs.AbsorbRemoteFolderChangesRequestBody.Options.verify(message.opts, long + 1);
                if (error)
                    return "opts." + error;
            }
            return null;
        };

        /**
         * Creates an AbsorbRemoteFolderChangesRequestBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.AbsorbRemoteFolderChangesRequestBody} AbsorbRemoteFolderChangesRequestBody
         */
        AbsorbRemoteFolderChangesRequestBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.AbsorbRemoteFolderChangesRequestBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.AbsorbRemoteFolderChangesRequestBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.AbsorbRemoteFolderChangesRequestBody();
            if (object.path != null)
                message.path = String(object.path);
            if (object.opts != null) {
                if (!$util.isObject(object.opts))
                    throw TypeError(".fs.AbsorbRemoteFolderChangesRequestBody.opts: object expected");
                message.opts = $root.fs.AbsorbRemoteFolderChangesRequestBody.Options.fromObject(object.opts, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an AbsorbRemoteFolderChangesRequestBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @static
         * @param {fs.AbsorbRemoteFolderChangesRequestBody} message AbsorbRemoteFolderChangesRequestBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        AbsorbRemoteFolderChangesRequestBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults) {
                object.path = "";
                object.opts = null;
            }
            if (message.path != null && Object.hasOwnProperty.call(message, "path"))
                object.path = message.path;
            if (message.opts != null && Object.hasOwnProperty.call(message, "opts"))
                object.opts = $root.fs.AbsorbRemoteFolderChangesRequestBody.Options.toObject(message.opts, options, q + 1);
            return object;
        };

        /**
         * Converts this AbsorbRemoteFolderChangesRequestBody to JSON.
         * @function toJSON
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        AbsorbRemoteFolderChangesRequestBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for AbsorbRemoteFolderChangesRequestBody
         * @function getTypeUrl
         * @memberof fs.AbsorbRemoteFolderChangesRequestBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        AbsorbRemoteFolderChangesRequestBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.AbsorbRemoteFolderChangesRequestBody";
        };

        AbsorbRemoteFolderChangesRequestBody.Options = (function() {

            /**
             * Properties of an Options.
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody
             * @interface IOptions
             * @property {common.IUInt64Value|null} [localVersion] Options localVersion
             * @property {common.IStringValue|null} [postfixForNameOverlaps] Options postfixForNameOverlaps
             * @property {common.IUInt64Value|null} [remoteVersion] Options remoteVersion
             */

            /**
             * Constructs a new Options.
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody
             * @classdesc Represents an Options.
             * @implements IOptions
             * @constructor
             * @param {fs.AbsorbRemoteFolderChangesRequestBody.IOptions=} [properties] Properties to set
             */
            function Options(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null && keys[i] !== "__proto__")
                            this[keys[i]] = properties[keys[i]];
            }

            /**
             * Options localVersion.
             * @member {common.IUInt64Value|null|undefined} localVersion
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @instance
             */
            Options.prototype.localVersion = null;

            /**
             * Options postfixForNameOverlaps.
             * @member {common.IStringValue|null|undefined} postfixForNameOverlaps
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @instance
             */
            Options.prototype.postfixForNameOverlaps = null;

            /**
             * Options remoteVersion.
             * @member {common.IUInt64Value|null|undefined} remoteVersion
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @instance
             */
            Options.prototype.remoteVersion = null;

            /**
             * Creates a new Options instance using the specified properties.
             * @function create
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @static
             * @param {fs.AbsorbRemoteFolderChangesRequestBody.IOptions=} [properties] Properties to set
             * @returns {fs.AbsorbRemoteFolderChangesRequestBody.Options} Options instance
             */
            Options.create = function create(properties) {
                return new Options(properties);
            };

            /**
             * Encodes the specified Options message. Does not implicitly {@link fs.AbsorbRemoteFolderChangesRequestBody.Options.verify|verify} messages.
             * @function encode
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @static
             * @param {fs.AbsorbRemoteFolderChangesRequestBody.IOptions} message Options message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Options.encode = function encode(message, writer, q) {
                if (!writer)
                    writer = $Writer.create();
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                    $root.common.UInt64Value.encode(message.localVersion, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
                if (message.postfixForNameOverlaps != null && Object.hasOwnProperty.call(message, "postfixForNameOverlaps"))
                    $root.common.StringValue.encode(message.postfixForNameOverlaps, writer.uint32(/* id 2, wireType 2 =*/18).fork(), q + 1).ldelim();
                if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                    $root.common.UInt64Value.encode(message.remoteVersion, writer.uint32(/* id 3, wireType 2 =*/26).fork(), q + 1).ldelim();
                return writer;
            };

            /**
             * Encodes the specified Options message, length delimited. Does not implicitly {@link fs.AbsorbRemoteFolderChangesRequestBody.Options.verify|verify} messages.
             * @function encodeDelimited
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @static
             * @param {fs.AbsorbRemoteFolderChangesRequestBody.IOptions} message Options message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Options.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
            };

            /**
             * Decodes an Options message from the specified reader or buffer.
             * @function decode
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {fs.AbsorbRemoteFolderChangesRequestBody.Options} Options
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Options.decode = function decode(reader, length, error, long) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                if (long === undefined)
                    long = 0;
                if (long > $Reader.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.AbsorbRemoteFolderChangesRequestBody.Options();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    if (tag === error)
                        break;
                    switch (tag >>> 3) {
                    case 1: {
                            message.localVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 2: {
                            message.postfixForNameOverlaps = $root.common.StringValue.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    case 3: {
                            message.remoteVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                            break;
                        }
                    default:
                        reader.skipType(tag & 7, long);
                        break;
                    }
                }
                return message;
            };

            /**
             * Decodes an Options message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {fs.AbsorbRemoteFolderChangesRequestBody.Options} Options
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Options.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };

            /**
             * Verifies an Options message.
             * @function verify
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            Options.verify = function verify(message, long) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    return "maximum nesting depth exceeded";
                if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion")) {
                    var error = $root.common.UInt64Value.verify(message.localVersion, long + 1);
                    if (error)
                        return "localVersion." + error;
                }
                if (message.postfixForNameOverlaps != null && Object.hasOwnProperty.call(message, "postfixForNameOverlaps")) {
                    var error = $root.common.StringValue.verify(message.postfixForNameOverlaps, long + 1);
                    if (error)
                        return "postfixForNameOverlaps." + error;
                }
                if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion")) {
                    var error = $root.common.UInt64Value.verify(message.remoteVersion, long + 1);
                    if (error)
                        return "remoteVersion." + error;
                }
                return null;
            };

            /**
             * Creates an Options message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {fs.AbsorbRemoteFolderChangesRequestBody.Options} Options
             */
            Options.fromObject = function fromObject(object, long) {
                if (object instanceof $root.fs.AbsorbRemoteFolderChangesRequestBody.Options)
                    return object;
                if (!$util.isObject(object))
                    throw TypeError(".fs.AbsorbRemoteFolderChangesRequestBody.Options: object expected");
                if (long === undefined)
                    long = 0;
                if (long > $util.recursionLimit)
                    throw Error("maximum nesting depth exceeded");
                var message = new $root.fs.AbsorbRemoteFolderChangesRequestBody.Options();
                if (object.localVersion != null) {
                    if (!$util.isObject(object.localVersion))
                        throw TypeError(".fs.AbsorbRemoteFolderChangesRequestBody.Options.localVersion: object expected");
                    message.localVersion = $root.common.UInt64Value.fromObject(object.localVersion, long + 1);
                }
                if (object.postfixForNameOverlaps != null) {
                    if (!$util.isObject(object.postfixForNameOverlaps))
                        throw TypeError(".fs.AbsorbRemoteFolderChangesRequestBody.Options.postfixForNameOverlaps: object expected");
                    message.postfixForNameOverlaps = $root.common.StringValue.fromObject(object.postfixForNameOverlaps, long + 1);
                }
                if (object.remoteVersion != null) {
                    if (!$util.isObject(object.remoteVersion))
                        throw TypeError(".fs.AbsorbRemoteFolderChangesRequestBody.Options.remoteVersion: object expected");
                    message.remoteVersion = $root.common.UInt64Value.fromObject(object.remoteVersion, long + 1);
                }
                return message;
            };

            /**
             * Creates a plain object from an Options message. Also converts values to other types if specified.
             * @function toObject
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @static
             * @param {fs.AbsorbRemoteFolderChangesRequestBody.Options} message Options
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            Options.toObject = function toObject(message, options, q) {
                if (!options)
                    options = {};
                if (q === undefined)
                    q = 0;
                if (q > $util.recursionLimit)
                    throw Error("max depth exceeded");
                var object = {};
                if (options.defaults) {
                    object.localVersion = null;
                    object.postfixForNameOverlaps = null;
                    object.remoteVersion = null;
                }
                if (message.localVersion != null && Object.hasOwnProperty.call(message, "localVersion"))
                    object.localVersion = $root.common.UInt64Value.toObject(message.localVersion, options, q + 1);
                if (message.postfixForNameOverlaps != null && Object.hasOwnProperty.call(message, "postfixForNameOverlaps"))
                    object.postfixForNameOverlaps = $root.common.StringValue.toObject(message.postfixForNameOverlaps, options, q + 1);
                if (message.remoteVersion != null && Object.hasOwnProperty.call(message, "remoteVersion"))
                    object.remoteVersion = $root.common.UInt64Value.toObject(message.remoteVersion, options, q + 1);
                return object;
            };

            /**
             * Converts this Options to JSON.
             * @function toJSON
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            Options.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };

            /**
             * Gets the default type url for Options
             * @function getTypeUrl
             * @memberof fs.AbsorbRemoteFolderChangesRequestBody.Options
             * @static
             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns {string} The default type url
             */
            Options.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
                if (typeUrlPrefix === undefined) {
                    typeUrlPrefix = "type.googleapis.com";
                }
                return typeUrlPrefix + "/fs.AbsorbRemoteFolderChangesRequestBody.Options";
            };

            return Options;
        })();

        return AbsorbRemoteFolderChangesRequestBody;
    })();

    fs.AbsorbRemoteFolderChangesReplyBody = (function() {

        /**
         * Properties of an AbsorbRemoteFolderChangesReplyBody.
         * @memberof fs
         * @interface IAbsorbRemoteFolderChangesReplyBody
         * @property {common.IUInt64Value|null} [newVersion] AbsorbRemoteFolderChangesReplyBody newVersion
         */

        /**
         * Constructs a new AbsorbRemoteFolderChangesReplyBody.
         * @memberof fs
         * @classdesc Represents an AbsorbRemoteFolderChangesReplyBody.
         * @implements IAbsorbRemoteFolderChangesReplyBody
         * @constructor
         * @param {fs.IAbsorbRemoteFolderChangesReplyBody=} [properties] Properties to set
         */
        function AbsorbRemoteFolderChangesReplyBody(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null && keys[i] !== "__proto__")
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * AbsorbRemoteFolderChangesReplyBody newVersion.
         * @member {common.IUInt64Value|null|undefined} newVersion
         * @memberof fs.AbsorbRemoteFolderChangesReplyBody
         * @instance
         */
        AbsorbRemoteFolderChangesReplyBody.prototype.newVersion = null;

        /**
         * Creates a new AbsorbRemoteFolderChangesReplyBody instance using the specified properties.
         * @function create
         * @memberof fs.AbsorbRemoteFolderChangesReplyBody
         * @static
         * @param {fs.IAbsorbRemoteFolderChangesReplyBody=} [properties] Properties to set
         * @returns {fs.AbsorbRemoteFolderChangesReplyBody} AbsorbRemoteFolderChangesReplyBody instance
         */
        AbsorbRemoteFolderChangesReplyBody.create = function create(properties) {
            return new AbsorbRemoteFolderChangesReplyBody(properties);
        };

        /**
         * Encodes the specified AbsorbRemoteFolderChangesReplyBody message. Does not implicitly {@link fs.AbsorbRemoteFolderChangesReplyBody.verify|verify} messages.
         * @function encode
         * @memberof fs.AbsorbRemoteFolderChangesReplyBody
         * @static
         * @param {fs.IAbsorbRemoteFolderChangesReplyBody} message AbsorbRemoteFolderChangesReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AbsorbRemoteFolderChangesReplyBody.encode = function encode(message, writer, q) {
            if (!writer)
                writer = $Writer.create();
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            if (message.newVersion != null && Object.hasOwnProperty.call(message, "newVersion"))
                $root.common.UInt64Value.encode(message.newVersion, writer.uint32(/* id 1, wireType 2 =*/10).fork(), q + 1).ldelim();
            return writer;
        };

        /**
         * Encodes the specified AbsorbRemoteFolderChangesReplyBody message, length delimited. Does not implicitly {@link fs.AbsorbRemoteFolderChangesReplyBody.verify|verify} messages.
         * @function encodeDelimited
         * @memberof fs.AbsorbRemoteFolderChangesReplyBody
         * @static
         * @param {fs.IAbsorbRemoteFolderChangesReplyBody} message AbsorbRemoteFolderChangesReplyBody message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AbsorbRemoteFolderChangesReplyBody.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
        };

        /**
         * Decodes an AbsorbRemoteFolderChangesReplyBody message from the specified reader or buffer.
         * @function decode
         * @memberof fs.AbsorbRemoteFolderChangesReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {fs.AbsorbRemoteFolderChangesReplyBody} AbsorbRemoteFolderChangesReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AbsorbRemoteFolderChangesReplyBody.decode = function decode(reader, length, error, long) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            if (long === undefined)
                long = 0;
            if (long > $Reader.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.fs.AbsorbRemoteFolderChangesReplyBody();
            while (reader.pos < end) {
                var tag = reader.uint32();
                if (tag === error)
                    break;
                switch (tag >>> 3) {
                case 1: {
                        message.newVersion = $root.common.UInt64Value.decode(reader, reader.uint32(), undefined, long + 1);
                        break;
                    }
                default:
                    reader.skipType(tag & 7, long);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an AbsorbRemoteFolderChangesReplyBody message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof fs.AbsorbRemoteFolderChangesReplyBody
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {fs.AbsorbRemoteFolderChangesReplyBody} AbsorbRemoteFolderChangesReplyBody
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AbsorbRemoteFolderChangesReplyBody.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an AbsorbRemoteFolderChangesReplyBody message.
         * @function verify
         * @memberof fs.AbsorbRemoteFolderChangesReplyBody
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        AbsorbRemoteFolderChangesReplyBody.verify = function verify(message, long) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                return "maximum nesting depth exceeded";
            if (message.newVersion != null && Object.hasOwnProperty.call(message, "newVersion")) {
                var error = $root.common.UInt64Value.verify(message.newVersion, long + 1);
                if (error)
                    return "newVersion." + error;
            }
            return null;
        };

        /**
         * Creates an AbsorbRemoteFolderChangesReplyBody message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof fs.AbsorbRemoteFolderChangesReplyBody
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {fs.AbsorbRemoteFolderChangesReplyBody} AbsorbRemoteFolderChangesReplyBody
         */
        AbsorbRemoteFolderChangesReplyBody.fromObject = function fromObject(object, long) {
            if (object instanceof $root.fs.AbsorbRemoteFolderChangesReplyBody)
                return object;
            if (!$util.isObject(object))
                throw TypeError(".fs.AbsorbRemoteFolderChangesReplyBody: object expected");
            if (long === undefined)
                long = 0;
            if (long > $util.recursionLimit)
                throw Error("maximum nesting depth exceeded");
            var message = new $root.fs.AbsorbRemoteFolderChangesReplyBody();
            if (object.newVersion != null) {
                if (!$util.isObject(object.newVersion))
                    throw TypeError(".fs.AbsorbRemoteFolderChangesReplyBody.newVersion: object expected");
                message.newVersion = $root.common.UInt64Value.fromObject(object.newVersion, long + 1);
            }
            return message;
        };

        /**
         * Creates a plain object from an AbsorbRemoteFolderChangesReplyBody message. Also converts values to other types if specified.
         * @function toObject
         * @memberof fs.AbsorbRemoteFolderChangesReplyBody
         * @static
         * @param {fs.AbsorbRemoteFolderChangesReplyBody} message AbsorbRemoteFolderChangesReplyBody
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        AbsorbRemoteFolderChangesReplyBody.toObject = function toObject(message, options, q) {
            if (!options)
                options = {};
            if (q === undefined)
                q = 0;
            if (q > $util.recursionLimit)
                throw Error("max depth exceeded");
            var object = {};
            if (options.defaults)
                object.newVersion = null;
            if (message.newVersion != null && Object.hasOwnProperty.call(message, "newVersion"))
                object.newVersion = $root.common.UInt64Value.toObject(message.newVersion, options, q + 1);
            return object;
        };

        /**
         * Converts this AbsorbRemoteFolderChangesReplyBody to JSON.
         * @function toJSON
         * @memberof fs.AbsorbRemoteFolderChangesReplyBody
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        AbsorbRemoteFolderChangesReplyBody.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * Gets the default type url for AbsorbRemoteFolderChangesReplyBody
         * @function getTypeUrl
         * @memberof fs.AbsorbRemoteFolderChangesReplyBody
         * @static
         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns {string} The default type url
         */
        AbsorbRemoteFolderChangesReplyBody.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
            if (typeUrlPrefix === undefined) {
                typeUrlPrefix = "type.googleapis.com";
            }
            return typeUrlPrefix + "/fs.AbsorbRemoteFolderChangesReplyBody";
        };

        return AbsorbRemoteFolderChangesReplyBody;
    })();

    return fs;
})();

module.exports = $root;
