import * as $protobuf from "protobufjs";
import Long = require("long");
/** Namespace HistorySync. */
export namespace HistorySync {

    /** Properties of a NotificationSettings. */
    interface INotificationSettings {

        /** NotificationSettings messageVibrate */
        messageVibrate?: (string|null);

        /** NotificationSettings messagePopup */
        messagePopup?: (string|null);

        /** NotificationSettings messageLight */
        messageLight?: (string|null);

        /** NotificationSettings lowPriorityNotifications */
        lowPriorityNotifications?: (boolean|null);

        /** NotificationSettings reactionsMuted */
        reactionsMuted?: (boolean|null);

        /** NotificationSettings callVibrate */
        callVibrate?: (string|null);
    }

    /** Represents a NotificationSettings. */
    class NotificationSettings implements INotificationSettings {

        /**
         * Constructs a new NotificationSettings.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.INotificationSettings);

        /** NotificationSettings messageVibrate. */
        public messageVibrate: string;

        /** NotificationSettings messagePopup. */
        public messagePopup: string;

        /** NotificationSettings messageLight. */
        public messageLight: string;

        /** NotificationSettings lowPriorityNotifications. */
        public lowPriorityNotifications: boolean;

        /** NotificationSettings reactionsMuted. */
        public reactionsMuted: boolean;

        /** NotificationSettings callVibrate. */
        public callVibrate: string;

        /**
         * Creates a new NotificationSettings instance using the specified properties.
         * @param [properties] Properties to set
         * @returns NotificationSettings instance
         */
        public static create(properties?: HistorySync.INotificationSettings): HistorySync.NotificationSettings;

        /**
         * Encodes the specified NotificationSettings message. Does not implicitly {@link HistorySync.NotificationSettings.verify|verify} messages.
         * @param message NotificationSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.INotificationSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified NotificationSettings message, length delimited. Does not implicitly {@link HistorySync.NotificationSettings.verify|verify} messages.
         * @param message NotificationSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.INotificationSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a NotificationSettings message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns NotificationSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.NotificationSettings;

        /**
         * Decodes a NotificationSettings message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns NotificationSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.NotificationSettings;

        /**
         * Verifies a NotificationSettings message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a NotificationSettings message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns NotificationSettings
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.NotificationSettings;

        /**
         * Creates a plain object from a NotificationSettings message. Also converts values to other types if specified.
         * @param message NotificationSettings
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.NotificationSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this NotificationSettings to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for NotificationSettings
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an AvatarUserSettings. */
    interface IAvatarUserSettings {

        /** AvatarUserSettings fbid */
        fbid?: (string|null);

        /** AvatarUserSettings password */
        password?: (string|null);
    }

    /** Represents an AvatarUserSettings. */
    class AvatarUserSettings implements IAvatarUserSettings {

        /**
         * Constructs a new AvatarUserSettings.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IAvatarUserSettings);

        /** AvatarUserSettings fbid. */
        public fbid: string;

        /** AvatarUserSettings password. */
        public password: string;

        /**
         * Creates a new AvatarUserSettings instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AvatarUserSettings instance
         */
        public static create(properties?: HistorySync.IAvatarUserSettings): HistorySync.AvatarUserSettings;

        /**
         * Encodes the specified AvatarUserSettings message. Does not implicitly {@link HistorySync.AvatarUserSettings.verify|verify} messages.
         * @param message AvatarUserSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IAvatarUserSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AvatarUserSettings message, length delimited. Does not implicitly {@link HistorySync.AvatarUserSettings.verify|verify} messages.
         * @param message AvatarUserSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IAvatarUserSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an AvatarUserSettings message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AvatarUserSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.AvatarUserSettings;

        /**
         * Decodes an AvatarUserSettings message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AvatarUserSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.AvatarUserSettings;

        /**
         * Verifies an AvatarUserSettings message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an AvatarUserSettings message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AvatarUserSettings
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.AvatarUserSettings;

        /**
         * Creates a plain object from an AvatarUserSettings message. Also converts values to other types if specified.
         * @param message AvatarUserSettings
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.AvatarUserSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AvatarUserSettings to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AvatarUserSettings
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a PastParticipant. */
    interface IPastParticipant {

        /** PastParticipant userJid */
        userJid?: (string|null);

        /** PastParticipant leaveReason */
        leaveReason?: (HistorySync.PastParticipant.LeaveReason|null);

        /** PastParticipant leaveTs */
        leaveTs?: (number|Long|null);
    }

    /** Represents a PastParticipant. */
    class PastParticipant implements IPastParticipant {

        /**
         * Constructs a new PastParticipant.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IPastParticipant);

        /** PastParticipant userJid. */
        public userJid: string;

        /** PastParticipant leaveReason. */
        public leaveReason: HistorySync.PastParticipant.LeaveReason;

        /** PastParticipant leaveTs. */
        public leaveTs: (number|Long);

        /**
         * Creates a new PastParticipant instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PastParticipant instance
         */
        public static create(properties?: HistorySync.IPastParticipant): HistorySync.PastParticipant;

        /**
         * Encodes the specified PastParticipant message. Does not implicitly {@link HistorySync.PastParticipant.verify|verify} messages.
         * @param message PastParticipant message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IPastParticipant, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PastParticipant message, length delimited. Does not implicitly {@link HistorySync.PastParticipant.verify|verify} messages.
         * @param message PastParticipant message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IPastParticipant, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PastParticipant message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PastParticipant
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.PastParticipant;

        /**
         * Decodes a PastParticipant message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PastParticipant
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.PastParticipant;

        /**
         * Verifies a PastParticipant message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PastParticipant message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PastParticipant
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.PastParticipant;

        /**
         * Creates a plain object from a PastParticipant message. Also converts values to other types if specified.
         * @param message PastParticipant
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.PastParticipant, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PastParticipant to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PastParticipant
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace PastParticipant {

        /** LeaveReason enum. */
        enum LeaveReason {
            LEFT = 0,
            REMOVED = 1
        }
    }

    /** Properties of a PastParticipants. */
    interface IPastParticipants {

        /** PastParticipants groupJid */
        groupJid?: (string|null);

        /** PastParticipants pastParticipants */
        pastParticipants?: (HistorySync.IPastParticipant[]|null);
    }

    /** Represents a PastParticipants. */
    class PastParticipants implements IPastParticipants {

        /**
         * Constructs a new PastParticipants.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IPastParticipants);

        /** PastParticipants groupJid. */
        public groupJid: string;

        /** PastParticipants pastParticipants. */
        public pastParticipants: HistorySync.IPastParticipant[];

        /**
         * Creates a new PastParticipants instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PastParticipants instance
         */
        public static create(properties?: HistorySync.IPastParticipants): HistorySync.PastParticipants;

        /**
         * Encodes the specified PastParticipants message. Does not implicitly {@link HistorySync.PastParticipants.verify|verify} messages.
         * @param message PastParticipants message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IPastParticipants, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PastParticipants message, length delimited. Does not implicitly {@link HistorySync.PastParticipants.verify|verify} messages.
         * @param message PastParticipants message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IPastParticipants, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PastParticipants message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PastParticipants
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.PastParticipants;

        /**
         * Decodes a PastParticipants message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PastParticipants
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.PastParticipants;

        /**
         * Verifies a PastParticipants message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PastParticipants message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PastParticipants
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.PastParticipants;

        /**
         * Creates a plain object from a PastParticipants message. Also converts values to other types if specified.
         * @param message PastParticipants
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.PastParticipants, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PastParticipants to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PastParticipants
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a StickerMetadata. */
    interface IStickerMetadata {

        /** StickerMetadata url */
        url?: (string|null);

        /** StickerMetadata fileSha256 */
        fileSha256?: (Uint8Array|null);

        /** StickerMetadata fileEncSha256 */
        fileEncSha256?: (Uint8Array|null);

        /** StickerMetadata mediaKey */
        mediaKey?: (Uint8Array|null);

        /** StickerMetadata mimetype */
        mimetype?: (string|null);

        /** StickerMetadata height */
        height?: (number|null);

        /** StickerMetadata width */
        width?: (number|null);

        /** StickerMetadata directPath */
        directPath?: (string|null);

        /** StickerMetadata fileLength */
        fileLength?: (number|Long|null);

        /** StickerMetadata weight */
        weight?: (number|null);

        /** StickerMetadata lastStickerSentTs */
        lastStickerSentTs?: (number|Long|null);

        /** StickerMetadata isLottie */
        isLottie?: (boolean|null);

        /** StickerMetadata imageHash */
        imageHash?: (string|null);

        /** StickerMetadata isAvatarSticker */
        isAvatarSticker?: (boolean|null);
    }

    /** Represents a StickerMetadata. */
    class StickerMetadata implements IStickerMetadata {

        /**
         * Constructs a new StickerMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IStickerMetadata);

        /** StickerMetadata url. */
        public url: string;

        /** StickerMetadata fileSha256. */
        public fileSha256: Uint8Array;

        /** StickerMetadata fileEncSha256. */
        public fileEncSha256: Uint8Array;

        /** StickerMetadata mediaKey. */
        public mediaKey: Uint8Array;

        /** StickerMetadata mimetype. */
        public mimetype: string;

        /** StickerMetadata height. */
        public height: number;

        /** StickerMetadata width. */
        public width: number;

        /** StickerMetadata directPath. */
        public directPath: string;

        /** StickerMetadata fileLength. */
        public fileLength: (number|Long);

        /** StickerMetadata weight. */
        public weight: number;

        /** StickerMetadata lastStickerSentTs. */
        public lastStickerSentTs: (number|Long);

        /** StickerMetadata isLottie. */
        public isLottie: boolean;

        /** StickerMetadata imageHash. */
        public imageHash: string;

        /** StickerMetadata isAvatarSticker. */
        public isAvatarSticker: boolean;

        /**
         * Creates a new StickerMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns StickerMetadata instance
         */
        public static create(properties?: HistorySync.IStickerMetadata): HistorySync.StickerMetadata;

        /**
         * Encodes the specified StickerMetadata message. Does not implicitly {@link HistorySync.StickerMetadata.verify|verify} messages.
         * @param message StickerMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IStickerMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified StickerMetadata message, length delimited. Does not implicitly {@link HistorySync.StickerMetadata.verify|verify} messages.
         * @param message StickerMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IStickerMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a StickerMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns StickerMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.StickerMetadata;

        /**
         * Decodes a StickerMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns StickerMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.StickerMetadata;

        /**
         * Verifies a StickerMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a StickerMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns StickerMetadata
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.StickerMetadata;

        /**
         * Creates a plain object from a StickerMetadata message. Also converts values to other types if specified.
         * @param message StickerMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.StickerMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this StickerMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for StickerMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an AutoDownloadSettings. */
    interface IAutoDownloadSettings {

        /** AutoDownloadSettings downloadImages */
        downloadImages?: (boolean|null);

        /** AutoDownloadSettings downloadAudio */
        downloadAudio?: (boolean|null);

        /** AutoDownloadSettings downloadVideo */
        downloadVideo?: (boolean|null);

        /** AutoDownloadSettings downloadDocuments */
        downloadDocuments?: (boolean|null);
    }

    /** Represents an AutoDownloadSettings. */
    class AutoDownloadSettings implements IAutoDownloadSettings {

        /**
         * Constructs a new AutoDownloadSettings.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IAutoDownloadSettings);

        /** AutoDownloadSettings downloadImages. */
        public downloadImages: boolean;

        /** AutoDownloadSettings downloadAudio. */
        public downloadAudio: boolean;

        /** AutoDownloadSettings downloadVideo. */
        public downloadVideo: boolean;

        /** AutoDownloadSettings downloadDocuments. */
        public downloadDocuments: boolean;

        /**
         * Creates a new AutoDownloadSettings instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AutoDownloadSettings instance
         */
        public static create(properties?: HistorySync.IAutoDownloadSettings): HistorySync.AutoDownloadSettings;

        /**
         * Encodes the specified AutoDownloadSettings message. Does not implicitly {@link HistorySync.AutoDownloadSettings.verify|verify} messages.
         * @param message AutoDownloadSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IAutoDownloadSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AutoDownloadSettings message, length delimited. Does not implicitly {@link HistorySync.AutoDownloadSettings.verify|verify} messages.
         * @param message AutoDownloadSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IAutoDownloadSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an AutoDownloadSettings message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AutoDownloadSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.AutoDownloadSettings;

        /**
         * Decodes an AutoDownloadSettings message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AutoDownloadSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.AutoDownloadSettings;

        /**
         * Verifies an AutoDownloadSettings message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an AutoDownloadSettings message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AutoDownloadSettings
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.AutoDownloadSettings;

        /**
         * Creates a plain object from an AutoDownloadSettings message. Also converts values to other types if specified.
         * @param message AutoDownloadSettings
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.AutoDownloadSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AutoDownloadSettings to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AutoDownloadSettings
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a GlobalSettings. */
    interface IGlobalSettings {

        /** GlobalSettings lightThemeWallpaper */
        lightThemeWallpaper?: (HistorySync.IWallpaperSettings|null);

        /** GlobalSettings mediaVisibility */
        mediaVisibility?: (HistorySync.MediaVisibility|null);

        /** GlobalSettings darkThemeWallpaper */
        darkThemeWallpaper?: (HistorySync.IWallpaperSettings|null);

        /** GlobalSettings autoDownloadWiFi */
        autoDownloadWiFi?: (HistorySync.IAutoDownloadSettings|null);

        /** GlobalSettings autoDownloadCellular */
        autoDownloadCellular?: (HistorySync.IAutoDownloadSettings|null);

        /** GlobalSettings autoDownloadRoaming */
        autoDownloadRoaming?: (HistorySync.IAutoDownloadSettings|null);

        /** GlobalSettings showIndividualNotificationsPreview */
        showIndividualNotificationsPreview?: (boolean|null);

        /** GlobalSettings showGroupNotificationsPreview */
        showGroupNotificationsPreview?: (boolean|null);

        /** GlobalSettings disappearingModeDuration */
        disappearingModeDuration?: (number|null);

        /** GlobalSettings disappearingModeTimestamp */
        disappearingModeTimestamp?: (number|Long|null);

        /** GlobalSettings avatarUserSettings */
        avatarUserSettings?: (HistorySync.IAvatarUserSettings|null);

        /** GlobalSettings fontSize */
        fontSize?: (number|null);

        /** GlobalSettings securityNotifications */
        securityNotifications?: (boolean|null);

        /** GlobalSettings autoUnarchiveChats */
        autoUnarchiveChats?: (boolean|null);

        /** GlobalSettings videoQualityMode */
        videoQualityMode?: (number|null);

        /** GlobalSettings photoQualityMode */
        photoQualityMode?: (number|null);

        /** GlobalSettings individualNotificationSettings */
        individualNotificationSettings?: (HistorySync.INotificationSettings|null);

        /** GlobalSettings groupNotificationSettings */
        groupNotificationSettings?: (HistorySync.INotificationSettings|null);

        /** GlobalSettings chatLockSettings */
        chatLockSettings?: (ChatLockSettings.IChatLockSettings|null);

        /** GlobalSettings chatDbLidMigrationTimestamp */
        chatDbLidMigrationTimestamp?: (number|Long|null);
    }

    /** Represents a GlobalSettings. */
    class GlobalSettings implements IGlobalSettings {

        /**
         * Constructs a new GlobalSettings.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IGlobalSettings);

        /** GlobalSettings lightThemeWallpaper. */
        public lightThemeWallpaper?: (HistorySync.IWallpaperSettings|null);

        /** GlobalSettings mediaVisibility. */
        public mediaVisibility: HistorySync.MediaVisibility;

        /** GlobalSettings darkThemeWallpaper. */
        public darkThemeWallpaper?: (HistorySync.IWallpaperSettings|null);

        /** GlobalSettings autoDownloadWiFi. */
        public autoDownloadWiFi?: (HistorySync.IAutoDownloadSettings|null);

        /** GlobalSettings autoDownloadCellular. */
        public autoDownloadCellular?: (HistorySync.IAutoDownloadSettings|null);

        /** GlobalSettings autoDownloadRoaming. */
        public autoDownloadRoaming?: (HistorySync.IAutoDownloadSettings|null);

        /** GlobalSettings showIndividualNotificationsPreview. */
        public showIndividualNotificationsPreview: boolean;

        /** GlobalSettings showGroupNotificationsPreview. */
        public showGroupNotificationsPreview: boolean;

        /** GlobalSettings disappearingModeDuration. */
        public disappearingModeDuration: number;

        /** GlobalSettings disappearingModeTimestamp. */
        public disappearingModeTimestamp: (number|Long);

        /** GlobalSettings avatarUserSettings. */
        public avatarUserSettings?: (HistorySync.IAvatarUserSettings|null);

        /** GlobalSettings fontSize. */
        public fontSize: number;

        /** GlobalSettings securityNotifications. */
        public securityNotifications: boolean;

        /** GlobalSettings autoUnarchiveChats. */
        public autoUnarchiveChats: boolean;

        /** GlobalSettings videoQualityMode. */
        public videoQualityMode: number;

        /** GlobalSettings photoQualityMode. */
        public photoQualityMode: number;

        /** GlobalSettings individualNotificationSettings. */
        public individualNotificationSettings?: (HistorySync.INotificationSettings|null);

        /** GlobalSettings groupNotificationSettings. */
        public groupNotificationSettings?: (HistorySync.INotificationSettings|null);

        /** GlobalSettings chatLockSettings. */
        public chatLockSettings?: (ChatLockSettings.IChatLockSettings|null);

        /** GlobalSettings chatDbLidMigrationTimestamp. */
        public chatDbLidMigrationTimestamp: (number|Long);

        /**
         * Creates a new GlobalSettings instance using the specified properties.
         * @param [properties] Properties to set
         * @returns GlobalSettings instance
         */
        public static create(properties?: HistorySync.IGlobalSettings): HistorySync.GlobalSettings;

        /**
         * Encodes the specified GlobalSettings message. Does not implicitly {@link HistorySync.GlobalSettings.verify|verify} messages.
         * @param message GlobalSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IGlobalSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified GlobalSettings message, length delimited. Does not implicitly {@link HistorySync.GlobalSettings.verify|verify} messages.
         * @param message GlobalSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IGlobalSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a GlobalSettings message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns GlobalSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.GlobalSettings;

        /**
         * Decodes a GlobalSettings message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns GlobalSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.GlobalSettings;

        /**
         * Verifies a GlobalSettings message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a GlobalSettings message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns GlobalSettings
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.GlobalSettings;

        /**
         * Creates a plain object from a GlobalSettings message. Also converts values to other types if specified.
         * @param message GlobalSettings
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.GlobalSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this GlobalSettings to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for GlobalSettings
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a WallpaperSettings. */
    interface IWallpaperSettings {

        /** WallpaperSettings filename */
        filename?: (string|null);

        /** WallpaperSettings opacity */
        opacity?: (number|null);
    }

    /** Represents a WallpaperSettings. */
    class WallpaperSettings implements IWallpaperSettings {

        /**
         * Constructs a new WallpaperSettings.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IWallpaperSettings);

        /** WallpaperSettings filename. */
        public filename: string;

        /** WallpaperSettings opacity. */
        public opacity: number;

        /**
         * Creates a new WallpaperSettings instance using the specified properties.
         * @param [properties] Properties to set
         * @returns WallpaperSettings instance
         */
        public static create(properties?: HistorySync.IWallpaperSettings): HistorySync.WallpaperSettings;

        /**
         * Encodes the specified WallpaperSettings message. Does not implicitly {@link HistorySync.WallpaperSettings.verify|verify} messages.
         * @param message WallpaperSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IWallpaperSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified WallpaperSettings message, length delimited. Does not implicitly {@link HistorySync.WallpaperSettings.verify|verify} messages.
         * @param message WallpaperSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IWallpaperSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a WallpaperSettings message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns WallpaperSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.WallpaperSettings;

        /**
         * Decodes a WallpaperSettings message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns WallpaperSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.WallpaperSettings;

        /**
         * Verifies a WallpaperSettings message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a WallpaperSettings message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns WallpaperSettings
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.WallpaperSettings;

        /**
         * Creates a plain object from a WallpaperSettings message. Also converts values to other types if specified.
         * @param message WallpaperSettings
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.WallpaperSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this WallpaperSettings to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for WallpaperSettings
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a GroupParticipant. */
    interface IGroupParticipant {

        /** GroupParticipant userJid */
        userJid: string;

        /** GroupParticipant rank */
        rank?: (HistorySync.GroupParticipant.Rank|null);

        /** GroupParticipant memberLabel */
        memberLabel?: (E2E.IMemberLabel|null);
    }

    /** Represents a GroupParticipant. */
    class GroupParticipant implements IGroupParticipant {

        /**
         * Constructs a new GroupParticipant.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IGroupParticipant);

        /** GroupParticipant userJid. */
        public userJid: string;

        /** GroupParticipant rank. */
        public rank: HistorySync.GroupParticipant.Rank;

        /** GroupParticipant memberLabel. */
        public memberLabel?: (E2E.IMemberLabel|null);

        /**
         * Creates a new GroupParticipant instance using the specified properties.
         * @param [properties] Properties to set
         * @returns GroupParticipant instance
         */
        public static create(properties?: HistorySync.IGroupParticipant): HistorySync.GroupParticipant;

        /**
         * Encodes the specified GroupParticipant message. Does not implicitly {@link HistorySync.GroupParticipant.verify|verify} messages.
         * @param message GroupParticipant message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IGroupParticipant, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified GroupParticipant message, length delimited. Does not implicitly {@link HistorySync.GroupParticipant.verify|verify} messages.
         * @param message GroupParticipant message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IGroupParticipant, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a GroupParticipant message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns GroupParticipant
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.GroupParticipant;

        /**
         * Decodes a GroupParticipant message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns GroupParticipant
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.GroupParticipant;

        /**
         * Verifies a GroupParticipant message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a GroupParticipant message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns GroupParticipant
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.GroupParticipant;

        /**
         * Creates a plain object from a GroupParticipant message. Also converts values to other types if specified.
         * @param message GroupParticipant
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.GroupParticipant, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this GroupParticipant to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for GroupParticipant
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace GroupParticipant {

        /** Rank enum. */
        enum Rank {
            REGULAR = 0,
            ADMIN = 1,
            SUPERADMIN = 2
        }
    }

    /** Properties of a Pushname. */
    interface IPushname {

        /** Pushname id */
        id?: (string|null);

        /** Pushname pushname */
        pushname?: (string|null);
    }

    /** Represents a Pushname. */
    class Pushname implements IPushname {

        /**
         * Constructs a new Pushname.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IPushname);

        /** Pushname id. */
        public id: string;

        /** Pushname pushname. */
        public pushname: string;

        /**
         * Creates a new Pushname instance using the specified properties.
         * @param [properties] Properties to set
         * @returns Pushname instance
         */
        public static create(properties?: HistorySync.IPushname): HistorySync.Pushname;

        /**
         * Encodes the specified Pushname message. Does not implicitly {@link HistorySync.Pushname.verify|verify} messages.
         * @param message Pushname message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IPushname, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified Pushname message, length delimited. Does not implicitly {@link HistorySync.Pushname.verify|verify} messages.
         * @param message Pushname message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IPushname, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a Pushname message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Pushname
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.Pushname;

        /**
         * Decodes a Pushname message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns Pushname
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.Pushname;

        /**
         * Verifies a Pushname message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a Pushname message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Pushname
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.Pushname;

        /**
         * Creates a plain object from a Pushname message. Also converts values to other types if specified.
         * @param message Pushname
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.Pushname, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Pushname to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for Pushname
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a HistorySyncMsg. */
    interface IHistorySyncMsg {

        /** HistorySyncMsg message */
        message?: (Web.IWebMessageInfo|null);

        /** HistorySyncMsg msgOrderId */
        msgOrderId?: (number|Long|null);
    }

    /** Represents a HistorySyncMsg. */
    class HistorySyncMsg implements IHistorySyncMsg {

        /**
         * Constructs a new HistorySyncMsg.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IHistorySyncMsg);

        /** HistorySyncMsg message. */
        public message?: (Web.IWebMessageInfo|null);

        /** HistorySyncMsg msgOrderId. */
        public msgOrderId: (number|Long);

        /**
         * Creates a new HistorySyncMsg instance using the specified properties.
         * @param [properties] Properties to set
         * @returns HistorySyncMsg instance
         */
        public static create(properties?: HistorySync.IHistorySyncMsg): HistorySync.HistorySyncMsg;

        /**
         * Encodes the specified HistorySyncMsg message. Does not implicitly {@link HistorySync.HistorySyncMsg.verify|verify} messages.
         * @param message HistorySyncMsg message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IHistorySyncMsg, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified HistorySyncMsg message, length delimited. Does not implicitly {@link HistorySync.HistorySyncMsg.verify|verify} messages.
         * @param message HistorySyncMsg message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IHistorySyncMsg, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a HistorySyncMsg message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns HistorySyncMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.HistorySyncMsg;

        /**
         * Decodes a HistorySyncMsg message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns HistorySyncMsg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.HistorySyncMsg;

        /**
         * Verifies a HistorySyncMsg message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a HistorySyncMsg message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns HistorySyncMsg
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.HistorySyncMsg;

        /**
         * Creates a plain object from a HistorySyncMsg message. Also converts values to other types if specified.
         * @param message HistorySyncMsg
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.HistorySyncMsg, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this HistorySyncMsg to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for HistorySyncMsg
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an Account. */
    interface IAccount {

        /** Account lid */
        lid?: (string|null);

        /** Account username */
        username?: (string|null);

        /** Account countryCode */
        countryCode?: (string|null);

        /** Account isUsernameDeleted */
        isUsernameDeleted?: (boolean|null);
    }

    /** Represents an Account. */
    class Account implements IAccount {

        /**
         * Constructs a new Account.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IAccount);

        /** Account lid. */
        public lid: string;

        /** Account username. */
        public username: string;

        /** Account countryCode. */
        public countryCode: string;

        /** Account isUsernameDeleted. */
        public isUsernameDeleted: boolean;

        /**
         * Creates a new Account instance using the specified properties.
         * @param [properties] Properties to set
         * @returns Account instance
         */
        public static create(properties?: HistorySync.IAccount): HistorySync.Account;

        /**
         * Encodes the specified Account message. Does not implicitly {@link HistorySync.Account.verify|verify} messages.
         * @param message Account message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IAccount, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified Account message, length delimited. Does not implicitly {@link HistorySync.Account.verify|verify} messages.
         * @param message Account message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IAccount, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an Account message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Account
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.Account;

        /**
         * Decodes an Account message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns Account
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.Account;

        /**
         * Verifies an Account message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an Account message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Account
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.Account;

        /**
         * Creates a plain object from an Account message. Also converts values to other types if specified.
         * @param message Account
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.Account, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Account to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for Account
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a PhoneNumberToLIDMapping. */
    interface IPhoneNumberToLIDMapping {

        /** PhoneNumberToLIDMapping pnJid */
        pnJid?: (string|null);

        /** PhoneNumberToLIDMapping lidJid */
        lidJid?: (string|null);
    }

    /** Represents a PhoneNumberToLIDMapping. */
    class PhoneNumberToLIDMapping implements IPhoneNumberToLIDMapping {

        /**
         * Constructs a new PhoneNumberToLIDMapping.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IPhoneNumberToLIDMapping);

        /** PhoneNumberToLIDMapping pnJid. */
        public pnJid: string;

        /** PhoneNumberToLIDMapping lidJid. */
        public lidJid: string;

        /**
         * Creates a new PhoneNumberToLIDMapping instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PhoneNumberToLIDMapping instance
         */
        public static create(properties?: HistorySync.IPhoneNumberToLIDMapping): HistorySync.PhoneNumberToLIDMapping;

        /**
         * Encodes the specified PhoneNumberToLIDMapping message. Does not implicitly {@link HistorySync.PhoneNumberToLIDMapping.verify|verify} messages.
         * @param message PhoneNumberToLIDMapping message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IPhoneNumberToLIDMapping, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PhoneNumberToLIDMapping message, length delimited. Does not implicitly {@link HistorySync.PhoneNumberToLIDMapping.verify|verify} messages.
         * @param message PhoneNumberToLIDMapping message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IPhoneNumberToLIDMapping, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PhoneNumberToLIDMapping message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PhoneNumberToLIDMapping
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.PhoneNumberToLIDMapping;

        /**
         * Decodes a PhoneNumberToLIDMapping message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PhoneNumberToLIDMapping
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.PhoneNumberToLIDMapping;

        /**
         * Verifies a PhoneNumberToLIDMapping message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PhoneNumberToLIDMapping message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PhoneNumberToLIDMapping
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.PhoneNumberToLIDMapping;

        /**
         * Creates a plain object from a PhoneNumberToLIDMapping message. Also converts values to other types if specified.
         * @param message PhoneNumberToLIDMapping
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.PhoneNumberToLIDMapping, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PhoneNumberToLIDMapping to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PhoneNumberToLIDMapping
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a Conversation. */
    interface IConversation {

        /** Conversation id */
        id: string;

        /** Conversation messages */
        messages?: (HistorySync.IHistorySyncMsg[]|null);

        /** Conversation newJid */
        newJid?: (string|null);

        /** Conversation oldJid */
        oldJid?: (string|null);

        /** Conversation lastMsgTimestamp */
        lastMsgTimestamp?: (number|Long|null);

        /** Conversation unreadCount */
        unreadCount?: (number|null);

        /** Conversation readOnly */
        readOnly?: (boolean|null);

        /** Conversation endOfHistoryTransfer */
        endOfHistoryTransfer?: (boolean|null);

        /** Conversation ephemeralExpiration */
        ephemeralExpiration?: (number|null);

        /** Conversation ephemeralSettingTimestamp */
        ephemeralSettingTimestamp?: (number|Long|null);

        /** Conversation endOfHistoryTransferType */
        endOfHistoryTransferType?: (HistorySync.Conversation.EndOfHistoryTransferType|null);

        /** Conversation conversationTimestamp */
        conversationTimestamp?: (number|Long|null);

        /** Conversation name */
        name?: (string|null);

        /** Conversation pHash */
        pHash?: (string|null);

        /** Conversation notSpam */
        notSpam?: (boolean|null);

        /** Conversation archived */
        archived?: (boolean|null);

        /** Conversation disappearingMode */
        disappearingMode?: (E2E.IDisappearingMode|null);

        /** Conversation unreadMentionCount */
        unreadMentionCount?: (number|null);

        /** Conversation markedAsUnread */
        markedAsUnread?: (boolean|null);

        /** Conversation participant */
        participant?: (HistorySync.IGroupParticipant[]|null);

        /** Conversation tcToken */
        tcToken?: (Uint8Array|null);

        /** Conversation tcTokenTimestamp */
        tcTokenTimestamp?: (number|Long|null);

        /** Conversation contactPrimaryIdentityKey */
        contactPrimaryIdentityKey?: (Uint8Array|null);

        /** Conversation pinned */
        pinned?: (number|null);

        /** Conversation muteEndTime */
        muteEndTime?: (number|Long|null);

        /** Conversation wallpaper */
        wallpaper?: (HistorySync.IWallpaperSettings|null);

        /** Conversation mediaVisibility */
        mediaVisibility?: (HistorySync.MediaVisibility|null);

        /** Conversation tcTokenSenderTimestamp */
        tcTokenSenderTimestamp?: (number|Long|null);

        /** Conversation suspended */
        suspended?: (boolean|null);

        /** Conversation terminated */
        terminated?: (boolean|null);

        /** Conversation createdAt */
        createdAt?: (number|Long|null);

        /** Conversation createdBy */
        createdBy?: (string|null);

        /** Conversation description */
        description?: (string|null);

        /** Conversation support */
        support?: (boolean|null);

        /** Conversation isParentGroup */
        isParentGroup?: (boolean|null);

        /** Conversation parentGroupId */
        parentGroupId?: (string|null);

        /** Conversation isDefaultSubgroup */
        isDefaultSubgroup?: (boolean|null);

        /** Conversation displayName */
        displayName?: (string|null);

        /** Conversation pnJid */
        pnJid?: (string|null);

        /** Conversation shareOwnPn */
        shareOwnPn?: (boolean|null);

        /** Conversation pnhDuplicateLidThread */
        pnhDuplicateLidThread?: (boolean|null);

        /** Conversation lidJid */
        lidJid?: (string|null);

        /** Conversation username */
        username?: (string|null);

        /** Conversation lidOriginType */
        lidOriginType?: (string|null);

        /** Conversation commentsCount */
        commentsCount?: (number|null);

        /** Conversation locked */
        locked?: (boolean|null);

        /** Conversation systemMessageToInsert */
        systemMessageToInsert?: (HistorySync.PrivacySystemMessage|null);

        /** Conversation capiCreatedGroup */
        capiCreatedGroup?: (boolean|null);

        /** Conversation accountLid */
        accountLid?: (string|null);

        /** Conversation limitSharing */
        limitSharing?: (boolean|null);

        /** Conversation limitSharingSettingTimestamp */
        limitSharingSettingTimestamp?: (number|Long|null);

        /** Conversation limitSharingTrigger */
        limitSharingTrigger?: (Protocol.LimitSharing.TriggerType|null);

        /** Conversation limitSharingInitiatedByMe */
        limitSharingInitiatedByMe?: (boolean|null);

        /** Conversation maibaAiThreadEnabled */
        maibaAiThreadEnabled?: (boolean|null);
    }

    /** Represents a Conversation. */
    class Conversation implements IConversation {

        /**
         * Constructs a new Conversation.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IConversation);

        /** Conversation id. */
        public id: string;

        /** Conversation messages. */
        public messages: HistorySync.IHistorySyncMsg[];

        /** Conversation newJid. */
        public newJid: string;

        /** Conversation oldJid. */
        public oldJid: string;

        /** Conversation lastMsgTimestamp. */
        public lastMsgTimestamp: (number|Long);

        /** Conversation unreadCount. */
        public unreadCount: number;

        /** Conversation readOnly. */
        public readOnly: boolean;

        /** Conversation endOfHistoryTransfer. */
        public endOfHistoryTransfer: boolean;

        /** Conversation ephemeralExpiration. */
        public ephemeralExpiration: number;

        /** Conversation ephemeralSettingTimestamp. */
        public ephemeralSettingTimestamp: (number|Long);

        /** Conversation endOfHistoryTransferType. */
        public endOfHistoryTransferType: HistorySync.Conversation.EndOfHistoryTransferType;

        /** Conversation conversationTimestamp. */
        public conversationTimestamp: (number|Long);

        /** Conversation name. */
        public name: string;

        /** Conversation pHash. */
        public pHash: string;

        /** Conversation notSpam. */
        public notSpam: boolean;

        /** Conversation archived. */
        public archived: boolean;

        /** Conversation disappearingMode. */
        public disappearingMode?: (E2E.IDisappearingMode|null);

        /** Conversation unreadMentionCount. */
        public unreadMentionCount: number;

        /** Conversation markedAsUnread. */
        public markedAsUnread: boolean;

        /** Conversation participant. */
        public participant: HistorySync.IGroupParticipant[];

        /** Conversation tcToken. */
        public tcToken: Uint8Array;

        /** Conversation tcTokenTimestamp. */
        public tcTokenTimestamp: (number|Long);

        /** Conversation contactPrimaryIdentityKey. */
        public contactPrimaryIdentityKey: Uint8Array;

        /** Conversation pinned. */
        public pinned: number;

        /** Conversation muteEndTime. */
        public muteEndTime: (number|Long);

        /** Conversation wallpaper. */
        public wallpaper?: (HistorySync.IWallpaperSettings|null);

        /** Conversation mediaVisibility. */
        public mediaVisibility: HistorySync.MediaVisibility;

        /** Conversation tcTokenSenderTimestamp. */
        public tcTokenSenderTimestamp: (number|Long);

        /** Conversation suspended. */
        public suspended: boolean;

        /** Conversation terminated. */
        public terminated: boolean;

        /** Conversation createdAt. */
        public createdAt: (number|Long);

        /** Conversation createdBy. */
        public createdBy: string;

        /** Conversation description. */
        public description: string;

        /** Conversation support. */
        public support: boolean;

        /** Conversation isParentGroup. */
        public isParentGroup: boolean;

        /** Conversation parentGroupId. */
        public parentGroupId: string;

        /** Conversation isDefaultSubgroup. */
        public isDefaultSubgroup: boolean;

        /** Conversation displayName. */
        public displayName: string;

        /** Conversation pnJid. */
        public pnJid: string;

        /** Conversation shareOwnPn. */
        public shareOwnPn: boolean;

        /** Conversation pnhDuplicateLidThread. */
        public pnhDuplicateLidThread: boolean;

        /** Conversation lidJid. */
        public lidJid: string;

        /** Conversation username. */
        public username: string;

        /** Conversation lidOriginType. */
        public lidOriginType: string;

        /** Conversation commentsCount. */
        public commentsCount: number;

        /** Conversation locked. */
        public locked: boolean;

        /** Conversation systemMessageToInsert. */
        public systemMessageToInsert: HistorySync.PrivacySystemMessage;

        /** Conversation capiCreatedGroup. */
        public capiCreatedGroup: boolean;

        /** Conversation accountLid. */
        public accountLid: string;

        /** Conversation limitSharing. */
        public limitSharing: boolean;

        /** Conversation limitSharingSettingTimestamp. */
        public limitSharingSettingTimestamp: (number|Long);

        /** Conversation limitSharingTrigger. */
        public limitSharingTrigger: Protocol.LimitSharing.TriggerType;

        /** Conversation limitSharingInitiatedByMe. */
        public limitSharingInitiatedByMe: boolean;

        /** Conversation maibaAiThreadEnabled. */
        public maibaAiThreadEnabled: boolean;

        /**
         * Creates a new Conversation instance using the specified properties.
         * @param [properties] Properties to set
         * @returns Conversation instance
         */
        public static create(properties?: HistorySync.IConversation): HistorySync.Conversation;

        /**
         * Encodes the specified Conversation message. Does not implicitly {@link HistorySync.Conversation.verify|verify} messages.
         * @param message Conversation message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IConversation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified Conversation message, length delimited. Does not implicitly {@link HistorySync.Conversation.verify|verify} messages.
         * @param message Conversation message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IConversation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a Conversation message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Conversation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.Conversation;

        /**
         * Decodes a Conversation message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns Conversation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.Conversation;

        /**
         * Verifies a Conversation message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a Conversation message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Conversation
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.Conversation;

        /**
         * Creates a plain object from a Conversation message. Also converts values to other types if specified.
         * @param message Conversation
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.Conversation, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Conversation to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for Conversation
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace Conversation {

        /** EndOfHistoryTransferType enum. */
        enum EndOfHistoryTransferType {
            COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY = 0,
            COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY = 1,
            COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY = 2
        }
    }

    /** Properties of a HistorySync. */
    interface IHistorySync {

        /** HistorySync syncType */
        syncType: HistorySync.HistorySync.HistorySyncType;

        /** HistorySync conversations */
        conversations?: (HistorySync.IConversation[]|null);

        /** HistorySync statusV3Messages */
        statusV3Messages?: (Web.IWebMessageInfo[]|null);

        /** HistorySync chunkOrder */
        chunkOrder?: (number|null);

        /** HistorySync progress */
        progress?: (number|null);

        /** HistorySync pushnames */
        pushnames?: (HistorySync.IPushname[]|null);

        /** HistorySync globalSettings */
        globalSettings?: (HistorySync.IGlobalSettings|null);

        /** HistorySync threadIdUserSecret */
        threadIdUserSecret?: (Uint8Array|null);

        /** HistorySync threadDsTimeframeOffset */
        threadDsTimeframeOffset?: (number|null);

        /** HistorySync recentStickers */
        recentStickers?: (HistorySync.IStickerMetadata[]|null);

        /** HistorySync pastParticipants */
        pastParticipants?: (HistorySync.IPastParticipants[]|null);

        /** HistorySync callLogRecords */
        callLogRecords?: (SyncAction.ICallLogRecord[]|null);

        /** HistorySync aiWaitListState */
        aiWaitListState?: (HistorySync.HistorySync.BotAIWaitListState|null);

        /** HistorySync phoneNumberToLidMappings */
        phoneNumberToLidMappings?: (HistorySync.IPhoneNumberToLIDMapping[]|null);

        /** HistorySync companionMetaNonce */
        companionMetaNonce?: (string|null);

        /** HistorySync shareableChatIdentifierEncryptionKey */
        shareableChatIdentifierEncryptionKey?: (Uint8Array|null);

        /** HistorySync accounts */
        accounts?: (HistorySync.IAccount[]|null);
    }

    /** Represents a HistorySync. */
    class HistorySync implements IHistorySync {

        /**
         * Constructs a new HistorySync.
         * @param [properties] Properties to set
         */
        constructor(properties?: HistorySync.IHistorySync);

        /** HistorySync syncType. */
        public syncType: HistorySync.HistorySync.HistorySyncType;

        /** HistorySync conversations. */
        public conversations: HistorySync.IConversation[];

        /** HistorySync statusV3Messages. */
        public statusV3Messages: Web.IWebMessageInfo[];

        /** HistorySync chunkOrder. */
        public chunkOrder: number;

        /** HistorySync progress. */
        public progress: number;

        /** HistorySync pushnames. */
        public pushnames: HistorySync.IPushname[];

        /** HistorySync globalSettings. */
        public globalSettings?: (HistorySync.IGlobalSettings|null);

        /** HistorySync threadIdUserSecret. */
        public threadIdUserSecret: Uint8Array;

        /** HistorySync threadDsTimeframeOffset. */
        public threadDsTimeframeOffset: number;

        /** HistorySync recentStickers. */
        public recentStickers: HistorySync.IStickerMetadata[];

        /** HistorySync pastParticipants. */
        public pastParticipants: HistorySync.IPastParticipants[];

        /** HistorySync callLogRecords. */
        public callLogRecords: SyncAction.ICallLogRecord[];

        /** HistorySync aiWaitListState. */
        public aiWaitListState: HistorySync.HistorySync.BotAIWaitListState;

        /** HistorySync phoneNumberToLidMappings. */
        public phoneNumberToLidMappings: HistorySync.IPhoneNumberToLIDMapping[];

        /** HistorySync companionMetaNonce. */
        public companionMetaNonce: string;

        /** HistorySync shareableChatIdentifierEncryptionKey. */
        public shareableChatIdentifierEncryptionKey: Uint8Array;

        /** HistorySync accounts. */
        public accounts: HistorySync.IAccount[];

        /**
         * Creates a new HistorySync instance using the specified properties.
         * @param [properties] Properties to set
         * @returns HistorySync instance
         */
        public static create(properties?: HistorySync.IHistorySync): HistorySync.HistorySync;

        /**
         * Encodes the specified HistorySync message. Does not implicitly {@link HistorySync.HistorySync.verify|verify} messages.
         * @param message HistorySync message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: HistorySync.IHistorySync, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified HistorySync message, length delimited. Does not implicitly {@link HistorySync.HistorySync.verify|verify} messages.
         * @param message HistorySync message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: HistorySync.IHistorySync, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a HistorySync message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns HistorySync
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): HistorySync.HistorySync;

        /**
         * Decodes a HistorySync message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns HistorySync
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): HistorySync.HistorySync;

        /**
         * Verifies a HistorySync message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a HistorySync message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns HistorySync
         */
        public static fromObject(object: { [k: string]: any }): HistorySync.HistorySync;

        /**
         * Creates a plain object from a HistorySync message. Also converts values to other types if specified.
         * @param message HistorySync
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: HistorySync.HistorySync, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this HistorySync to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for HistorySync
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace HistorySync {

        /** BotAIWaitListState enum. */
        enum BotAIWaitListState {
            IN_WAITLIST = 0,
            AI_AVAILABLE = 1
        }

        /** HistorySyncType enum. */
        enum HistorySyncType {
            INITIAL_BOOTSTRAP = 0,
            INITIAL_STATUS_V3 = 1,
            FULL = 2,
            RECENT = 3,
            PUSH_NAME = 4,
            NON_BLOCKING_DATA = 5,
            ON_DEMAND = 6
        }
    }

    /** PrivacySystemMessage enum. */
    enum PrivacySystemMessage {
        E2EE_MSG = 1,
        NE2EE_SELF = 2,
        NE2EE_OTHER = 3
    }

    /** MediaVisibility enum. */
    enum MediaVisibility {
        DEFAULT = 0,
        OFF = 1,
        ON = 2
    }
}

/** Namespace ChatLockSettings. */
export namespace ChatLockSettings {

    /** Properties of a ChatLockSettings. */
    interface IChatLockSettings {

        /** ChatLockSettings hideLockedChats */
        hideLockedChats?: (boolean|null);

        /** ChatLockSettings secretCode */
        secretCode?: (UserPassword.IUserPassword|null);
    }

    /** Represents a ChatLockSettings. */
    class ChatLockSettings implements IChatLockSettings {

        /**
         * Constructs a new ChatLockSettings.
         * @param [properties] Properties to set
         */
        constructor(properties?: ChatLockSettings.IChatLockSettings);

        /** ChatLockSettings hideLockedChats. */
        public hideLockedChats: boolean;

        /** ChatLockSettings secretCode. */
        public secretCode?: (UserPassword.IUserPassword|null);

        /**
         * Creates a new ChatLockSettings instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ChatLockSettings instance
         */
        public static create(properties?: ChatLockSettings.IChatLockSettings): ChatLockSettings.ChatLockSettings;

        /**
         * Encodes the specified ChatLockSettings message. Does not implicitly {@link ChatLockSettings.ChatLockSettings.verify|verify} messages.
         * @param message ChatLockSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: ChatLockSettings.IChatLockSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ChatLockSettings message, length delimited. Does not implicitly {@link ChatLockSettings.ChatLockSettings.verify|verify} messages.
         * @param message ChatLockSettings message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: ChatLockSettings.IChatLockSettings, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ChatLockSettings message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ChatLockSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ChatLockSettings.ChatLockSettings;

        /**
         * Decodes a ChatLockSettings message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ChatLockSettings
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ChatLockSettings.ChatLockSettings;

        /**
         * Verifies a ChatLockSettings message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ChatLockSettings message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ChatLockSettings
         */
        public static fromObject(object: { [k: string]: any }): ChatLockSettings.ChatLockSettings;

        /**
         * Creates a plain object from a ChatLockSettings message. Also converts values to other types if specified.
         * @param message ChatLockSettings
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: ChatLockSettings.ChatLockSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ChatLockSettings to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ChatLockSettings
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }
}

/** Namespace UserPassword. */
export namespace UserPassword {

    /** Properties of a UserPassword. */
    interface IUserPassword {

        /** UserPassword encoding */
        encoding?: (UserPassword.UserPassword.Encoding|null);

        /** UserPassword transformer */
        transformer?: (UserPassword.UserPassword.Transformer|null);

        /** UserPassword transformerArg */
        transformerArg?: (UserPassword.UserPassword.ITransformerArg[]|null);

        /** UserPassword transformedData */
        transformedData?: (Uint8Array|null);
    }

    /** Represents a UserPassword. */
    class UserPassword implements IUserPassword {

        /**
         * Constructs a new UserPassword.
         * @param [properties] Properties to set
         */
        constructor(properties?: UserPassword.IUserPassword);

        /** UserPassword encoding. */
        public encoding: UserPassword.UserPassword.Encoding;

        /** UserPassword transformer. */
        public transformer: UserPassword.UserPassword.Transformer;

        /** UserPassword transformerArg. */
        public transformerArg: UserPassword.UserPassword.ITransformerArg[];

        /** UserPassword transformedData. */
        public transformedData: Uint8Array;

        /**
         * Creates a new UserPassword instance using the specified properties.
         * @param [properties] Properties to set
         * @returns UserPassword instance
         */
        public static create(properties?: UserPassword.IUserPassword): UserPassword.UserPassword;

        /**
         * Encodes the specified UserPassword message. Does not implicitly {@link UserPassword.UserPassword.verify|verify} messages.
         * @param message UserPassword message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: UserPassword.IUserPassword, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified UserPassword message, length delimited. Does not implicitly {@link UserPassword.UserPassword.verify|verify} messages.
         * @param message UserPassword message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: UserPassword.IUserPassword, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a UserPassword message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns UserPassword
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): UserPassword.UserPassword;

        /**
         * Decodes a UserPassword message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns UserPassword
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): UserPassword.UserPassword;

        /**
         * Verifies a UserPassword message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a UserPassword message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns UserPassword
         */
        public static fromObject(object: { [k: string]: any }): UserPassword.UserPassword;

        /**
         * Creates a plain object from a UserPassword message. Also converts values to other types if specified.
         * @param message UserPassword
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: UserPassword.UserPassword, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this UserPassword to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for UserPassword
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace UserPassword {

        /** Encoding enum. */
        enum Encoding {
            UTF8 = 0,
            UTF8_BROKEN = 1
        }

        /** Transformer enum. */
        enum Transformer {
            NONE = 0,
            PBKDF2_HMAC_SHA512 = 1,
            PBKDF2_HMAC_SHA384 = 2
        }

        /** Properties of a TransformerArg. */
        interface ITransformerArg {

            /** TransformerArg key */
            key?: (string|null);

            /** TransformerArg value */
            value?: (UserPassword.UserPassword.TransformerArg.IValue|null);
        }

        /** Represents a TransformerArg. */
        class TransformerArg implements ITransformerArg {

            /**
             * Constructs a new TransformerArg.
             * @param [properties] Properties to set
             */
            constructor(properties?: UserPassword.UserPassword.ITransformerArg);

            /** TransformerArg key. */
            public key: string;

            /** TransformerArg value. */
            public value?: (UserPassword.UserPassword.TransformerArg.IValue|null);

            /**
             * Creates a new TransformerArg instance using the specified properties.
             * @param [properties] Properties to set
             * @returns TransformerArg instance
             */
            public static create(properties?: UserPassword.UserPassword.ITransformerArg): UserPassword.UserPassword.TransformerArg;

            /**
             * Encodes the specified TransformerArg message. Does not implicitly {@link UserPassword.UserPassword.TransformerArg.verify|verify} messages.
             * @param message TransformerArg message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: UserPassword.UserPassword.ITransformerArg, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified TransformerArg message, length delimited. Does not implicitly {@link UserPassword.UserPassword.TransformerArg.verify|verify} messages.
             * @param message TransformerArg message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: UserPassword.UserPassword.ITransformerArg, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a TransformerArg message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns TransformerArg
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): UserPassword.UserPassword.TransformerArg;

            /**
             * Decodes a TransformerArg message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns TransformerArg
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): UserPassword.UserPassword.TransformerArg;

            /**
             * Verifies a TransformerArg message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a TransformerArg message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns TransformerArg
             */
            public static fromObject(object: { [k: string]: any }): UserPassword.UserPassword.TransformerArg;

            /**
             * Creates a plain object from a TransformerArg message. Also converts values to other types if specified.
             * @param message TransformerArg
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: UserPassword.UserPassword.TransformerArg, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this TransformerArg to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for TransformerArg
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace TransformerArg {

            /** Properties of a Value. */
            interface IValue {

                /** Value asBlob */
                asBlob?: (Uint8Array|null);

                /** Value asUnsignedInteger */
                asUnsignedInteger?: (number|null);
            }

            /** Represents a Value. */
            class Value implements IValue {

                /**
                 * Constructs a new Value.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: UserPassword.UserPassword.TransformerArg.IValue);

                /** Value asBlob. */
                public asBlob?: (Uint8Array|null);

                /** Value asUnsignedInteger. */
                public asUnsignedInteger?: (number|null);

                /** Value value. */
                public value?: ("asBlob"|"asUnsignedInteger");

                /**
                 * Creates a new Value instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Value instance
                 */
                public static create(properties?: UserPassword.UserPassword.TransformerArg.IValue): UserPassword.UserPassword.TransformerArg.Value;

                /**
                 * Encodes the specified Value message. Does not implicitly {@link UserPassword.UserPassword.TransformerArg.Value.verify|verify} messages.
                 * @param message Value message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: UserPassword.UserPassword.TransformerArg.IValue, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Value message, length delimited. Does not implicitly {@link UserPassword.UserPassword.TransformerArg.Value.verify|verify} messages.
                 * @param message Value message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: UserPassword.UserPassword.TransformerArg.IValue, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Value message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Value
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): UserPassword.UserPassword.TransformerArg.Value;

                /**
                 * Decodes a Value message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Value
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): UserPassword.UserPassword.TransformerArg.Value;

                /**
                 * Verifies a Value message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Value message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Value
                 */
                public static fromObject(object: { [k: string]: any }): UserPassword.UserPassword.TransformerArg.Value;

                /**
                 * Creates a plain object from a Value message. Also converts values to other types if specified.
                 * @param message Value
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: UserPassword.UserPassword.TransformerArg.Value, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Value to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Value
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }
    }
}

/** Namespace E2E. */
export namespace E2E {

    /** Properties of a AIQueryFanout. */
    interface IAIQueryFanout {

        /** AIQueryFanout messageKey */
        messageKey?: (Protocol.IMessageKey|null);

        /** AIQueryFanout message */
        message?: (E2E.IMessage|null);

        /** AIQueryFanout timestamp */
        timestamp?: (number|Long|null);
    }

    /** Represents a AIQueryFanout. */
    class AIQueryFanout implements IAIQueryFanout {

        /**
         * Constructs a new AIQueryFanout.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IAIQueryFanout);

        /** AIQueryFanout messageKey. */
        public messageKey?: (Protocol.IMessageKey|null);

        /** AIQueryFanout message. */
        public message?: (E2E.IMessage|null);

        /** AIQueryFanout timestamp. */
        public timestamp: (number|Long);

        /**
         * Creates a new AIQueryFanout instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIQueryFanout instance
         */
        public static create(properties?: E2E.IAIQueryFanout): E2E.AIQueryFanout;

        /**
         * Encodes the specified AIQueryFanout message. Does not implicitly {@link E2E.AIQueryFanout.verify|verify} messages.
         * @param message AIQueryFanout message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IAIQueryFanout, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIQueryFanout message, length delimited. Does not implicitly {@link E2E.AIQueryFanout.verify|verify} messages.
         * @param message AIQueryFanout message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IAIQueryFanout, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIQueryFanout message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIQueryFanout
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.AIQueryFanout;

        /**
         * Decodes a AIQueryFanout message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIQueryFanout
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.AIQueryFanout;

        /**
         * Verifies a AIQueryFanout message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIQueryFanout message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIQueryFanout
         */
        public static fromObject(object: { [k: string]: any }): E2E.AIQueryFanout;

        /**
         * Creates a plain object from a AIQueryFanout message. Also converts values to other types if specified.
         * @param message AIQueryFanout
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.AIQueryFanout, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIQueryFanout to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIQueryFanout
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a AIRichResponseMessage. */
    interface IAIRichResponseMessage {

        /** AIRichResponseMessage messageType */
        messageType?: (AICommon.AIRichResponseMessageType|null);

        /** AIRichResponseMessage submessages */
        submessages?: (AICommon.IAIRichResponseSubMessage[]|null);

        /** AIRichResponseMessage unifiedResponse */
        unifiedResponse?: (AICommon.IAIRichResponseUnifiedResponse|null);

        /** AIRichResponseMessage contextInfo */
        contextInfo?: (E2E.IContextInfo|null);
    }

    /** Represents a AIRichResponseMessage. */
    class AIRichResponseMessage implements IAIRichResponseMessage {

        /**
         * Constructs a new AIRichResponseMessage.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IAIRichResponseMessage);

        /** AIRichResponseMessage messageType. */
        public messageType: AICommon.AIRichResponseMessageType;

        /** AIRichResponseMessage submessages. */
        public submessages: AICommon.IAIRichResponseSubMessage[];

        /** AIRichResponseMessage unifiedResponse. */
        public unifiedResponse?: (AICommon.IAIRichResponseUnifiedResponse|null);

        /** AIRichResponseMessage contextInfo. */
        public contextInfo?: (E2E.IContextInfo|null);

        /**
         * Creates a new AIRichResponseMessage instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseMessage instance
         */
        public static create(properties?: E2E.IAIRichResponseMessage): E2E.AIRichResponseMessage;

        /**
         * Encodes the specified AIRichResponseMessage message. Does not implicitly {@link E2E.AIRichResponseMessage.verify|verify} messages.
         * @param message AIRichResponseMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IAIRichResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseMessage message, length delimited. Does not implicitly {@link E2E.AIRichResponseMessage.verify|verify} messages.
         * @param message AIRichResponseMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IAIRichResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseMessage message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.AIRichResponseMessage;

        /**
         * Decodes a AIRichResponseMessage message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.AIRichResponseMessage;

        /**
         * Verifies a AIRichResponseMessage message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseMessage message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseMessage
         */
        public static fromObject(object: { [k: string]: any }): E2E.AIRichResponseMessage;

        /**
         * Creates a plain object from a AIRichResponseMessage message. Also converts values to other types if specified.
         * @param message AIRichResponseMessage
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.AIRichResponseMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseMessage to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseMessage
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a MemberLabel. */
    interface IMemberLabel {

        /** MemberLabel label */
        label?: (string|null);

        /** MemberLabel labelTimestamp */
        labelTimestamp?: (number|Long|null);
    }

    /** Represents a MemberLabel. */
    class MemberLabel implements IMemberLabel {

        /**
         * Constructs a new MemberLabel.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IMemberLabel);

        /** MemberLabel label. */
        public label: string;

        /** MemberLabel labelTimestamp. */
        public labelTimestamp: (number|Long);

        /**
         * Creates a new MemberLabel instance using the specified properties.
         * @param [properties] Properties to set
         * @returns MemberLabel instance
         */
        public static create(properties?: E2E.IMemberLabel): E2E.MemberLabel;

        /**
         * Encodes the specified MemberLabel message. Does not implicitly {@link E2E.MemberLabel.verify|verify} messages.
         * @param message MemberLabel message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IMemberLabel, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified MemberLabel message, length delimited. Does not implicitly {@link E2E.MemberLabel.verify|verify} messages.
         * @param message MemberLabel message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IMemberLabel, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a MemberLabel message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns MemberLabel
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.MemberLabel;

        /**
         * Decodes a MemberLabel message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns MemberLabel
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.MemberLabel;

        /**
         * Verifies a MemberLabel message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a MemberLabel message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns MemberLabel
         */
        public static fromObject(object: { [k: string]: any }): E2E.MemberLabel;

        /**
         * Creates a plain object from a MemberLabel message. Also converts values to other types if specified.
         * @param message MemberLabel
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.MemberLabel, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this MemberLabel to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for MemberLabel
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an UrlTrackingMap. */
    interface IUrlTrackingMap {

        /** UrlTrackingMap urlTrackingMapElements */
        urlTrackingMapElements?: (E2E.UrlTrackingMap.IUrlTrackingMapElement[]|null);
    }

    /** Represents an UrlTrackingMap. */
    class UrlTrackingMap implements IUrlTrackingMap {

        /**
         * Constructs a new UrlTrackingMap.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IUrlTrackingMap);

        /** UrlTrackingMap urlTrackingMapElements. */
        public urlTrackingMapElements: E2E.UrlTrackingMap.IUrlTrackingMapElement[];

        /**
         * Creates a new UrlTrackingMap instance using the specified properties.
         * @param [properties] Properties to set
         * @returns UrlTrackingMap instance
         */
        public static create(properties?: E2E.IUrlTrackingMap): E2E.UrlTrackingMap;

        /**
         * Encodes the specified UrlTrackingMap message. Does not implicitly {@link E2E.UrlTrackingMap.verify|verify} messages.
         * @param message UrlTrackingMap message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IUrlTrackingMap, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified UrlTrackingMap message, length delimited. Does not implicitly {@link E2E.UrlTrackingMap.verify|verify} messages.
         * @param message UrlTrackingMap message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IUrlTrackingMap, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an UrlTrackingMap message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns UrlTrackingMap
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.UrlTrackingMap;

        /**
         * Decodes an UrlTrackingMap message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns UrlTrackingMap
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.UrlTrackingMap;

        /**
         * Verifies an UrlTrackingMap message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an UrlTrackingMap message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns UrlTrackingMap
         */
        public static fromObject(object: { [k: string]: any }): E2E.UrlTrackingMap;

        /**
         * Creates a plain object from an UrlTrackingMap message. Also converts values to other types if specified.
         * @param message UrlTrackingMap
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.UrlTrackingMap, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this UrlTrackingMap to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for UrlTrackingMap
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace UrlTrackingMap {

        /** Properties of an UrlTrackingMapElement. */
        interface IUrlTrackingMapElement {

            /** UrlTrackingMapElement originalUrl */
            originalUrl?: (string|null);

            /** UrlTrackingMapElement unconsentedUsersUrl */
            unconsentedUsersUrl?: (string|null);

            /** UrlTrackingMapElement consentedUsersUrl */
            consentedUsersUrl?: (string|null);

            /** UrlTrackingMapElement cardIndex */
            cardIndex?: (number|null);
        }

        /** Represents an UrlTrackingMapElement. */
        class UrlTrackingMapElement implements IUrlTrackingMapElement {

            /**
             * Constructs a new UrlTrackingMapElement.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.UrlTrackingMap.IUrlTrackingMapElement);

            /** UrlTrackingMapElement originalUrl. */
            public originalUrl: string;

            /** UrlTrackingMapElement unconsentedUsersUrl. */
            public unconsentedUsersUrl: string;

            /** UrlTrackingMapElement consentedUsersUrl. */
            public consentedUsersUrl: string;

            /** UrlTrackingMapElement cardIndex. */
            public cardIndex: number;

            /**
             * Creates a new UrlTrackingMapElement instance using the specified properties.
             * @param [properties] Properties to set
             * @returns UrlTrackingMapElement instance
             */
            public static create(properties?: E2E.UrlTrackingMap.IUrlTrackingMapElement): E2E.UrlTrackingMap.UrlTrackingMapElement;

            /**
             * Encodes the specified UrlTrackingMapElement message. Does not implicitly {@link E2E.UrlTrackingMap.UrlTrackingMapElement.verify|verify} messages.
             * @param message UrlTrackingMapElement message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.UrlTrackingMap.IUrlTrackingMapElement, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified UrlTrackingMapElement message, length delimited. Does not implicitly {@link E2E.UrlTrackingMap.UrlTrackingMapElement.verify|verify} messages.
             * @param message UrlTrackingMapElement message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.UrlTrackingMap.IUrlTrackingMapElement, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an UrlTrackingMapElement message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns UrlTrackingMapElement
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.UrlTrackingMap.UrlTrackingMapElement;

            /**
             * Decodes an UrlTrackingMapElement message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns UrlTrackingMapElement
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.UrlTrackingMap.UrlTrackingMapElement;

            /**
             * Verifies an UrlTrackingMapElement message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an UrlTrackingMapElement message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns UrlTrackingMapElement
             */
            public static fromObject(object: { [k: string]: any }): E2E.UrlTrackingMap.UrlTrackingMapElement;

            /**
             * Creates a plain object from an UrlTrackingMapElement message. Also converts values to other types if specified.
             * @param message UrlTrackingMapElement
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.UrlTrackingMap.UrlTrackingMapElement, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this UrlTrackingMapElement to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for UrlTrackingMapElement
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Properties of a ProcessedVideo. */
    interface IProcessedVideo {

        /** ProcessedVideo directPath */
        directPath?: (string|null);

        /** ProcessedVideo fileSha256 */
        fileSha256?: (Uint8Array|null);

        /** ProcessedVideo height */
        height?: (number|null);

        /** ProcessedVideo width */
        width?: (number|null);

        /** ProcessedVideo fileLength */
        fileLength?: (number|Long|null);

        /** ProcessedVideo bitrate */
        bitrate?: (number|null);

        /** ProcessedVideo quality */
        quality?: (E2E.ProcessedVideo.VideoQuality|null);

        /** ProcessedVideo capabilities */
        capabilities?: (string[]|null);
    }

    /** Represents a ProcessedVideo. */
    class ProcessedVideo implements IProcessedVideo {

        /**
         * Constructs a new ProcessedVideo.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IProcessedVideo);

        /** ProcessedVideo directPath. */
        public directPath: string;

        /** ProcessedVideo fileSha256. */
        public fileSha256: Uint8Array;

        /** ProcessedVideo height. */
        public height: number;

        /** ProcessedVideo width. */
        public width: number;

        /** ProcessedVideo fileLength. */
        public fileLength: (number|Long);

        /** ProcessedVideo bitrate. */
        public bitrate: number;

        /** ProcessedVideo quality. */
        public quality: E2E.ProcessedVideo.VideoQuality;

        /** ProcessedVideo capabilities. */
        public capabilities: string[];

        /**
         * Creates a new ProcessedVideo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ProcessedVideo instance
         */
        public static create(properties?: E2E.IProcessedVideo): E2E.ProcessedVideo;

        /**
         * Encodes the specified ProcessedVideo message. Does not implicitly {@link E2E.ProcessedVideo.verify|verify} messages.
         * @param message ProcessedVideo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IProcessedVideo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ProcessedVideo message, length delimited. Does not implicitly {@link E2E.ProcessedVideo.verify|verify} messages.
         * @param message ProcessedVideo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IProcessedVideo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ProcessedVideo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ProcessedVideo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ProcessedVideo;

        /**
         * Decodes a ProcessedVideo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ProcessedVideo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ProcessedVideo;

        /**
         * Verifies a ProcessedVideo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ProcessedVideo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ProcessedVideo
         */
        public static fromObject(object: { [k: string]: any }): E2E.ProcessedVideo;

        /**
         * Creates a plain object from a ProcessedVideo message. Also converts values to other types if specified.
         * @param message ProcessedVideo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.ProcessedVideo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ProcessedVideo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ProcessedVideo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace ProcessedVideo {

        /** VideoQuality enum. */
        enum VideoQuality {
            UNDEFINED = 0,
            LOW = 1,
            MID = 2,
            HIGH = 3
        }
    }

    /** Properties of a LIDMigrationMappingSyncMessage. */
    interface ILIDMigrationMappingSyncMessage {

        /** LIDMigrationMappingSyncMessage encodedMappingPayload */
        encodedMappingPayload?: (Uint8Array|null);
    }

    /** Represents a LIDMigrationMappingSyncMessage. */
    class LIDMigrationMappingSyncMessage implements ILIDMigrationMappingSyncMessage {

        /**
         * Constructs a new LIDMigrationMappingSyncMessage.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.ILIDMigrationMappingSyncMessage);

        /** LIDMigrationMappingSyncMessage encodedMappingPayload. */
        public encodedMappingPayload: Uint8Array;

        /**
         * Creates a new LIDMigrationMappingSyncMessage instance using the specified properties.
         * @param [properties] Properties to set
         * @returns LIDMigrationMappingSyncMessage instance
         */
        public static create(properties?: E2E.ILIDMigrationMappingSyncMessage): E2E.LIDMigrationMappingSyncMessage;

        /**
         * Encodes the specified LIDMigrationMappingSyncMessage message. Does not implicitly {@link E2E.LIDMigrationMappingSyncMessage.verify|verify} messages.
         * @param message LIDMigrationMappingSyncMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.ILIDMigrationMappingSyncMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified LIDMigrationMappingSyncMessage message, length delimited. Does not implicitly {@link E2E.LIDMigrationMappingSyncMessage.verify|verify} messages.
         * @param message LIDMigrationMappingSyncMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.ILIDMigrationMappingSyncMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a LIDMigrationMappingSyncMessage message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns LIDMigrationMappingSyncMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.LIDMigrationMappingSyncMessage;

        /**
         * Decodes a LIDMigrationMappingSyncMessage message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns LIDMigrationMappingSyncMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.LIDMigrationMappingSyncMessage;

        /**
         * Verifies a LIDMigrationMappingSyncMessage message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a LIDMigrationMappingSyncMessage message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns LIDMigrationMappingSyncMessage
         */
        public static fromObject(object: { [k: string]: any }): E2E.LIDMigrationMappingSyncMessage;

        /**
         * Creates a plain object from a LIDMigrationMappingSyncMessage message. Also converts values to other types if specified.
         * @param message LIDMigrationMappingSyncMessage
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.LIDMigrationMappingSyncMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this LIDMigrationMappingSyncMessage to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for LIDMigrationMappingSyncMessage
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a MediaNotifyMessage. */
    interface IMediaNotifyMessage {

        /** MediaNotifyMessage expressPathUrl */
        expressPathUrl?: (string|null);

        /** MediaNotifyMessage fileEncSha256 */
        fileEncSha256?: (Uint8Array|null);

        /** MediaNotifyMessage fileLength */
        fileLength?: (number|Long|null);
    }

    /** Represents a MediaNotifyMessage. */
    class MediaNotifyMessage implements IMediaNotifyMessage {

        /**
         * Constructs a new MediaNotifyMessage.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IMediaNotifyMessage);

        /** MediaNotifyMessage expressPathUrl. */
        public expressPathUrl: string;

        /** MediaNotifyMessage fileEncSha256. */
        public fileEncSha256: Uint8Array;

        /** MediaNotifyMessage fileLength. */
        public fileLength: (number|Long);

        /**
         * Creates a new MediaNotifyMessage instance using the specified properties.
         * @param [properties] Properties to set
         * @returns MediaNotifyMessage instance
         */
        public static create(properties?: E2E.IMediaNotifyMessage): E2E.MediaNotifyMessage;

        /**
         * Encodes the specified MediaNotifyMessage message. Does not implicitly {@link E2E.MediaNotifyMessage.verify|verify} messages.
         * @param message MediaNotifyMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IMediaNotifyMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified MediaNotifyMessage message, length delimited. Does not implicitly {@link E2E.MediaNotifyMessage.verify|verify} messages.
         * @param message MediaNotifyMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IMediaNotifyMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a MediaNotifyMessage message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns MediaNotifyMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.MediaNotifyMessage;

        /**
         * Decodes a MediaNotifyMessage message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns MediaNotifyMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.MediaNotifyMessage;

        /**
         * Verifies a MediaNotifyMessage message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a MediaNotifyMessage message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns MediaNotifyMessage
         */
        public static fromObject(object: { [k: string]: any }): E2E.MediaNotifyMessage;

        /**
         * Creates a plain object from a MediaNotifyMessage message. Also converts values to other types if specified.
         * @param message MediaNotifyMessage
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.MediaNotifyMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this MediaNotifyMessage to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for MediaNotifyMessage
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a MessageSecretMessage. */
    interface IMessageSecretMessage {

        /** MessageSecretMessage version */
        version?: (number|null);

        /** MessageSecretMessage encIv */
        encIv?: (Uint8Array|null);

        /** MessageSecretMessage encPayload */
        encPayload?: (Uint8Array|null);
    }

    /** Represents a MessageSecretMessage. */
    class MessageSecretMessage implements IMessageSecretMessage {

        /**
         * Constructs a new MessageSecretMessage.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IMessageSecretMessage);

        /** MessageSecretMessage version. */
        public version: number;

        /** MessageSecretMessage encIv. */
        public encIv: Uint8Array;

        /** MessageSecretMessage encPayload. */
        public encPayload: Uint8Array;

        /**
         * Creates a new MessageSecretMessage instance using the specified properties.
         * @param [properties] Properties to set
         * @returns MessageSecretMessage instance
         */
        public static create(properties?: E2E.IMessageSecretMessage): E2E.MessageSecretMessage;

        /**
         * Encodes the specified MessageSecretMessage message. Does not implicitly {@link E2E.MessageSecretMessage.verify|verify} messages.
         * @param message MessageSecretMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IMessageSecretMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified MessageSecretMessage message, length delimited. Does not implicitly {@link E2E.MessageSecretMessage.verify|verify} messages.
         * @param message MessageSecretMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IMessageSecretMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a MessageSecretMessage message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns MessageSecretMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.MessageSecretMessage;

        /**
         * Decodes a MessageSecretMessage message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns MessageSecretMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.MessageSecretMessage;

        /**
         * Verifies a MessageSecretMessage message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a MessageSecretMessage message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns MessageSecretMessage
         */
        public static fromObject(object: { [k: string]: any }): E2E.MessageSecretMessage;

        /**
         * Creates a plain object from a MessageSecretMessage message. Also converts values to other types if specified.
         * @param message MessageSecretMessage
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.MessageSecretMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this MessageSecretMessage to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for MessageSecretMessage
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a GroupMention. */
    interface IGroupMention {

        /** GroupMention groupJid */
        groupJid?: (string|null);

        /** GroupMention groupSubject */
        groupSubject?: (string|null);
    }

    /** Represents a GroupMention. */
    class GroupMention implements IGroupMention {

        /**
         * Constructs a new GroupMention.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IGroupMention);

        /** GroupMention groupJid. */
        public groupJid: string;

        /** GroupMention groupSubject. */
        public groupSubject: string;

        /**
         * Creates a new GroupMention instance using the specified properties.
         * @param [properties] Properties to set
         * @returns GroupMention instance
         */
        public static create(properties?: E2E.IGroupMention): E2E.GroupMention;

        /**
         * Encodes the specified GroupMention message. Does not implicitly {@link E2E.GroupMention.verify|verify} messages.
         * @param message GroupMention message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IGroupMention, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified GroupMention message, length delimited. Does not implicitly {@link E2E.GroupMention.verify|verify} messages.
         * @param message GroupMention message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IGroupMention, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a GroupMention message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns GroupMention
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.GroupMention;

        /**
         * Decodes a GroupMention message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns GroupMention
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.GroupMention;

        /**
         * Verifies a GroupMention message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a GroupMention message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns GroupMention
         */
        public static fromObject(object: { [k: string]: any }): E2E.GroupMention;

        /**
         * Creates a plain object from a GroupMention message. Also converts values to other types if specified.
         * @param message GroupMention
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.GroupMention, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this GroupMention to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for GroupMention
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an ActionLink. */
    interface IActionLink {

        /** ActionLink url */
        url?: (string|null);

        /** ActionLink buttonTitle */
        buttonTitle?: (string|null);
    }

    /** Represents an ActionLink. */
    class ActionLink implements IActionLink {

        /**
         * Constructs a new ActionLink.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IActionLink);

        /** ActionLink url. */
        public url: string;

        /** ActionLink buttonTitle. */
        public buttonTitle: string;

        /**
         * Creates a new ActionLink instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ActionLink instance
         */
        public static create(properties?: E2E.IActionLink): E2E.ActionLink;

        /**
         * Encodes the specified ActionLink message. Does not implicitly {@link E2E.ActionLink.verify|verify} messages.
         * @param message ActionLink message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IActionLink, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ActionLink message, length delimited. Does not implicitly {@link E2E.ActionLink.verify|verify} messages.
         * @param message ActionLink message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IActionLink, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an ActionLink message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ActionLink
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ActionLink;

        /**
         * Decodes an ActionLink message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ActionLink
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ActionLink;

        /**
         * Verifies an ActionLink message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an ActionLink message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ActionLink
         */
        public static fromObject(object: { [k: string]: any }): E2E.ActionLink;

        /**
         * Creates a plain object from an ActionLink message. Also converts values to other types if specified.
         * @param message ActionLink
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.ActionLink, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ActionLink to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ActionLink
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a DisappearingMode. */
    interface IDisappearingMode {

        /** DisappearingMode initiator */
        initiator?: (E2E.DisappearingMode.Initiator|null);

        /** DisappearingMode trigger */
        trigger?: (E2E.DisappearingMode.Trigger|null);

        /** DisappearingMode initiatorDeviceJid */
        initiatorDeviceJid?: (string|null);

        /** DisappearingMode initiatedByMe */
        initiatedByMe?: (boolean|null);
    }

    /** Represents a DisappearingMode. */
    class DisappearingMode implements IDisappearingMode {

        /**
         * Constructs a new DisappearingMode.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IDisappearingMode);

        /** DisappearingMode initiator. */
        public initiator: E2E.DisappearingMode.Initiator;

        /** DisappearingMode trigger. */
        public trigger: E2E.DisappearingMode.Trigger;

        /** DisappearingMode initiatorDeviceJid. */
        public initiatorDeviceJid: string;

        /** DisappearingMode initiatedByMe. */
        public initiatedByMe: boolean;

        /**
         * Creates a new DisappearingMode instance using the specified properties.
         * @param [properties] Properties to set
         * @returns DisappearingMode instance
         */
        public static create(properties?: E2E.IDisappearingMode): E2E.DisappearingMode;

        /**
         * Encodes the specified DisappearingMode message. Does not implicitly {@link E2E.DisappearingMode.verify|verify} messages.
         * @param message DisappearingMode message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IDisappearingMode, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified DisappearingMode message, length delimited. Does not implicitly {@link E2E.DisappearingMode.verify|verify} messages.
         * @param message DisappearingMode message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IDisappearingMode, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a DisappearingMode message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns DisappearingMode
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.DisappearingMode;

        /**
         * Decodes a DisappearingMode message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns DisappearingMode
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.DisappearingMode;

        /**
         * Verifies a DisappearingMode message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a DisappearingMode message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns DisappearingMode
         */
        public static fromObject(object: { [k: string]: any }): E2E.DisappearingMode;

        /**
         * Creates a plain object from a DisappearingMode message. Also converts values to other types if specified.
         * @param message DisappearingMode
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.DisappearingMode, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this DisappearingMode to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for DisappearingMode
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace DisappearingMode {

        /** Initiator enum. */
        enum Initiator {
            CHANGED_IN_CHAT = 0,
            INITIATED_BY_ME = 1,
            INITIATED_BY_OTHER = 2,
            BIZ_UPGRADE_FB_HOSTING = 3
        }

        /** Trigger enum. */
        enum Trigger {
            UNKNOWN = 0,
            CHAT_SETTING = 1,
            ACCOUNT_SETTING = 2,
            BULK_CHANGE = 3,
            BIZ_SUPPORTS_FB_HOSTING = 4,
            UNKNOWN_GROUPS = 5
        }
    }

    /** Properties of a PaymentBackground. */
    interface IPaymentBackground {

        /** PaymentBackground id */
        id?: (string|null);

        /** PaymentBackground fileLength */
        fileLength?: (number|Long|null);

        /** PaymentBackground width */
        width?: (number|null);

        /** PaymentBackground height */
        height?: (number|null);

        /** PaymentBackground mimetype */
        mimetype?: (string|null);

        /** PaymentBackground placeholderArgb */
        placeholderArgb?: (number|null);

        /** PaymentBackground textArgb */
        textArgb?: (number|null);

        /** PaymentBackground subtextArgb */
        subtextArgb?: (number|null);

        /** PaymentBackground mediaData */
        mediaData?: (E2E.PaymentBackground.IMediaData|null);

        /** PaymentBackground type */
        type?: (E2E.PaymentBackground.Type|null);
    }

    /** Represents a PaymentBackground. */
    class PaymentBackground implements IPaymentBackground {

        /**
         * Constructs a new PaymentBackground.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IPaymentBackground);

        /** PaymentBackground id. */
        public id: string;

        /** PaymentBackground fileLength. */
        public fileLength: (number|Long);

        /** PaymentBackground width. */
        public width: number;

        /** PaymentBackground height. */
        public height: number;

        /** PaymentBackground mimetype. */
        public mimetype: string;

        /** PaymentBackground placeholderArgb. */
        public placeholderArgb: number;

        /** PaymentBackground textArgb. */
        public textArgb: number;

        /** PaymentBackground subtextArgb. */
        public subtextArgb: number;

        /** PaymentBackground mediaData. */
        public mediaData?: (E2E.PaymentBackground.IMediaData|null);

        /** PaymentBackground type. */
        public type: E2E.PaymentBackground.Type;

        /**
         * Creates a new PaymentBackground instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PaymentBackground instance
         */
        public static create(properties?: E2E.IPaymentBackground): E2E.PaymentBackground;

        /**
         * Encodes the specified PaymentBackground message. Does not implicitly {@link E2E.PaymentBackground.verify|verify} messages.
         * @param message PaymentBackground message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IPaymentBackground, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PaymentBackground message, length delimited. Does not implicitly {@link E2E.PaymentBackground.verify|verify} messages.
         * @param message PaymentBackground message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IPaymentBackground, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PaymentBackground message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PaymentBackground
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.PaymentBackground;

        /**
         * Decodes a PaymentBackground message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PaymentBackground
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.PaymentBackground;

        /**
         * Verifies a PaymentBackground message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PaymentBackground message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PaymentBackground
         */
        public static fromObject(object: { [k: string]: any }): E2E.PaymentBackground;

        /**
         * Creates a plain object from a PaymentBackground message. Also converts values to other types if specified.
         * @param message PaymentBackground
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.PaymentBackground, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PaymentBackground to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PaymentBackground
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace PaymentBackground {

        /** Properties of a MediaData. */
        interface IMediaData {

            /** MediaData mediaKey */
            mediaKey?: (Uint8Array|null);

            /** MediaData mediaKeyTimestamp */
            mediaKeyTimestamp?: (number|Long|null);

            /** MediaData fileSha256 */
            fileSha256?: (Uint8Array|null);

            /** MediaData fileEncSha256 */
            fileEncSha256?: (Uint8Array|null);

            /** MediaData directPath */
            directPath?: (string|null);
        }

        /** Represents a MediaData. */
        class MediaData implements IMediaData {

            /**
             * Constructs a new MediaData.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.PaymentBackground.IMediaData);

            /** MediaData mediaKey. */
            public mediaKey: Uint8Array;

            /** MediaData mediaKeyTimestamp. */
            public mediaKeyTimestamp: (number|Long);

            /** MediaData fileSha256. */
            public fileSha256: Uint8Array;

            /** MediaData fileEncSha256. */
            public fileEncSha256: Uint8Array;

            /** MediaData directPath. */
            public directPath: string;

            /**
             * Creates a new MediaData instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MediaData instance
             */
            public static create(properties?: E2E.PaymentBackground.IMediaData): E2E.PaymentBackground.MediaData;

            /**
             * Encodes the specified MediaData message. Does not implicitly {@link E2E.PaymentBackground.MediaData.verify|verify} messages.
             * @param message MediaData message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.PaymentBackground.IMediaData, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MediaData message, length delimited. Does not implicitly {@link E2E.PaymentBackground.MediaData.verify|verify} messages.
             * @param message MediaData message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.PaymentBackground.IMediaData, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MediaData message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MediaData
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.PaymentBackground.MediaData;

            /**
             * Decodes a MediaData message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MediaData
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.PaymentBackground.MediaData;

            /**
             * Verifies a MediaData message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MediaData message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MediaData
             */
            public static fromObject(object: { [k: string]: any }): E2E.PaymentBackground.MediaData;

            /**
             * Creates a plain object from a MediaData message. Also converts values to other types if specified.
             * @param message MediaData
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.PaymentBackground.MediaData, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MediaData to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MediaData
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Type enum. */
        enum Type {
            UNKNOWN = 0,
            DEFAULT = 1
        }
    }

    /** Properties of a Money. */
    interface IMoney {

        /** Money value */
        value?: (number|Long|null);

        /** Money offset */
        offset?: (number|null);

        /** Money currencyCode */
        currencyCode?: (string|null);
    }

    /** Represents a Money. */
    class Money implements IMoney {

        /**
         * Constructs a new Money.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IMoney);

        /** Money value. */
        public value: (number|Long);

        /** Money offset. */
        public offset: number;

        /** Money currencyCode. */
        public currencyCode: string;

        /**
         * Creates a new Money instance using the specified properties.
         * @param [properties] Properties to set
         * @returns Money instance
         */
        public static create(properties?: E2E.IMoney): E2E.Money;

        /**
         * Encodes the specified Money message. Does not implicitly {@link E2E.Money.verify|verify} messages.
         * @param message Money message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IMoney, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified Money message, length delimited. Does not implicitly {@link E2E.Money.verify|verify} messages.
         * @param message Money message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IMoney, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a Money message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Money
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Money;

        /**
         * Decodes a Money message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns Money
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Money;

        /**
         * Verifies a Money message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a Money message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Money
         */
        public static fromObject(object: { [k: string]: any }): E2E.Money;

        /**
         * Creates a plain object from a Money message. Also converts values to other types if specified.
         * @param message Money
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.Money, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Money to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for Money
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a HydratedTemplateButton. */
    interface IHydratedTemplateButton {

        /** HydratedTemplateButton index */
        index?: (number|null);

        /** HydratedTemplateButton quickReplyButton */
        quickReplyButton?: (E2E.HydratedTemplateButton.IHydratedQuickReplyButton|null);

        /** HydratedTemplateButton urlButton */
        urlButton?: (E2E.HydratedTemplateButton.IHydratedURLButton|null);

        /** HydratedTemplateButton callButton */
        callButton?: (E2E.HydratedTemplateButton.IHydratedCallButton|null);
    }

    /** Represents a HydratedTemplateButton. */
    class HydratedTemplateButton implements IHydratedTemplateButton {

        /**
         * Constructs a new HydratedTemplateButton.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IHydratedTemplateButton);

        /** HydratedTemplateButton index. */
        public index: number;

        /** HydratedTemplateButton quickReplyButton. */
        public quickReplyButton?: (E2E.HydratedTemplateButton.IHydratedQuickReplyButton|null);

        /** HydratedTemplateButton urlButton. */
        public urlButton?: (E2E.HydratedTemplateButton.IHydratedURLButton|null);

        /** HydratedTemplateButton callButton. */
        public callButton?: (E2E.HydratedTemplateButton.IHydratedCallButton|null);

        /** HydratedTemplateButton hydratedButton. */
        public hydratedButton?: ("quickReplyButton"|"urlButton"|"callButton");

        /**
         * Creates a new HydratedTemplateButton instance using the specified properties.
         * @param [properties] Properties to set
         * @returns HydratedTemplateButton instance
         */
        public static create(properties?: E2E.IHydratedTemplateButton): E2E.HydratedTemplateButton;

        /**
         * Encodes the specified HydratedTemplateButton message. Does not implicitly {@link E2E.HydratedTemplateButton.verify|verify} messages.
         * @param message HydratedTemplateButton message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IHydratedTemplateButton, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified HydratedTemplateButton message, length delimited. Does not implicitly {@link E2E.HydratedTemplateButton.verify|verify} messages.
         * @param message HydratedTemplateButton message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IHydratedTemplateButton, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a HydratedTemplateButton message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns HydratedTemplateButton
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.HydratedTemplateButton;

        /**
         * Decodes a HydratedTemplateButton message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns HydratedTemplateButton
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.HydratedTemplateButton;

        /**
         * Verifies a HydratedTemplateButton message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a HydratedTemplateButton message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns HydratedTemplateButton
         */
        public static fromObject(object: { [k: string]: any }): E2E.HydratedTemplateButton;

        /**
         * Creates a plain object from a HydratedTemplateButton message. Also converts values to other types if specified.
         * @param message HydratedTemplateButton
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.HydratedTemplateButton, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this HydratedTemplateButton to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for HydratedTemplateButton
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace HydratedTemplateButton {

        /** Properties of a HydratedCallButton. */
        interface IHydratedCallButton {

            /** HydratedCallButton displayText */
            displayText?: (string|null);

            /** HydratedCallButton phoneNumber */
            phoneNumber?: (string|null);
        }

        /** Represents a HydratedCallButton. */
        class HydratedCallButton implements IHydratedCallButton {

            /**
             * Constructs a new HydratedCallButton.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.HydratedTemplateButton.IHydratedCallButton);

            /** HydratedCallButton displayText. */
            public displayText: string;

            /** HydratedCallButton phoneNumber. */
            public phoneNumber: string;

            /**
             * Creates a new HydratedCallButton instance using the specified properties.
             * @param [properties] Properties to set
             * @returns HydratedCallButton instance
             */
            public static create(properties?: E2E.HydratedTemplateButton.IHydratedCallButton): E2E.HydratedTemplateButton.HydratedCallButton;

            /**
             * Encodes the specified HydratedCallButton message. Does not implicitly {@link E2E.HydratedTemplateButton.HydratedCallButton.verify|verify} messages.
             * @param message HydratedCallButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.HydratedTemplateButton.IHydratedCallButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified HydratedCallButton message, length delimited. Does not implicitly {@link E2E.HydratedTemplateButton.HydratedCallButton.verify|verify} messages.
             * @param message HydratedCallButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.HydratedTemplateButton.IHydratedCallButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a HydratedCallButton message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns HydratedCallButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.HydratedTemplateButton.HydratedCallButton;

            /**
             * Decodes a HydratedCallButton message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns HydratedCallButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.HydratedTemplateButton.HydratedCallButton;

            /**
             * Verifies a HydratedCallButton message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a HydratedCallButton message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns HydratedCallButton
             */
            public static fromObject(object: { [k: string]: any }): E2E.HydratedTemplateButton.HydratedCallButton;

            /**
             * Creates a plain object from a HydratedCallButton message. Also converts values to other types if specified.
             * @param message HydratedCallButton
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.HydratedTemplateButton.HydratedCallButton, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this HydratedCallButton to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for HydratedCallButton
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a HydratedQuickReplyButton. */
        interface IHydratedQuickReplyButton {

            /** HydratedQuickReplyButton displayText */
            displayText?: (string|null);

            /** HydratedQuickReplyButton id */
            id?: (string|null);
        }

        /** Represents a HydratedQuickReplyButton. */
        class HydratedQuickReplyButton implements IHydratedQuickReplyButton {

            /**
             * Constructs a new HydratedQuickReplyButton.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.HydratedTemplateButton.IHydratedQuickReplyButton);

            /** HydratedQuickReplyButton displayText. */
            public displayText: string;

            /** HydratedQuickReplyButton id. */
            public id: string;

            /**
             * Creates a new HydratedQuickReplyButton instance using the specified properties.
             * @param [properties] Properties to set
             * @returns HydratedQuickReplyButton instance
             */
            public static create(properties?: E2E.HydratedTemplateButton.IHydratedQuickReplyButton): E2E.HydratedTemplateButton.HydratedQuickReplyButton;

            /**
             * Encodes the specified HydratedQuickReplyButton message. Does not implicitly {@link E2E.HydratedTemplateButton.HydratedQuickReplyButton.verify|verify} messages.
             * @param message HydratedQuickReplyButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.HydratedTemplateButton.IHydratedQuickReplyButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified HydratedQuickReplyButton message, length delimited. Does not implicitly {@link E2E.HydratedTemplateButton.HydratedQuickReplyButton.verify|verify} messages.
             * @param message HydratedQuickReplyButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.HydratedTemplateButton.IHydratedQuickReplyButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a HydratedQuickReplyButton message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns HydratedQuickReplyButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.HydratedTemplateButton.HydratedQuickReplyButton;

            /**
             * Decodes a HydratedQuickReplyButton message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns HydratedQuickReplyButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.HydratedTemplateButton.HydratedQuickReplyButton;

            /**
             * Verifies a HydratedQuickReplyButton message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a HydratedQuickReplyButton message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns HydratedQuickReplyButton
             */
            public static fromObject(object: { [k: string]: any }): E2E.HydratedTemplateButton.HydratedQuickReplyButton;

            /**
             * Creates a plain object from a HydratedQuickReplyButton message. Also converts values to other types if specified.
             * @param message HydratedQuickReplyButton
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.HydratedTemplateButton.HydratedQuickReplyButton, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this HydratedQuickReplyButton to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for HydratedQuickReplyButton
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a HydratedURLButton. */
        interface IHydratedURLButton {

            /** HydratedURLButton displayText */
            displayText?: (string|null);

            /** HydratedURLButton url */
            url?: (string|null);

            /** HydratedURLButton consentedUsersUrl */
            consentedUsersUrl?: (string|null);

            /** HydratedURLButton webviewPresentation */
            webviewPresentation?: (E2E.HydratedTemplateButton.HydratedURLButton.WebviewPresentationType|null);
        }

        /** Represents a HydratedURLButton. */
        class HydratedURLButton implements IHydratedURLButton {

            /**
             * Constructs a new HydratedURLButton.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.HydratedTemplateButton.IHydratedURLButton);

            /** HydratedURLButton displayText. */
            public displayText: string;

            /** HydratedURLButton url. */
            public url: string;

            /** HydratedURLButton consentedUsersUrl. */
            public consentedUsersUrl: string;

            /** HydratedURLButton webviewPresentation. */
            public webviewPresentation: E2E.HydratedTemplateButton.HydratedURLButton.WebviewPresentationType;

            /**
             * Creates a new HydratedURLButton instance using the specified properties.
             * @param [properties] Properties to set
             * @returns HydratedURLButton instance
             */
            public static create(properties?: E2E.HydratedTemplateButton.IHydratedURLButton): E2E.HydratedTemplateButton.HydratedURLButton;

            /**
             * Encodes the specified HydratedURLButton message. Does not implicitly {@link E2E.HydratedTemplateButton.HydratedURLButton.verify|verify} messages.
             * @param message HydratedURLButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.HydratedTemplateButton.IHydratedURLButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified HydratedURLButton message, length delimited. Does not implicitly {@link E2E.HydratedTemplateButton.HydratedURLButton.verify|verify} messages.
             * @param message HydratedURLButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.HydratedTemplateButton.IHydratedURLButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a HydratedURLButton message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns HydratedURLButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.HydratedTemplateButton.HydratedURLButton;

            /**
             * Decodes a HydratedURLButton message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns HydratedURLButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.HydratedTemplateButton.HydratedURLButton;

            /**
             * Verifies a HydratedURLButton message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a HydratedURLButton message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns HydratedURLButton
             */
            public static fromObject(object: { [k: string]: any }): E2E.HydratedTemplateButton.HydratedURLButton;

            /**
             * Creates a plain object from a HydratedURLButton message. Also converts values to other types if specified.
             * @param message HydratedURLButton
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.HydratedTemplateButton.HydratedURLButton, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this HydratedURLButton to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for HydratedURLButton
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace HydratedURLButton {

            /** WebviewPresentationType enum. */
            enum WebviewPresentationType {
                FULL = 1,
                TALL = 2,
                COMPACT = 3
            }
        }
    }

    /** Properties of a TemplateButton. */
    interface ITemplateButton {

        /** TemplateButton index */
        index?: (number|null);

        /** TemplateButton quickReplyButton */
        quickReplyButton?: (E2E.TemplateButton.IQuickReplyButton|null);

        /** TemplateButton urlButton */
        urlButton?: (E2E.TemplateButton.IURLButton|null);

        /** TemplateButton callButton */
        callButton?: (E2E.TemplateButton.ICallButton|null);
    }

    /** Represents a TemplateButton. */
    class TemplateButton implements ITemplateButton {

        /**
         * Constructs a new TemplateButton.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.ITemplateButton);

        /** TemplateButton index. */
        public index: number;

        /** TemplateButton quickReplyButton. */
        public quickReplyButton?: (E2E.TemplateButton.IQuickReplyButton|null);

        /** TemplateButton urlButton. */
        public urlButton?: (E2E.TemplateButton.IURLButton|null);

        /** TemplateButton callButton. */
        public callButton?: (E2E.TemplateButton.ICallButton|null);

        /** TemplateButton button. */
        public button?: ("quickReplyButton"|"urlButton"|"callButton");

        /**
         * Creates a new TemplateButton instance using the specified properties.
         * @param [properties] Properties to set
         * @returns TemplateButton instance
         */
        public static create(properties?: E2E.ITemplateButton): E2E.TemplateButton;

        /**
         * Encodes the specified TemplateButton message. Does not implicitly {@link E2E.TemplateButton.verify|verify} messages.
         * @param message TemplateButton message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.ITemplateButton, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified TemplateButton message, length delimited. Does not implicitly {@link E2E.TemplateButton.verify|verify} messages.
         * @param message TemplateButton message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.ITemplateButton, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a TemplateButton message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns TemplateButton
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.TemplateButton;

        /**
         * Decodes a TemplateButton message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns TemplateButton
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.TemplateButton;

        /**
         * Verifies a TemplateButton message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a TemplateButton message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns TemplateButton
         */
        public static fromObject(object: { [k: string]: any }): E2E.TemplateButton;

        /**
         * Creates a plain object from a TemplateButton message. Also converts values to other types if specified.
         * @param message TemplateButton
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.TemplateButton, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this TemplateButton to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for TemplateButton
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace TemplateButton {

        /** Properties of a CallButton. */
        interface ICallButton {

            /** CallButton displayText */
            displayText?: (E2E.Message.IHighlyStructuredMessage|null);

            /** CallButton phoneNumber */
            phoneNumber?: (E2E.Message.IHighlyStructuredMessage|null);
        }

        /** Represents a CallButton. */
        class CallButton implements ICallButton {

            /**
             * Constructs a new CallButton.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.TemplateButton.ICallButton);

            /** CallButton displayText. */
            public displayText?: (E2E.Message.IHighlyStructuredMessage|null);

            /** CallButton phoneNumber. */
            public phoneNumber?: (E2E.Message.IHighlyStructuredMessage|null);

            /**
             * Creates a new CallButton instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CallButton instance
             */
            public static create(properties?: E2E.TemplateButton.ICallButton): E2E.TemplateButton.CallButton;

            /**
             * Encodes the specified CallButton message. Does not implicitly {@link E2E.TemplateButton.CallButton.verify|verify} messages.
             * @param message CallButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.TemplateButton.ICallButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CallButton message, length delimited. Does not implicitly {@link E2E.TemplateButton.CallButton.verify|verify} messages.
             * @param message CallButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.TemplateButton.ICallButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CallButton message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CallButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.TemplateButton.CallButton;

            /**
             * Decodes a CallButton message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CallButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.TemplateButton.CallButton;

            /**
             * Verifies a CallButton message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CallButton message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CallButton
             */
            public static fromObject(object: { [k: string]: any }): E2E.TemplateButton.CallButton;

            /**
             * Creates a plain object from a CallButton message. Also converts values to other types if specified.
             * @param message CallButton
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.TemplateButton.CallButton, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CallButton to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CallButton
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a QuickReplyButton. */
        interface IQuickReplyButton {

            /** QuickReplyButton displayText */
            displayText?: (E2E.Message.IHighlyStructuredMessage|null);

            /** QuickReplyButton id */
            id?: (string|null);
        }

        /** Represents a QuickReplyButton. */
        class QuickReplyButton implements IQuickReplyButton {

            /**
             * Constructs a new QuickReplyButton.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.TemplateButton.IQuickReplyButton);

            /** QuickReplyButton displayText. */
            public displayText?: (E2E.Message.IHighlyStructuredMessage|null);

            /** QuickReplyButton id. */
            public id: string;

            /**
             * Creates a new QuickReplyButton instance using the specified properties.
             * @param [properties] Properties to set
             * @returns QuickReplyButton instance
             */
            public static create(properties?: E2E.TemplateButton.IQuickReplyButton): E2E.TemplateButton.QuickReplyButton;

            /**
             * Encodes the specified QuickReplyButton message. Does not implicitly {@link E2E.TemplateButton.QuickReplyButton.verify|verify} messages.
             * @param message QuickReplyButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.TemplateButton.IQuickReplyButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified QuickReplyButton message, length delimited. Does not implicitly {@link E2E.TemplateButton.QuickReplyButton.verify|verify} messages.
             * @param message QuickReplyButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.TemplateButton.IQuickReplyButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a QuickReplyButton message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns QuickReplyButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.TemplateButton.QuickReplyButton;

            /**
             * Decodes a QuickReplyButton message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns QuickReplyButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.TemplateButton.QuickReplyButton;

            /**
             * Verifies a QuickReplyButton message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a QuickReplyButton message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns QuickReplyButton
             */
            public static fromObject(object: { [k: string]: any }): E2E.TemplateButton.QuickReplyButton;

            /**
             * Creates a plain object from a QuickReplyButton message. Also converts values to other types if specified.
             * @param message QuickReplyButton
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.TemplateButton.QuickReplyButton, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this QuickReplyButton to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for QuickReplyButton
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a URLButton. */
        interface IURLButton {

            /** URLButton displayText */
            displayText?: (E2E.Message.IHighlyStructuredMessage|null);

            /** URLButton url */
            url?: (E2E.Message.IHighlyStructuredMessage|null);
        }

        /** Represents a URLButton. */
        class URLButton implements IURLButton {

            /**
             * Constructs a new URLButton.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.TemplateButton.IURLButton);

            /** URLButton displayText. */
            public displayText?: (E2E.Message.IHighlyStructuredMessage|null);

            /** URLButton url. */
            public url?: (E2E.Message.IHighlyStructuredMessage|null);

            /**
             * Creates a new URLButton instance using the specified properties.
             * @param [properties] Properties to set
             * @returns URLButton instance
             */
            public static create(properties?: E2E.TemplateButton.IURLButton): E2E.TemplateButton.URLButton;

            /**
             * Encodes the specified URLButton message. Does not implicitly {@link E2E.TemplateButton.URLButton.verify|verify} messages.
             * @param message URLButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.TemplateButton.IURLButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified URLButton message, length delimited. Does not implicitly {@link E2E.TemplateButton.URLButton.verify|verify} messages.
             * @param message URLButton message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.TemplateButton.IURLButton, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a URLButton message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns URLButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.TemplateButton.URLButton;

            /**
             * Decodes a URLButton message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns URLButton
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.TemplateButton.URLButton;

            /**
             * Verifies a URLButton message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a URLButton message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns URLButton
             */
            public static fromObject(object: { [k: string]: any }): E2E.TemplateButton.URLButton;

            /**
             * Creates a plain object from a URLButton message. Also converts values to other types if specified.
             * @param message URLButton
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.TemplateButton.URLButton, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this URLButton to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for URLButton
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Properties of a Location. */
    interface ILocation {

        /** Location degreesLatitude */
        degreesLatitude?: (number|null);

        /** Location degreesLongitude */
        degreesLongitude?: (number|null);

        /** Location name */
        name?: (string|null);
    }

    /** Represents a Location. */
    class Location implements ILocation {

        /**
         * Constructs a new Location.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.ILocation);

        /** Location degreesLatitude. */
        public degreesLatitude: number;

        /** Location degreesLongitude. */
        public degreesLongitude: number;

        /** Location name. */
        public name: string;

        /**
         * Creates a new Location instance using the specified properties.
         * @param [properties] Properties to set
         * @returns Location instance
         */
        public static create(properties?: E2E.ILocation): E2E.Location;

        /**
         * Encodes the specified Location message. Does not implicitly {@link E2E.Location.verify|verify} messages.
         * @param message Location message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.ILocation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified Location message, length delimited. Does not implicitly {@link E2E.Location.verify|verify} messages.
         * @param message Location message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.ILocation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a Location message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Location
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Location;

        /**
         * Decodes a Location message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns Location
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Location;

        /**
         * Verifies a Location message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a Location message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Location
         */
        public static fromObject(object: { [k: string]: any }): E2E.Location;

        /**
         * Creates a plain object from a Location message. Also converts values to other types if specified.
         * @param message Location
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.Location, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Location to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for Location
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a Point. */
    interface IPoint {

        /** Point xDeprecated */
        xDeprecated?: (number|null);

        /** Point yDeprecated */
        yDeprecated?: (number|null);

        /** Point x */
        x?: (number|null);

        /** Point y */
        y?: (number|null);
    }

    /** Represents a Point. */
    class Point implements IPoint {

        /**
         * Constructs a new Point.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IPoint);

        /** Point xDeprecated. */
        public xDeprecated: number;

        /** Point yDeprecated. */
        public yDeprecated: number;

        /** Point x. */
        public x: number;

        /** Point y. */
        public y: number;

        /**
         * Creates a new Point instance using the specified properties.
         * @param [properties] Properties to set
         * @returns Point instance
         */
        public static create(properties?: E2E.IPoint): E2E.Point;

        /**
         * Encodes the specified Point message. Does not implicitly {@link E2E.Point.verify|verify} messages.
         * @param message Point message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IPoint, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified Point message, length delimited. Does not implicitly {@link E2E.Point.verify|verify} messages.
         * @param message Point message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IPoint, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a Point message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Point
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Point;

        /**
         * Decodes a Point message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns Point
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Point;

        /**
         * Verifies a Point message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a Point message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Point
         */
        public static fromObject(object: { [k: string]: any }): E2E.Point;

        /**
         * Creates a plain object from a Point message. Also converts values to other types if specified.
         * @param message Point
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.Point, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Point to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for Point
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an InteractiveAnnotation. */
    interface IInteractiveAnnotation {

        /** InteractiveAnnotation polygonVertices */
        polygonVertices?: (E2E.IPoint[]|null);

        /** InteractiveAnnotation shouldSkipConfirmation */
        shouldSkipConfirmation?: (boolean|null);

        /** InteractiveAnnotation embeddedContent */
        embeddedContent?: (E2E.IEmbeddedContent|null);

        /** InteractiveAnnotation statusLinkType */
        statusLinkType?: (E2E.InteractiveAnnotation.StatusLinkType|null);

        /** InteractiveAnnotation location */
        location?: (E2E.ILocation|null);

        /** InteractiveAnnotation newsletter */
        newsletter?: (E2E.ContextInfo.IForwardedNewsletterMessageInfo|null);

        /** InteractiveAnnotation embeddedAction */
        embeddedAction?: (boolean|null);

        /** InteractiveAnnotation tapAction */
        tapAction?: (E2E.ITapLinkAction|null);
    }

    /** Represents an InteractiveAnnotation. */
    class InteractiveAnnotation implements IInteractiveAnnotation {

        /**
         * Constructs a new InteractiveAnnotation.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IInteractiveAnnotation);

        /** InteractiveAnnotation polygonVertices. */
        public polygonVertices: E2E.IPoint[];

        /** InteractiveAnnotation shouldSkipConfirmation. */
        public shouldSkipConfirmation: boolean;

        /** InteractiveAnnotation embeddedContent. */
        public embeddedContent?: (E2E.IEmbeddedContent|null);

        /** InteractiveAnnotation statusLinkType. */
        public statusLinkType: E2E.InteractiveAnnotation.StatusLinkType;

        /** InteractiveAnnotation location. */
        public location?: (E2E.ILocation|null);

        /** InteractiveAnnotation newsletter. */
        public newsletter?: (E2E.ContextInfo.IForwardedNewsletterMessageInfo|null);

        /** InteractiveAnnotation embeddedAction. */
        public embeddedAction?: (boolean|null);

        /** InteractiveAnnotation tapAction. */
        public tapAction?: (E2E.ITapLinkAction|null);

        /** InteractiveAnnotation action. */
        public action?: ("location"|"newsletter"|"embeddedAction"|"tapAction");

        /**
         * Creates a new InteractiveAnnotation instance using the specified properties.
         * @param [properties] Properties to set
         * @returns InteractiveAnnotation instance
         */
        public static create(properties?: E2E.IInteractiveAnnotation): E2E.InteractiveAnnotation;

        /**
         * Encodes the specified InteractiveAnnotation message. Does not implicitly {@link E2E.InteractiveAnnotation.verify|verify} messages.
         * @param message InteractiveAnnotation message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IInteractiveAnnotation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified InteractiveAnnotation message, length delimited. Does not implicitly {@link E2E.InteractiveAnnotation.verify|verify} messages.
         * @param message InteractiveAnnotation message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IInteractiveAnnotation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an InteractiveAnnotation message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns InteractiveAnnotation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.InteractiveAnnotation;

        /**
         * Decodes an InteractiveAnnotation message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns InteractiveAnnotation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.InteractiveAnnotation;

        /**
         * Verifies an InteractiveAnnotation message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an InteractiveAnnotation message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns InteractiveAnnotation
         */
        public static fromObject(object: { [k: string]: any }): E2E.InteractiveAnnotation;

        /**
         * Creates a plain object from an InteractiveAnnotation message. Also converts values to other types if specified.
         * @param message InteractiveAnnotation
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.InteractiveAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this InteractiveAnnotation to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for InteractiveAnnotation
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace InteractiveAnnotation {

        /** StatusLinkType enum. */
        enum StatusLinkType {
            RASTERIZED_LINK_PREVIEW = 1,
            RASTERIZED_LINK_TRUNCATED = 2,
            RASTERIZED_LINK_FULL_URL = 3
        }
    }

    /** Properties of a TapLinkAction. */
    interface ITapLinkAction {

        /** TapLinkAction title */
        title?: (string|null);

        /** TapLinkAction tapUrl */
        tapUrl?: (string|null);
    }

    /** Represents a TapLinkAction. */
    class TapLinkAction implements ITapLinkAction {

        /**
         * Constructs a new TapLinkAction.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.ITapLinkAction);

        /** TapLinkAction title. */
        public title: string;

        /** TapLinkAction tapUrl. */
        public tapUrl: string;

        /**
         * Creates a new TapLinkAction instance using the specified properties.
         * @param [properties] Properties to set
         * @returns TapLinkAction instance
         */
        public static create(properties?: E2E.ITapLinkAction): E2E.TapLinkAction;

        /**
         * Encodes the specified TapLinkAction message. Does not implicitly {@link E2E.TapLinkAction.verify|verify} messages.
         * @param message TapLinkAction message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.ITapLinkAction, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified TapLinkAction message, length delimited. Does not implicitly {@link E2E.TapLinkAction.verify|verify} messages.
         * @param message TapLinkAction message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.ITapLinkAction, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a TapLinkAction message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns TapLinkAction
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.TapLinkAction;

        /**
         * Decodes a TapLinkAction message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns TapLinkAction
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.TapLinkAction;

        /**
         * Verifies a TapLinkAction message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a TapLinkAction message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns TapLinkAction
         */
        public static fromObject(object: { [k: string]: any }): E2E.TapLinkAction;

        /**
         * Creates a plain object from a TapLinkAction message. Also converts values to other types if specified.
         * @param message TapLinkAction
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.TapLinkAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this TapLinkAction to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for TapLinkAction
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an EmbeddedContent. */
    interface IEmbeddedContent {

        /** EmbeddedContent embeddedMessage */
        embeddedMessage?: (E2E.IEmbeddedMessage|null);

        /** EmbeddedContent embeddedMusic */
        embeddedMusic?: (E2E.IEmbeddedMusic|null);
    }

    /** Represents an EmbeddedContent. */
    class EmbeddedContent implements IEmbeddedContent {

        /**
         * Constructs a new EmbeddedContent.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IEmbeddedContent);

        /** EmbeddedContent embeddedMessage. */
        public embeddedMessage?: (E2E.IEmbeddedMessage|null);

        /** EmbeddedContent embeddedMusic. */
        public embeddedMusic?: (E2E.IEmbeddedMusic|null);

        /** EmbeddedContent content. */
        public content?: ("embeddedMessage"|"embeddedMusic");

        /**
         * Creates a new EmbeddedContent instance using the specified properties.
         * @param [properties] Properties to set
         * @returns EmbeddedContent instance
         */
        public static create(properties?: E2E.IEmbeddedContent): E2E.EmbeddedContent;

        /**
         * Encodes the specified EmbeddedContent message. Does not implicitly {@link E2E.EmbeddedContent.verify|verify} messages.
         * @param message EmbeddedContent message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IEmbeddedContent, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified EmbeddedContent message, length delimited. Does not implicitly {@link E2E.EmbeddedContent.verify|verify} messages.
         * @param message EmbeddedContent message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IEmbeddedContent, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an EmbeddedContent message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns EmbeddedContent
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.EmbeddedContent;

        /**
         * Decodes an EmbeddedContent message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns EmbeddedContent
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.EmbeddedContent;

        /**
         * Verifies an EmbeddedContent message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an EmbeddedContent message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns EmbeddedContent
         */
        public static fromObject(object: { [k: string]: any }): E2E.EmbeddedContent;

        /**
         * Creates a plain object from an EmbeddedContent message. Also converts values to other types if specified.
         * @param message EmbeddedContent
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.EmbeddedContent, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this EmbeddedContent to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for EmbeddedContent
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an EmbeddedMusic. */
    interface IEmbeddedMusic {

        /** EmbeddedMusic musicContentMediaId */
        musicContentMediaId?: (string|null);

        /** EmbeddedMusic songId */
        songId?: (string|null);

        /** EmbeddedMusic author */
        author?: (string|null);

        /** EmbeddedMusic title */
        title?: (string|null);

        /** EmbeddedMusic artworkDirectPath */
        artworkDirectPath?: (string|null);

        /** EmbeddedMusic artworkSha256 */
        artworkSha256?: (Uint8Array|null);

        /** EmbeddedMusic artworkEncSha256 */
        artworkEncSha256?: (Uint8Array|null);

        /** EmbeddedMusic artworkMediaKey */
        artworkMediaKey?: (Uint8Array|null);

        /** EmbeddedMusic artistAttribution */
        artistAttribution?: (string|null);

        /** EmbeddedMusic countryBlocklist */
        countryBlocklist?: (Uint8Array|null);

        /** EmbeddedMusic isExplicit */
        isExplicit?: (boolean|null);
    }

    /** Represents an EmbeddedMusic. */
    class EmbeddedMusic implements IEmbeddedMusic {

        /**
         * Constructs a new EmbeddedMusic.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IEmbeddedMusic);

        /** EmbeddedMusic musicContentMediaId. */
        public musicContentMediaId: string;

        /** EmbeddedMusic songId. */
        public songId: string;

        /** EmbeddedMusic author. */
        public author: string;

        /** EmbeddedMusic title. */
        public title: string;

        /** EmbeddedMusic artworkDirectPath. */
        public artworkDirectPath: string;

        /** EmbeddedMusic artworkSha256. */
        public artworkSha256: Uint8Array;

        /** EmbeddedMusic artworkEncSha256. */
        public artworkEncSha256: Uint8Array;

        /** EmbeddedMusic artworkMediaKey. */
        public artworkMediaKey: Uint8Array;

        /** EmbeddedMusic artistAttribution. */
        public artistAttribution: string;

        /** EmbeddedMusic countryBlocklist. */
        public countryBlocklist: Uint8Array;

        /** EmbeddedMusic isExplicit. */
        public isExplicit: boolean;

        /**
         * Creates a new EmbeddedMusic instance using the specified properties.
         * @param [properties] Properties to set
         * @returns EmbeddedMusic instance
         */
        public static create(properties?: E2E.IEmbeddedMusic): E2E.EmbeddedMusic;

        /**
         * Encodes the specified EmbeddedMusic message. Does not implicitly {@link E2E.EmbeddedMusic.verify|verify} messages.
         * @param message EmbeddedMusic message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IEmbeddedMusic, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified EmbeddedMusic message, length delimited. Does not implicitly {@link E2E.EmbeddedMusic.verify|verify} messages.
         * @param message EmbeddedMusic message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IEmbeddedMusic, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an EmbeddedMusic message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns EmbeddedMusic
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.EmbeddedMusic;

        /**
         * Decodes an EmbeddedMusic message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns EmbeddedMusic
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.EmbeddedMusic;

        /**
         * Verifies an EmbeddedMusic message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an EmbeddedMusic message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns EmbeddedMusic
         */
        public static fromObject(object: { [k: string]: any }): E2E.EmbeddedMusic;

        /**
         * Creates a plain object from an EmbeddedMusic message. Also converts values to other types if specified.
         * @param message EmbeddedMusic
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.EmbeddedMusic, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this EmbeddedMusic to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for EmbeddedMusic
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an EmbeddedMessage. */
    interface IEmbeddedMessage {

        /** EmbeddedMessage stanzaId */
        stanzaId?: (string|null);

        /** EmbeddedMessage message */
        message?: (E2E.IMessage|null);
    }

    /** Represents an EmbeddedMessage. */
    class EmbeddedMessage implements IEmbeddedMessage {

        /**
         * Constructs a new EmbeddedMessage.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IEmbeddedMessage);

        /** EmbeddedMessage stanzaId. */
        public stanzaId: string;

        /** EmbeddedMessage message. */
        public message?: (E2E.IMessage|null);

        /**
         * Creates a new EmbeddedMessage instance using the specified properties.
         * @param [properties] Properties to set
         * @returns EmbeddedMessage instance
         */
        public static create(properties?: E2E.IEmbeddedMessage): E2E.EmbeddedMessage;

        /**
         * Encodes the specified EmbeddedMessage message. Does not implicitly {@link E2E.EmbeddedMessage.verify|verify} messages.
         * @param message EmbeddedMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IEmbeddedMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified EmbeddedMessage message, length delimited. Does not implicitly {@link E2E.EmbeddedMessage.verify|verify} messages.
         * @param message EmbeddedMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IEmbeddedMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an EmbeddedMessage message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns EmbeddedMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.EmbeddedMessage;

        /**
         * Decodes an EmbeddedMessage message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns EmbeddedMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.EmbeddedMessage;

        /**
         * Verifies an EmbeddedMessage message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an EmbeddedMessage message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns EmbeddedMessage
         */
        public static fromObject(object: { [k: string]: any }): E2E.EmbeddedMessage;

        /**
         * Creates a plain object from an EmbeddedMessage message. Also converts values to other types if specified.
         * @param message EmbeddedMessage
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.EmbeddedMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this EmbeddedMessage to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for EmbeddedMessage
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a DeviceListMetadata. */
    interface IDeviceListMetadata {

        /** DeviceListMetadata senderKeyHash */
        senderKeyHash?: (Uint8Array|null);

        /** DeviceListMetadata senderTimestamp */
        senderTimestamp?: (number|Long|null);

        /** DeviceListMetadata senderKeyIndexes */
        senderKeyIndexes?: (number[]|null);

        /** DeviceListMetadata senderAccountType */
        senderAccountType?: (Adv.ADVEncryptionType|null);

        /** DeviceListMetadata receiverAccountType */
        receiverAccountType?: (Adv.ADVEncryptionType|null);

        /** DeviceListMetadata recipientKeyHash */
        recipientKeyHash?: (Uint8Array|null);

        /** DeviceListMetadata recipientTimestamp */
        recipientTimestamp?: (number|Long|null);

        /** DeviceListMetadata recipientKeyIndexes */
        recipientKeyIndexes?: (number[]|null);
    }

    /** Represents a DeviceListMetadata. */
    class DeviceListMetadata implements IDeviceListMetadata {

        /**
         * Constructs a new DeviceListMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IDeviceListMetadata);

        /** DeviceListMetadata senderKeyHash. */
        public senderKeyHash: Uint8Array;

        /** DeviceListMetadata senderTimestamp. */
        public senderTimestamp: (number|Long);

        /** DeviceListMetadata senderKeyIndexes. */
        public senderKeyIndexes: number[];

        /** DeviceListMetadata senderAccountType. */
        public senderAccountType: Adv.ADVEncryptionType;

        /** DeviceListMetadata receiverAccountType. */
        public receiverAccountType: Adv.ADVEncryptionType;

        /** DeviceListMetadata recipientKeyHash. */
        public recipientKeyHash: Uint8Array;

        /** DeviceListMetadata recipientTimestamp. */
        public recipientTimestamp: (number|Long);

        /** DeviceListMetadata recipientKeyIndexes. */
        public recipientKeyIndexes: number[];

        /**
         * Creates a new DeviceListMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns DeviceListMetadata instance
         */
        public static create(properties?: E2E.IDeviceListMetadata): E2E.DeviceListMetadata;

        /**
         * Encodes the specified DeviceListMetadata message. Does not implicitly {@link E2E.DeviceListMetadata.verify|verify} messages.
         * @param message DeviceListMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IDeviceListMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified DeviceListMetadata message, length delimited. Does not implicitly {@link E2E.DeviceListMetadata.verify|verify} messages.
         * @param message DeviceListMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IDeviceListMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a DeviceListMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns DeviceListMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.DeviceListMetadata;

        /**
         * Decodes a DeviceListMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns DeviceListMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.DeviceListMetadata;

        /**
         * Verifies a DeviceListMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a DeviceListMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns DeviceListMetadata
         */
        public static fromObject(object: { [k: string]: any }): E2E.DeviceListMetadata;

        /**
         * Creates a plain object from a DeviceListMetadata message. Also converts values to other types if specified.
         * @param message DeviceListMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.DeviceListMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this DeviceListMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for DeviceListMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a MessageContextInfo. */
    interface IMessageContextInfo {

        /** MessageContextInfo deviceListMetadata */
        deviceListMetadata?: (E2E.IDeviceListMetadata|null);

        /** MessageContextInfo deviceListMetadataVersion */
        deviceListMetadataVersion?: (number|null);

        /** MessageContextInfo messageSecret */
        messageSecret?: (Uint8Array|null);

        /** MessageContextInfo paddingBytes */
        paddingBytes?: (Uint8Array|null);

        /** MessageContextInfo messageAddOnDurationInSecs */
        messageAddOnDurationInSecs?: (number|null);

        /** MessageContextInfo botMessageSecret */
        botMessageSecret?: (Uint8Array|null);

        /** MessageContextInfo botMetadata */
        botMetadata?: (AICommon.IBotMetadata|null);

        /** MessageContextInfo reportingTokenVersion */
        reportingTokenVersion?: (number|null);

        /** MessageContextInfo messageAddOnExpiryType */
        messageAddOnExpiryType?: (E2E.MessageContextInfo.MessageAddonExpiryType|null);

        /** MessageContextInfo messageAssociation */
        messageAssociation?: (E2E.IMessageAssociation|null);

        /** MessageContextInfo capiCreatedGroup */
        capiCreatedGroup?: (boolean|null);

        /** MessageContextInfo supportPayload */
        supportPayload?: (string|null);

        /** MessageContextInfo limitSharing */
        limitSharing?: (Protocol.ILimitSharing|null);

        /** MessageContextInfo limitSharingV2 */
        limitSharingV2?: (Protocol.ILimitSharing|null);

        /** MessageContextInfo threadId */
        threadId?: (E2E.IThreadID[]|null);
    }

    /** Represents a MessageContextInfo. */
    class MessageContextInfo implements IMessageContextInfo {

        /**
         * Constructs a new MessageContextInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IMessageContextInfo);

        /** MessageContextInfo deviceListMetadata. */
        public deviceListMetadata?: (E2E.IDeviceListMetadata|null);

        /** MessageContextInfo deviceListMetadataVersion. */
        public deviceListMetadataVersion: number;

        /** MessageContextInfo messageSecret. */
        public messageSecret: Uint8Array;

        /** MessageContextInfo paddingBytes. */
        public paddingBytes: Uint8Array;

        /** MessageContextInfo messageAddOnDurationInSecs. */
        public messageAddOnDurationInSecs: number;

        /** MessageContextInfo botMessageSecret. */
        public botMessageSecret: Uint8Array;

        /** MessageContextInfo botMetadata. */
        public botMetadata?: (AICommon.IBotMetadata|null);

        /** MessageContextInfo reportingTokenVersion. */
        public reportingTokenVersion: number;

        /** MessageContextInfo messageAddOnExpiryType. */
        public messageAddOnExpiryType: E2E.MessageContextInfo.MessageAddonExpiryType;

        /** MessageContextInfo messageAssociation. */
        public messageAssociation?: (E2E.IMessageAssociation|null);

        /** MessageContextInfo capiCreatedGroup. */
        public capiCreatedGroup: boolean;

        /** MessageContextInfo supportPayload. */
        public supportPayload: string;

        /** MessageContextInfo limitSharing. */
        public limitSharing?: (Protocol.ILimitSharing|null);

        /** MessageContextInfo limitSharingV2. */
        public limitSharingV2?: (Protocol.ILimitSharing|null);

        /** MessageContextInfo threadId. */
        public threadId: E2E.IThreadID[];

        /**
         * Creates a new MessageContextInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns MessageContextInfo instance
         */
        public static create(properties?: E2E.IMessageContextInfo): E2E.MessageContextInfo;

        /**
         * Encodes the specified MessageContextInfo message. Does not implicitly {@link E2E.MessageContextInfo.verify|verify} messages.
         * @param message MessageContextInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IMessageContextInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified MessageContextInfo message, length delimited. Does not implicitly {@link E2E.MessageContextInfo.verify|verify} messages.
         * @param message MessageContextInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IMessageContextInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a MessageContextInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns MessageContextInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.MessageContextInfo;

        /**
         * Decodes a MessageContextInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns MessageContextInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.MessageContextInfo;

        /**
         * Verifies a MessageContextInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a MessageContextInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns MessageContextInfo
         */
        public static fromObject(object: { [k: string]: any }): E2E.MessageContextInfo;

        /**
         * Creates a plain object from a MessageContextInfo message. Also converts values to other types if specified.
         * @param message MessageContextInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.MessageContextInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this MessageContextInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for MessageContextInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace MessageContextInfo {

        /** MessageAddonExpiryType enum. */
        enum MessageAddonExpiryType {
            STATIC = 1,
            DEPENDENT_ON_PARENT = 2
        }
    }

    /** Properties of a ThreadID. */
    interface IThreadID {

        /** ThreadID threadType */
        threadType?: (E2E.ThreadID.ThreadType|null);

        /** ThreadID threadKey */
        threadKey?: (Protocol.IMessageKey|null);
    }

    /** Represents a ThreadID. */
    class ThreadID implements IThreadID {

        /**
         * Constructs a new ThreadID.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IThreadID);

        /** ThreadID threadType. */
        public threadType: E2E.ThreadID.ThreadType;

        /** ThreadID threadKey. */
        public threadKey?: (Protocol.IMessageKey|null);

        /**
         * Creates a new ThreadID instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ThreadID instance
         */
        public static create(properties?: E2E.IThreadID): E2E.ThreadID;

        /**
         * Encodes the specified ThreadID message. Does not implicitly {@link E2E.ThreadID.verify|verify} messages.
         * @param message ThreadID message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IThreadID, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ThreadID message, length delimited. Does not implicitly {@link E2E.ThreadID.verify|verify} messages.
         * @param message ThreadID message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IThreadID, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ThreadID message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ThreadID
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ThreadID;

        /**
         * Decodes a ThreadID message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ThreadID
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ThreadID;

        /**
         * Verifies a ThreadID message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ThreadID message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ThreadID
         */
        public static fromObject(object: { [k: string]: any }): E2E.ThreadID;

        /**
         * Creates a plain object from a ThreadID message. Also converts values to other types if specified.
         * @param message ThreadID
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.ThreadID, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ThreadID to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ThreadID
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace ThreadID {

        /** ThreadType enum. */
        enum ThreadType {
            UNKNOWN = 0,
            VIEW_REPLIES = 1,
            AI_THREAD = 2
        }
    }

    /** Properties of a MessageAssociation. */
    interface IMessageAssociation {

        /** MessageAssociation associationType */
        associationType?: (E2E.MessageAssociation.AssociationType|null);

        /** MessageAssociation parentMessageKey */
        parentMessageKey?: (Protocol.IMessageKey|null);

        /** MessageAssociation messageIndex */
        messageIndex?: (number|null);
    }

    /** Represents a MessageAssociation. */
    class MessageAssociation implements IMessageAssociation {

        /**
         * Constructs a new MessageAssociation.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IMessageAssociation);

        /** MessageAssociation associationType. */
        public associationType: E2E.MessageAssociation.AssociationType;

        /** MessageAssociation parentMessageKey. */
        public parentMessageKey?: (Protocol.IMessageKey|null);

        /** MessageAssociation messageIndex. */
        public messageIndex: number;

        /**
         * Creates a new MessageAssociation instance using the specified properties.
         * @param [properties] Properties to set
         * @returns MessageAssociation instance
         */
        public static create(properties?: E2E.IMessageAssociation): E2E.MessageAssociation;

        /**
         * Encodes the specified MessageAssociation message. Does not implicitly {@link E2E.MessageAssociation.verify|verify} messages.
         * @param message MessageAssociation message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IMessageAssociation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified MessageAssociation message, length delimited. Does not implicitly {@link E2E.MessageAssociation.verify|verify} messages.
         * @param message MessageAssociation message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IMessageAssociation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a MessageAssociation message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns MessageAssociation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.MessageAssociation;

        /**
         * Decodes a MessageAssociation message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns MessageAssociation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.MessageAssociation;

        /**
         * Verifies a MessageAssociation message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a MessageAssociation message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns MessageAssociation
         */
        public static fromObject(object: { [k: string]: any }): E2E.MessageAssociation;

        /**
         * Creates a plain object from a MessageAssociation message. Also converts values to other types if specified.
         * @param message MessageAssociation
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.MessageAssociation, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this MessageAssociation to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for MessageAssociation
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace MessageAssociation {

        /** AssociationType enum. */
        enum AssociationType {
            UNKNOWN = 0,
            MEDIA_ALBUM = 1,
            BOT_PLUGIN = 2,
            EVENT_COVER_IMAGE = 3,
            STATUS_POLL = 4,
            HD_VIDEO_DUAL_UPLOAD = 5,
            STATUS_EXTERNAL_RESHARE = 6,
            MEDIA_POLL = 7,
            STATUS_ADD_YOURS = 8,
            STATUS_NOTIFICATION = 9,
            HD_IMAGE_DUAL_UPLOAD = 10,
            STICKER_ANNOTATION = 11,
            MOTION_PHOTO = 12,
            STATUS_LINK_ACTION = 13,
            VIEW_ALL_REPLIES = 14,
            STATUS_ADD_YOURS_AI_IMAGINE = 15,
            STATUS_QUESTION = 16,
            STATUS_ADD_YOURS_DIWALI = 17
        }
    }

    /** Properties of a ContextInfo. */
    interface IContextInfo {

        /** ContextInfo stanzaId */
        stanzaId?: (string|null);

        /** ContextInfo participant */
        participant?: (string|null);

        /** ContextInfo quotedMessage */
        quotedMessage?: (E2E.IMessage|null);

        /** ContextInfo remoteJid */
        remoteJid?: (string|null);

        /** ContextInfo mentionedJid */
        mentionedJid?: (string[]|null);

        /** ContextInfo conversionSource */
        conversionSource?: (string|null);

        /** ContextInfo conversionData */
        conversionData?: (Uint8Array|null);

        /** ContextInfo conversionDelaySeconds */
        conversionDelaySeconds?: (number|null);

        /** ContextInfo forwardingScore */
        forwardingScore?: (number|null);

        /** ContextInfo isForwarded */
        isForwarded?: (boolean|null);

        /** ContextInfo quotedAd */
        quotedAd?: (E2E.ContextInfo.IAdReplyInfo|null);

        /** ContextInfo placeholderKey */
        placeholderKey?: (Protocol.IMessageKey|null);

        /** ContextInfo expiration */
        expiration?: (number|null);

        /** ContextInfo ephemeralSettingTimestamp */
        ephemeralSettingTimestamp?: (number|Long|null);

        /** ContextInfo ephemeralSharedSecret */
        ephemeralSharedSecret?: (Uint8Array|null);

        /** ContextInfo externalAdReply */
        externalAdReply?: (E2E.ContextInfo.IExternalAdReplyInfo|null);

        /** ContextInfo entryPointConversionSource */
        entryPointConversionSource?: (string|null);

        /** ContextInfo entryPointConversionApp */
        entryPointConversionApp?: (string|null);

        /** ContextInfo entryPointConversionDelaySeconds */
        entryPointConversionDelaySeconds?: (number|null);

        /** ContextInfo disappearingMode */
        disappearingMode?: (E2E.IDisappearingMode|null);

        /** ContextInfo actionLink */
        actionLink?: (E2E.IActionLink|null);

        /** ContextInfo groupSubject */
        groupSubject?: (string|null);

        /** ContextInfo parentGroupJid */
        parentGroupJid?: (string|null);

        /** ContextInfo trustBannerType */
        trustBannerType?: (string|null);

        /** ContextInfo trustBannerAction */
        trustBannerAction?: (number|null);

        /** ContextInfo isSampled */
        isSampled?: (boolean|null);

        /** ContextInfo groupMentions */
        groupMentions?: (E2E.IGroupMention[]|null);

        /** ContextInfo utm */
        utm?: (E2E.ContextInfo.IUTMInfo|null);

        /** ContextInfo forwardedNewsletterMessageInfo */
        forwardedNewsletterMessageInfo?: (E2E.ContextInfo.IForwardedNewsletterMessageInfo|null);

        /** ContextInfo businessMessageForwardInfo */
        businessMessageForwardInfo?: (E2E.ContextInfo.IBusinessMessageForwardInfo|null);

        /** ContextInfo smbClientCampaignId */
        smbClientCampaignId?: (string|null);

        /** ContextInfo smbServerCampaignId */
        smbServerCampaignId?: (string|null);

        /** ContextInfo dataSharingContext */
        dataSharingContext?: (E2E.ContextInfo.IDataSharingContext|null);

        /** ContextInfo alwaysShowAdAttribution */
        alwaysShowAdAttribution?: (boolean|null);

        /** ContextInfo featureEligibilities */
        featureEligibilities?: (E2E.ContextInfo.IFeatureEligibilities|null);

        /** ContextInfo entryPointConversionExternalSource */
        entryPointConversionExternalSource?: (string|null);

        /** ContextInfo entryPointConversionExternalMedium */
        entryPointConversionExternalMedium?: (string|null);

        /** ContextInfo ctwaSignals */
        ctwaSignals?: (string|null);

        /** ContextInfo ctwaPayload */
        ctwaPayload?: (Uint8Array|null);

        /** ContextInfo forwardedAiBotMessageInfo */
        forwardedAiBotMessageInfo?: (AICommon.IForwardedAIBotMessageInfo|null);

        /** ContextInfo statusAttributionType */
        statusAttributionType?: (E2E.ContextInfo.StatusAttributionType|null);

        /** ContextInfo urlTrackingMap */
        urlTrackingMap?: (E2E.IUrlTrackingMap|null);

        /** ContextInfo pairedMediaType */
        pairedMediaType?: (E2E.ContextInfo.PairedMediaType|null);

        /** ContextInfo rankingVersion */
        rankingVersion?: (number|null);

        /** ContextInfo memberLabel */
        memberLabel?: (E2E.IMemberLabel|null);

        /** ContextInfo isQuestion */
        isQuestion?: (boolean|null);

        /** ContextInfo statusSourceType */
        statusSourceType?: (E2E.ContextInfo.StatusSourceType|null);

        /** ContextInfo statusAttributions */
        statusAttributions?: (StatusAttributions.IStatusAttribution[]|null);

        /** ContextInfo isGroupStatus */
        isGroupStatus?: (boolean|null);

        /** ContextInfo forwardOrigin */
        forwardOrigin?: (E2E.ContextInfo.ForwardOrigin|null);

        /** ContextInfo questionReplyQuotedMessage */
        questionReplyQuotedMessage?: (E2E.ContextInfo.IQuestionReplyQuotedMessage|null);

        /** ContextInfo statusAudienceMetadata */
        statusAudienceMetadata?: (E2E.ContextInfo.IStatusAudienceMetadata|null);

        /** ContextInfo nonJidMentions */
        nonJidMentions?: (number|null);

        /** ContextInfo quotedType */
        quotedType?: (E2E.ContextInfo.QuotedType|null);
    }

    /** Represents a ContextInfo. */
    class ContextInfo implements IContextInfo {

        /**
         * Constructs a new ContextInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IContextInfo);

        /** ContextInfo stanzaId. */
        public stanzaId: string;

        /** ContextInfo participant. */
        public participant: string;

        /** ContextInfo quotedMessage. */
        public quotedMessage?: (E2E.IMessage|null);

        /** ContextInfo remoteJid. */
        public remoteJid: string;

        /** ContextInfo mentionedJid. */
        public mentionedJid: string[];

        /** ContextInfo conversionSource. */
        public conversionSource: string;

        /** ContextInfo conversionData. */
        public conversionData: Uint8Array;

        /** ContextInfo conversionDelaySeconds. */
        public conversionDelaySeconds: number;

        /** ContextInfo forwardingScore. */
        public forwardingScore: number;

        /** ContextInfo isForwarded. */
        public isForwarded: boolean;

        /** ContextInfo quotedAd. */
        public quotedAd?: (E2E.ContextInfo.IAdReplyInfo|null);

        /** ContextInfo placeholderKey. */
        public placeholderKey?: (Protocol.IMessageKey|null);

        /** ContextInfo expiration. */
        public expiration: number;

        /** ContextInfo ephemeralSettingTimestamp. */
        public ephemeralSettingTimestamp: (number|Long);

        /** ContextInfo ephemeralSharedSecret. */
        public ephemeralSharedSecret: Uint8Array;

        /** ContextInfo externalAdReply. */
        public externalAdReply?: (E2E.ContextInfo.IExternalAdReplyInfo|null);

        /** ContextInfo entryPointConversionSource. */
        public entryPointConversionSource: string;

        /** ContextInfo entryPointConversionApp. */
        public entryPointConversionApp: string;

        /** ContextInfo entryPointConversionDelaySeconds. */
        public entryPointConversionDelaySeconds: number;

        /** ContextInfo disappearingMode. */
        public disappearingMode?: (E2E.IDisappearingMode|null);

        /** ContextInfo actionLink. */
        public actionLink?: (E2E.IActionLink|null);

        /** ContextInfo groupSubject. */
        public groupSubject: string;

        /** ContextInfo parentGroupJid. */
        public parentGroupJid: string;

        /** ContextInfo trustBannerType. */
        public trustBannerType: string;

        /** ContextInfo trustBannerAction. */
        public trustBannerAction: number;

        /** ContextInfo isSampled. */
        public isSampled: boolean;

        /** ContextInfo groupMentions. */
        public groupMentions: E2E.IGroupMention[];

        /** ContextInfo utm. */
        public utm?: (E2E.ContextInfo.IUTMInfo|null);

        /** ContextInfo forwardedNewsletterMessageInfo. */
        public forwardedNewsletterMessageInfo?: (E2E.ContextInfo.IForwardedNewsletterMessageInfo|null);

        /** ContextInfo businessMessageForwardInfo. */
        public businessMessageForwardInfo?: (E2E.ContextInfo.IBusinessMessageForwardInfo|null);

        /** ContextInfo smbClientCampaignId. */
        public smbClientCampaignId: string;

        /** ContextInfo smbServerCampaignId. */
        public smbServerCampaignId: string;

        /** ContextInfo dataSharingContext. */
        public dataSharingContext?: (E2E.ContextInfo.IDataSharingContext|null);

        /** ContextInfo alwaysShowAdAttribution. */
        public alwaysShowAdAttribution: boolean;

        /** ContextInfo featureEligibilities. */
        public featureEligibilities?: (E2E.ContextInfo.IFeatureEligibilities|null);

        /** ContextInfo entryPointConversionExternalSource. */
        public entryPointConversionExternalSource: string;

        /** ContextInfo entryPointConversionExternalMedium. */
        public entryPointConversionExternalMedium: string;

        /** ContextInfo ctwaSignals. */
        public ctwaSignals: string;

        /** ContextInfo ctwaPayload. */
        public ctwaPayload: Uint8Array;

        /** ContextInfo forwardedAiBotMessageInfo. */
        public forwardedAiBotMessageInfo?: (AICommon.IForwardedAIBotMessageInfo|null);

        /** ContextInfo statusAttributionType. */
        public statusAttributionType: E2E.ContextInfo.StatusAttributionType;

        /** ContextInfo urlTrackingMap. */
        public urlTrackingMap?: (E2E.IUrlTrackingMap|null);

        /** ContextInfo pairedMediaType. */
        public pairedMediaType: E2E.ContextInfo.PairedMediaType;

        /** ContextInfo rankingVersion. */
        public rankingVersion: number;

        /** ContextInfo memberLabel. */
        public memberLabel?: (E2E.IMemberLabel|null);

        /** ContextInfo isQuestion. */
        public isQuestion: boolean;

        /** ContextInfo statusSourceType. */
        public statusSourceType: E2E.ContextInfo.StatusSourceType;

        /** ContextInfo statusAttributions. */
        public statusAttributions: StatusAttributions.IStatusAttribution[];

        /** ContextInfo isGroupStatus. */
        public isGroupStatus: boolean;

        /** ContextInfo forwardOrigin. */
        public forwardOrigin: E2E.ContextInfo.ForwardOrigin;

        /** ContextInfo questionReplyQuotedMessage. */
        public questionReplyQuotedMessage?: (E2E.ContextInfo.IQuestionReplyQuotedMessage|null);

        /** ContextInfo statusAudienceMetadata. */
        public statusAudienceMetadata?: (E2E.ContextInfo.IStatusAudienceMetadata|null);

        /** ContextInfo nonJidMentions. */
        public nonJidMentions: number;

        /** ContextInfo quotedType. */
        public quotedType: E2E.ContextInfo.QuotedType;

        /**
         * Creates a new ContextInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ContextInfo instance
         */
        public static create(properties?: E2E.IContextInfo): E2E.ContextInfo;

        /**
         * Encodes the specified ContextInfo message. Does not implicitly {@link E2E.ContextInfo.verify|verify} messages.
         * @param message ContextInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IContextInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ContextInfo message, length delimited. Does not implicitly {@link E2E.ContextInfo.verify|verify} messages.
         * @param message ContextInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IContextInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ContextInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ContextInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ContextInfo;

        /**
         * Decodes a ContextInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ContextInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ContextInfo;

        /**
         * Verifies a ContextInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ContextInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ContextInfo
         */
        public static fromObject(object: { [k: string]: any }): E2E.ContextInfo;

        /**
         * Creates a plain object from a ContextInfo message. Also converts values to other types if specified.
         * @param message ContextInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.ContextInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ContextInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ContextInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace ContextInfo {

        /** Properties of an AdReplyInfo. */
        interface IAdReplyInfo {

            /** AdReplyInfo advertiserName */
            advertiserName?: (string|null);

            /** AdReplyInfo mediaType */
            mediaType?: (E2E.ContextInfo.AdReplyInfo.MediaType|null);

            /** AdReplyInfo jpegThumbnail */
            jpegThumbnail?: (Uint8Array|null);

            /** AdReplyInfo caption */
            caption?: (string|null);
        }

        /** Represents an AdReplyInfo. */
        class AdReplyInfo implements IAdReplyInfo {

            /**
             * Constructs a new AdReplyInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.ContextInfo.IAdReplyInfo);

            /** AdReplyInfo advertiserName. */
            public advertiserName: string;

            /** AdReplyInfo mediaType. */
            public mediaType: E2E.ContextInfo.AdReplyInfo.MediaType;

            /** AdReplyInfo jpegThumbnail. */
            public jpegThumbnail: Uint8Array;

            /** AdReplyInfo caption. */
            public caption: string;

            /**
             * Creates a new AdReplyInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AdReplyInfo instance
             */
            public static create(properties?: E2E.ContextInfo.IAdReplyInfo): E2E.ContextInfo.AdReplyInfo;

            /**
             * Encodes the specified AdReplyInfo message. Does not implicitly {@link E2E.ContextInfo.AdReplyInfo.verify|verify} messages.
             * @param message AdReplyInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.ContextInfo.IAdReplyInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AdReplyInfo message, length delimited. Does not implicitly {@link E2E.ContextInfo.AdReplyInfo.verify|verify} messages.
             * @param message AdReplyInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.ContextInfo.IAdReplyInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AdReplyInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AdReplyInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ContextInfo.AdReplyInfo;

            /**
             * Decodes an AdReplyInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AdReplyInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ContextInfo.AdReplyInfo;

            /**
             * Verifies an AdReplyInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AdReplyInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AdReplyInfo
             */
            public static fromObject(object: { [k: string]: any }): E2E.ContextInfo.AdReplyInfo;

            /**
             * Creates a plain object from an AdReplyInfo message. Also converts values to other types if specified.
             * @param message AdReplyInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.ContextInfo.AdReplyInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AdReplyInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AdReplyInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace AdReplyInfo {

            /** MediaType enum. */
            enum MediaType {
                NONE = 0,
                IMAGE = 1,
                VIDEO = 2
            }
        }

        /** Properties of a BusinessMessageForwardInfo. */
        interface IBusinessMessageForwardInfo {

            /** BusinessMessageForwardInfo businessOwnerJid */
            businessOwnerJid?: (string|null);
        }

        /** Represents a BusinessMessageForwardInfo. */
        class BusinessMessageForwardInfo implements IBusinessMessageForwardInfo {

            /**
             * Constructs a new BusinessMessageForwardInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.ContextInfo.IBusinessMessageForwardInfo);

            /** BusinessMessageForwardInfo businessOwnerJid. */
            public businessOwnerJid: string;

            /**
             * Creates a new BusinessMessageForwardInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns BusinessMessageForwardInfo instance
             */
            public static create(properties?: E2E.ContextInfo.IBusinessMessageForwardInfo): E2E.ContextInfo.BusinessMessageForwardInfo;

            /**
             * Encodes the specified BusinessMessageForwardInfo message. Does not implicitly {@link E2E.ContextInfo.BusinessMessageForwardInfo.verify|verify} messages.
             * @param message BusinessMessageForwardInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.ContextInfo.IBusinessMessageForwardInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified BusinessMessageForwardInfo message, length delimited. Does not implicitly {@link E2E.ContextInfo.BusinessMessageForwardInfo.verify|verify} messages.
             * @param message BusinessMessageForwardInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.ContextInfo.IBusinessMessageForwardInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a BusinessMessageForwardInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns BusinessMessageForwardInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ContextInfo.BusinessMessageForwardInfo;

            /**
             * Decodes a BusinessMessageForwardInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns BusinessMessageForwardInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ContextInfo.BusinessMessageForwardInfo;

            /**
             * Verifies a BusinessMessageForwardInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a BusinessMessageForwardInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns BusinessMessageForwardInfo
             */
            public static fromObject(object: { [k: string]: any }): E2E.ContextInfo.BusinessMessageForwardInfo;

            /**
             * Creates a plain object from a BusinessMessageForwardInfo message. Also converts values to other types if specified.
             * @param message BusinessMessageForwardInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.ContextInfo.BusinessMessageForwardInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this BusinessMessageForwardInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for BusinessMessageForwardInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a DataSharingContext. */
        interface IDataSharingContext {

            /** DataSharingContext showMmDisclosure */
            showMmDisclosure?: (boolean|null);

            /** DataSharingContext encryptedSignalTokenConsented */
            encryptedSignalTokenConsented?: (string|null);

            /** DataSharingContext parameters */
            parameters?: (E2E.ContextInfo.DataSharingContext.IParameters[]|null);

            /** DataSharingContext dataSharingFlags */
            dataSharingFlags?: (number|null);
        }

        /** Represents a DataSharingContext. */
        class DataSharingContext implements IDataSharingContext {

            /**
             * Constructs a new DataSharingContext.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.ContextInfo.IDataSharingContext);

            /** DataSharingContext showMmDisclosure. */
            public showMmDisclosure: boolean;

            /** DataSharingContext encryptedSignalTokenConsented. */
            public encryptedSignalTokenConsented: string;

            /** DataSharingContext parameters. */
            public parameters: E2E.ContextInfo.DataSharingContext.IParameters[];

            /** DataSharingContext dataSharingFlags. */
            public dataSharingFlags: number;

            /**
             * Creates a new DataSharingContext instance using the specified properties.
             * @param [properties] Properties to set
             * @returns DataSharingContext instance
             */
            public static create(properties?: E2E.ContextInfo.IDataSharingContext): E2E.ContextInfo.DataSharingContext;

            /**
             * Encodes the specified DataSharingContext message. Does not implicitly {@link E2E.ContextInfo.DataSharingContext.verify|verify} messages.
             * @param message DataSharingContext message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.ContextInfo.IDataSharingContext, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified DataSharingContext message, length delimited. Does not implicitly {@link E2E.ContextInfo.DataSharingContext.verify|verify} messages.
             * @param message DataSharingContext message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.ContextInfo.IDataSharingContext, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a DataSharingContext message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns DataSharingContext
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ContextInfo.DataSharingContext;

            /**
             * Decodes a DataSharingContext message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns DataSharingContext
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ContextInfo.DataSharingContext;

            /**
             * Verifies a DataSharingContext message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a DataSharingContext message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns DataSharingContext
             */
            public static fromObject(object: { [k: string]: any }): E2E.ContextInfo.DataSharingContext;

            /**
             * Creates a plain object from a DataSharingContext message. Also converts values to other types if specified.
             * @param message DataSharingContext
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.ContextInfo.DataSharingContext, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this DataSharingContext to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for DataSharingContext
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace DataSharingContext {

            /** DataSharingFlags enum. */
            enum DataSharingFlags {
                SHOW_MM_DISCLOSURE_ON_CLICK = 1,
                SHOW_MM_DISCLOSURE_ON_READ = 2
            }

            /** Properties of a Parameters. */
            interface IParameters {

                /** Parameters key */
                key?: (string|null);

                /** Parameters stringData */
                stringData?: (string|null);

                /** Parameters intData */
                intData?: (number|Long|null);

                /** Parameters floatData */
                floatData?: (number|null);

                /** Parameters contents */
                contents?: (E2E.ContextInfo.DataSharingContext.IParameters|null);
            }

            /** Represents a Parameters. */
            class Parameters implements IParameters {

                /**
                 * Constructs a new Parameters.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.ContextInfo.DataSharingContext.IParameters);

                /** Parameters key. */
                public key: string;

                /** Parameters stringData. */
                public stringData: string;

                /** Parameters intData. */
                public intData: (number|Long);

                /** Parameters floatData. */
                public floatData: number;

                /** Parameters contents. */
                public contents?: (E2E.ContextInfo.DataSharingContext.IParameters|null);

                /**
                 * Creates a new Parameters instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Parameters instance
                 */
                public static create(properties?: E2E.ContextInfo.DataSharingContext.IParameters): E2E.ContextInfo.DataSharingContext.Parameters;

                /**
                 * Encodes the specified Parameters message. Does not implicitly {@link E2E.ContextInfo.DataSharingContext.Parameters.verify|verify} messages.
                 * @param message Parameters message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.ContextInfo.DataSharingContext.IParameters, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Parameters message, length delimited. Does not implicitly {@link E2E.ContextInfo.DataSharingContext.Parameters.verify|verify} messages.
                 * @param message Parameters message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.ContextInfo.DataSharingContext.IParameters, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Parameters message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Parameters
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ContextInfo.DataSharingContext.Parameters;

                /**
                 * Decodes a Parameters message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Parameters
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ContextInfo.DataSharingContext.Parameters;

                /**
                 * Verifies a Parameters message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Parameters message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Parameters
                 */
                public static fromObject(object: { [k: string]: any }): E2E.ContextInfo.DataSharingContext.Parameters;

                /**
                 * Creates a plain object from a Parameters message. Also converts values to other types if specified.
                 * @param message Parameters
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.ContextInfo.DataSharingContext.Parameters, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Parameters to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Parameters
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of an ExternalAdReplyInfo. */
        interface IExternalAdReplyInfo {

            /** ExternalAdReplyInfo title */
            title?: (string|null);

            /** ExternalAdReplyInfo body */
            body?: (string|null);

            /** ExternalAdReplyInfo mediaType */
            mediaType?: (E2E.ContextInfo.ExternalAdReplyInfo.MediaType|null);

            /** ExternalAdReplyInfo thumbnailUrl */
            thumbnailUrl?: (string|null);

            /** ExternalAdReplyInfo mediaUrl */
            mediaUrl?: (string|null);

            /** ExternalAdReplyInfo thumbnail */
            thumbnail?: (Uint8Array|null);

            /** ExternalAdReplyInfo sourceType */
            sourceType?: (string|null);

            /** ExternalAdReplyInfo sourceId */
            sourceId?: (string|null);

            /** ExternalAdReplyInfo sourceUrl */
            sourceUrl?: (string|null);

            /** ExternalAdReplyInfo containsAutoReply */
            containsAutoReply?: (boolean|null);

            /** ExternalAdReplyInfo renderLargerThumbnail */
            renderLargerThumbnail?: (boolean|null);

            /** ExternalAdReplyInfo showAdAttribution */
            showAdAttribution?: (boolean|null);

            /** ExternalAdReplyInfo ctwaClid */
            ctwaClid?: (string|null);

            /** ExternalAdReplyInfo ref */
            ref?: (string|null);

            /** ExternalAdReplyInfo clickToWhatsappCall */
            clickToWhatsappCall?: (boolean|null);

            /** ExternalAdReplyInfo adContextPreviewDismissed */
            adContextPreviewDismissed?: (boolean|null);

            /** ExternalAdReplyInfo sourceApp */
            sourceApp?: (string|null);

            /** ExternalAdReplyInfo automatedGreetingMessageShown */
            automatedGreetingMessageShown?: (boolean|null);

            /** ExternalAdReplyInfo greetingMessageBody */
            greetingMessageBody?: (string|null);

            /** ExternalAdReplyInfo ctaPayload */
            ctaPayload?: (string|null);

            /** ExternalAdReplyInfo disableNudge */
            disableNudge?: (boolean|null);

            /** ExternalAdReplyInfo originalImageUrl */
            originalImageUrl?: (string|null);

            /** ExternalAdReplyInfo automatedGreetingMessageCtaType */
            automatedGreetingMessageCtaType?: (string|null);

            /** ExternalAdReplyInfo wtwaAdFormat */
            wtwaAdFormat?: (boolean|null);

            /** ExternalAdReplyInfo adType */
            adType?: (E2E.ContextInfo.ExternalAdReplyInfo.AdType|null);

            /** ExternalAdReplyInfo wtwaWebsiteUrl */
            wtwaWebsiteUrl?: (string|null);

            /** ExternalAdReplyInfo adPreviewUrl */
            adPreviewUrl?: (string|null);
        }

        /** Represents an ExternalAdReplyInfo. */
        class ExternalAdReplyInfo implements IExternalAdReplyInfo {

            /**
             * Constructs a new ExternalAdReplyInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.ContextInfo.IExternalAdReplyInfo);

            /** ExternalAdReplyInfo title. */
            public title: string;

            /** ExternalAdReplyInfo body. */
            public body: string;

            /** ExternalAdReplyInfo mediaType. */
            public mediaType: E2E.ContextInfo.ExternalAdReplyInfo.MediaType;

            /** ExternalAdReplyInfo thumbnailUrl. */
            public thumbnailUrl: string;

            /** ExternalAdReplyInfo mediaUrl. */
            public mediaUrl: string;

            /** ExternalAdReplyInfo thumbnail. */
            public thumbnail: Uint8Array;

            /** ExternalAdReplyInfo sourceType. */
            public sourceType: string;

            /** ExternalAdReplyInfo sourceId. */
            public sourceId: string;

            /** ExternalAdReplyInfo sourceUrl. */
            public sourceUrl: string;

            /** ExternalAdReplyInfo containsAutoReply. */
            public containsAutoReply: boolean;

            /** ExternalAdReplyInfo renderLargerThumbnail. */
            public renderLargerThumbnail: boolean;

            /** ExternalAdReplyInfo showAdAttribution. */
            public showAdAttribution: boolean;

            /** ExternalAdReplyInfo ctwaClid. */
            public ctwaClid: string;

            /** ExternalAdReplyInfo ref. */
            public ref: string;

            /** ExternalAdReplyInfo clickToWhatsappCall. */
            public clickToWhatsappCall: boolean;

            /** ExternalAdReplyInfo adContextPreviewDismissed. */
            public adContextPreviewDismissed: boolean;

            /** ExternalAdReplyInfo sourceApp. */
            public sourceApp: string;

            /** ExternalAdReplyInfo automatedGreetingMessageShown. */
            public automatedGreetingMessageShown: boolean;

            /** ExternalAdReplyInfo greetingMessageBody. */
            public greetingMessageBody: string;

            /** ExternalAdReplyInfo ctaPayload. */
            public ctaPayload: string;

            /** ExternalAdReplyInfo disableNudge. */
            public disableNudge: boolean;

            /** ExternalAdReplyInfo originalImageUrl. */
            public originalImageUrl: string;

            /** ExternalAdReplyInfo automatedGreetingMessageCtaType. */
            public automatedGreetingMessageCtaType: string;

            /** ExternalAdReplyInfo wtwaAdFormat. */
            public wtwaAdFormat: boolean;

            /** ExternalAdReplyInfo adType. */
            public adType: E2E.ContextInfo.ExternalAdReplyInfo.AdType;

            /** ExternalAdReplyInfo wtwaWebsiteUrl. */
            public wtwaWebsiteUrl: string;

            /** ExternalAdReplyInfo adPreviewUrl. */
            public adPreviewUrl: string;

            /**
             * Creates a new ExternalAdReplyInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ExternalAdReplyInfo instance
             */
            public static create(properties?: E2E.ContextInfo.IExternalAdReplyInfo): E2E.ContextInfo.ExternalAdReplyInfo;

            /**
             * Encodes the specified ExternalAdReplyInfo message. Does not implicitly {@link E2E.ContextInfo.ExternalAdReplyInfo.verify|verify} messages.
             * @param message ExternalAdReplyInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.ContextInfo.IExternalAdReplyInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ExternalAdReplyInfo message, length delimited. Does not implicitly {@link E2E.ContextInfo.ExternalAdReplyInfo.verify|verify} messages.
             * @param message ExternalAdReplyInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.ContextInfo.IExternalAdReplyInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an ExternalAdReplyInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ExternalAdReplyInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ContextInfo.ExternalAdReplyInfo;

            /**
             * Decodes an ExternalAdReplyInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ExternalAdReplyInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ContextInfo.ExternalAdReplyInfo;

            /**
             * Verifies an ExternalAdReplyInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an ExternalAdReplyInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ExternalAdReplyInfo
             */
            public static fromObject(object: { [k: string]: any }): E2E.ContextInfo.ExternalAdReplyInfo;

            /**
             * Creates a plain object from an ExternalAdReplyInfo message. Also converts values to other types if specified.
             * @param message ExternalAdReplyInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.ContextInfo.ExternalAdReplyInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ExternalAdReplyInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ExternalAdReplyInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ExternalAdReplyInfo {

            /** AdType enum. */
            enum AdType {
                CTWA = 0,
                CAWC = 1
            }

            /** MediaType enum. */
            enum MediaType {
                NONE = 0,
                IMAGE = 1,
                VIDEO = 2
            }
        }

        /** Properties of a FeatureEligibilities. */
        interface IFeatureEligibilities {

            /** FeatureEligibilities cannotBeReactedTo */
            cannotBeReactedTo?: (boolean|null);

            /** FeatureEligibilities cannotBeRanked */
            cannotBeRanked?: (boolean|null);

            /** FeatureEligibilities canRequestFeedback */
            canRequestFeedback?: (boolean|null);

            /** FeatureEligibilities canBeReshared */
            canBeReshared?: (boolean|null);

            /** FeatureEligibilities canReceiveMultiReact */
            canReceiveMultiReact?: (boolean|null);
        }

        /** Represents a FeatureEligibilities. */
        class FeatureEligibilities implements IFeatureEligibilities {

            /**
             * Constructs a new FeatureEligibilities.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.ContextInfo.IFeatureEligibilities);

            /** FeatureEligibilities cannotBeReactedTo. */
            public cannotBeReactedTo: boolean;

            /** FeatureEligibilities cannotBeRanked. */
            public cannotBeRanked: boolean;

            /** FeatureEligibilities canRequestFeedback. */
            public canRequestFeedback: boolean;

            /** FeatureEligibilities canBeReshared. */
            public canBeReshared: boolean;

            /** FeatureEligibilities canReceiveMultiReact. */
            public canReceiveMultiReact: boolean;

            /**
             * Creates a new FeatureEligibilities instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FeatureEligibilities instance
             */
            public static create(properties?: E2E.ContextInfo.IFeatureEligibilities): E2E.ContextInfo.FeatureEligibilities;

            /**
             * Encodes the specified FeatureEligibilities message. Does not implicitly {@link E2E.ContextInfo.FeatureEligibilities.verify|verify} messages.
             * @param message FeatureEligibilities message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.ContextInfo.IFeatureEligibilities, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FeatureEligibilities message, length delimited. Does not implicitly {@link E2E.ContextInfo.FeatureEligibilities.verify|verify} messages.
             * @param message FeatureEligibilities message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.ContextInfo.IFeatureEligibilities, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FeatureEligibilities message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FeatureEligibilities
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ContextInfo.FeatureEligibilities;

            /**
             * Decodes a FeatureEligibilities message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FeatureEligibilities
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ContextInfo.FeatureEligibilities;

            /**
             * Verifies a FeatureEligibilities message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FeatureEligibilities message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FeatureEligibilities
             */
            public static fromObject(object: { [k: string]: any }): E2E.ContextInfo.FeatureEligibilities;

            /**
             * Creates a plain object from a FeatureEligibilities message. Also converts values to other types if specified.
             * @param message FeatureEligibilities
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.ContextInfo.FeatureEligibilities, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FeatureEligibilities to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FeatureEligibilities
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** ForwardOrigin enum. */
        enum ForwardOrigin {
            UNKNOWN = 0,
            CHAT = 1,
            STATUS = 2,
            CHANNELS = 3,
            META_AI = 4,
            UGC = 5
        }

        /** Properties of a ForwardedNewsletterMessageInfo. */
        interface IForwardedNewsletterMessageInfo {

            /** ForwardedNewsletterMessageInfo newsletterJid */
            newsletterJid?: (string|null);

            /** ForwardedNewsletterMessageInfo serverMessageId */
            serverMessageId?: (number|null);

            /** ForwardedNewsletterMessageInfo newsletterName */
            newsletterName?: (string|null);

            /** ForwardedNewsletterMessageInfo contentType */
            contentType?: (E2E.ContextInfo.ForwardedNewsletterMessageInfo.ContentType|null);

            /** ForwardedNewsletterMessageInfo accessibilityText */
            accessibilityText?: (string|null);
        }

        /** Represents a ForwardedNewsletterMessageInfo. */
        class ForwardedNewsletterMessageInfo implements IForwardedNewsletterMessageInfo {

            /**
             * Constructs a new ForwardedNewsletterMessageInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.ContextInfo.IForwardedNewsletterMessageInfo);

            /** ForwardedNewsletterMessageInfo newsletterJid. */
            public newsletterJid: string;

            /** ForwardedNewsletterMessageInfo serverMessageId. */
            public serverMessageId: number;

            /** ForwardedNewsletterMessageInfo newsletterName. */
            public newsletterName: string;

            /** ForwardedNewsletterMessageInfo contentType. */
            public contentType: E2E.ContextInfo.ForwardedNewsletterMessageInfo.ContentType;

            /** ForwardedNewsletterMessageInfo accessibilityText. */
            public accessibilityText: string;

            /**
             * Creates a new ForwardedNewsletterMessageInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ForwardedNewsletterMessageInfo instance
             */
            public static create(properties?: E2E.ContextInfo.IForwardedNewsletterMessageInfo): E2E.ContextInfo.ForwardedNewsletterMessageInfo;

            /**
             * Encodes the specified ForwardedNewsletterMessageInfo message. Does not implicitly {@link E2E.ContextInfo.ForwardedNewsletterMessageInfo.verify|verify} messages.
             * @param message ForwardedNewsletterMessageInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.ContextInfo.IForwardedNewsletterMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ForwardedNewsletterMessageInfo message, length delimited. Does not implicitly {@link E2E.ContextInfo.ForwardedNewsletterMessageInfo.verify|verify} messages.
             * @param message ForwardedNewsletterMessageInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.ContextInfo.IForwardedNewsletterMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ForwardedNewsletterMessageInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ForwardedNewsletterMessageInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ContextInfo.ForwardedNewsletterMessageInfo;

            /**
             * Decodes a ForwardedNewsletterMessageInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ForwardedNewsletterMessageInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ContextInfo.ForwardedNewsletterMessageInfo;

            /**
             * Verifies a ForwardedNewsletterMessageInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ForwardedNewsletterMessageInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ForwardedNewsletterMessageInfo
             */
            public static fromObject(object: { [k: string]: any }): E2E.ContextInfo.ForwardedNewsletterMessageInfo;

            /**
             * Creates a plain object from a ForwardedNewsletterMessageInfo message. Also converts values to other types if specified.
             * @param message ForwardedNewsletterMessageInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.ContextInfo.ForwardedNewsletterMessageInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ForwardedNewsletterMessageInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ForwardedNewsletterMessageInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ForwardedNewsletterMessageInfo {

            /** ContentType enum. */
            enum ContentType {
                UPDATE = 1,
                UPDATE_CARD = 2,
                LINK_CARD = 3
            }
        }

        /** PairedMediaType enum. */
        enum PairedMediaType {
            NOT_PAIRED_MEDIA = 0,
            SD_VIDEO_PARENT = 1,
            HD_VIDEO_CHILD = 2,
            SD_IMAGE_PARENT = 3,
            HD_IMAGE_CHILD = 4,
            MOTION_PHOTO_PARENT = 5,
            MOTION_PHOTO_CHILD = 6
        }

        /** Properties of a QuestionReplyQuotedMessage. */
        interface IQuestionReplyQuotedMessage {

            /** QuestionReplyQuotedMessage serverQuestionId */
            serverQuestionId?: (number|null);

            /** QuestionReplyQuotedMessage quotedQuestion */
            quotedQuestion?: (E2E.IMessage|null);

            /** QuestionReplyQuotedMessage quotedResponse */
            quotedResponse?: (E2E.IMessage|null);
        }

        /** Represents a QuestionReplyQuotedMessage. */
        class QuestionReplyQuotedMessage implements IQuestionReplyQuotedMessage {

            /**
             * Constructs a new QuestionReplyQuotedMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.ContextInfo.IQuestionReplyQuotedMessage);

            /** QuestionReplyQuotedMessage serverQuestionId. */
            public serverQuestionId: number;

            /** QuestionReplyQuotedMessage quotedQuestion. */
            public quotedQuestion?: (E2E.IMessage|null);

            /** QuestionReplyQuotedMessage quotedResponse. */
            public quotedResponse?: (E2E.IMessage|null);

            /**
             * Creates a new QuestionReplyQuotedMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns QuestionReplyQuotedMessage instance
             */
            public static create(properties?: E2E.ContextInfo.IQuestionReplyQuotedMessage): E2E.ContextInfo.QuestionReplyQuotedMessage;

            /**
             * Encodes the specified QuestionReplyQuotedMessage message. Does not implicitly {@link E2E.ContextInfo.QuestionReplyQuotedMessage.verify|verify} messages.
             * @param message QuestionReplyQuotedMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.ContextInfo.IQuestionReplyQuotedMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified QuestionReplyQuotedMessage message, length delimited. Does not implicitly {@link E2E.ContextInfo.QuestionReplyQuotedMessage.verify|verify} messages.
             * @param message QuestionReplyQuotedMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.ContextInfo.IQuestionReplyQuotedMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a QuestionReplyQuotedMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns QuestionReplyQuotedMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ContextInfo.QuestionReplyQuotedMessage;

            /**
             * Decodes a QuestionReplyQuotedMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns QuestionReplyQuotedMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ContextInfo.QuestionReplyQuotedMessage;

            /**
             * Verifies a QuestionReplyQuotedMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a QuestionReplyQuotedMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns QuestionReplyQuotedMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.ContextInfo.QuestionReplyQuotedMessage;

            /**
             * Creates a plain object from a QuestionReplyQuotedMessage message. Also converts values to other types if specified.
             * @param message QuestionReplyQuotedMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.ContextInfo.QuestionReplyQuotedMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this QuestionReplyQuotedMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for QuestionReplyQuotedMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** QuotedType enum. */
        enum QuotedType {
            EXPLICIT = 0,
            AUTO = 1
        }

        /** StatusAttributionType enum. */
        enum StatusAttributionType {
            NONE = 0,
            RESHARED_FROM_MENTION = 1,
            RESHARED_FROM_POST = 2,
            RESHARED_FROM_POST_MANY_TIMES = 3,
            FORWARDED_FROM_STATUS = 4
        }

        /** Properties of a StatusAudienceMetadata. */
        interface IStatusAudienceMetadata {

            /** StatusAudienceMetadata audienceType */
            audienceType?: (E2E.ContextInfo.StatusAudienceMetadata.AudienceType|null);
        }

        /** Represents a StatusAudienceMetadata. */
        class StatusAudienceMetadata implements IStatusAudienceMetadata {

            /**
             * Constructs a new StatusAudienceMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.ContextInfo.IStatusAudienceMetadata);

            /** StatusAudienceMetadata audienceType. */
            public audienceType: E2E.ContextInfo.StatusAudienceMetadata.AudienceType;

            /**
             * Creates a new StatusAudienceMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StatusAudienceMetadata instance
             */
            public static create(properties?: E2E.ContextInfo.IStatusAudienceMetadata): E2E.ContextInfo.StatusAudienceMetadata;

            /**
             * Encodes the specified StatusAudienceMetadata message. Does not implicitly {@link E2E.ContextInfo.StatusAudienceMetadata.verify|verify} messages.
             * @param message StatusAudienceMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.ContextInfo.IStatusAudienceMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StatusAudienceMetadata message, length delimited. Does not implicitly {@link E2E.ContextInfo.StatusAudienceMetadata.verify|verify} messages.
             * @param message StatusAudienceMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.ContextInfo.IStatusAudienceMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StatusAudienceMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StatusAudienceMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ContextInfo.StatusAudienceMetadata;

            /**
             * Decodes a StatusAudienceMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StatusAudienceMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ContextInfo.StatusAudienceMetadata;

            /**
             * Verifies a StatusAudienceMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StatusAudienceMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StatusAudienceMetadata
             */
            public static fromObject(object: { [k: string]: any }): E2E.ContextInfo.StatusAudienceMetadata;

            /**
             * Creates a plain object from a StatusAudienceMetadata message. Also converts values to other types if specified.
             * @param message StatusAudienceMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.ContextInfo.StatusAudienceMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StatusAudienceMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StatusAudienceMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace StatusAudienceMetadata {

            /** AudienceType enum. */
            enum AudienceType {
                UNKNOWN = 0,
                CLOSE_FRIENDS = 1
            }
        }

        /** StatusSourceType enum. */
        enum StatusSourceType {
            IMAGE = 0,
            VIDEO = 1,
            GIF = 2,
            AUDIO = 3,
            TEXT = 4,
            MUSIC_STANDALONE = 5
        }

        /** Properties of a UTMInfo. */
        interface IUTMInfo {

            /** UTMInfo utmSource */
            utmSource?: (string|null);

            /** UTMInfo utmCampaign */
            utmCampaign?: (string|null);
        }

        /** Represents a UTMInfo. */
        class UTMInfo implements IUTMInfo {

            /**
             * Constructs a new UTMInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.ContextInfo.IUTMInfo);

            /** UTMInfo utmSource. */
            public utmSource: string;

            /** UTMInfo utmCampaign. */
            public utmCampaign: string;

            /**
             * Creates a new UTMInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns UTMInfo instance
             */
            public static create(properties?: E2E.ContextInfo.IUTMInfo): E2E.ContextInfo.UTMInfo;

            /**
             * Encodes the specified UTMInfo message. Does not implicitly {@link E2E.ContextInfo.UTMInfo.verify|verify} messages.
             * @param message UTMInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.ContextInfo.IUTMInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified UTMInfo message, length delimited. Does not implicitly {@link E2E.ContextInfo.UTMInfo.verify|verify} messages.
             * @param message UTMInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.ContextInfo.IUTMInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a UTMInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns UTMInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.ContextInfo.UTMInfo;

            /**
             * Decodes a UTMInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns UTMInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.ContextInfo.UTMInfo;

            /**
             * Verifies a UTMInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a UTMInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns UTMInfo
             */
            public static fromObject(object: { [k: string]: any }): E2E.ContextInfo.UTMInfo;

            /**
             * Creates a plain object from a UTMInfo message. Also converts values to other types if specified.
             * @param message UTMInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.ContextInfo.UTMInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this UTMInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for UTMInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Properties of a Message. */
    interface IMessage {

        /** Message conversation */
        conversation?: (string|null);

        /** Message senderKeyDistributionMessage */
        senderKeyDistributionMessage?: (E2E.Message.ISenderKeyDistributionMessage|null);

        /** Message imageMessage */
        imageMessage?: (E2E.Message.IImageMessage|null);

        /** Message contactMessage */
        contactMessage?: (E2E.Message.IContactMessage|null);

        /** Message locationMessage */
        locationMessage?: (E2E.Message.ILocationMessage|null);

        /** Message extendedTextMessage */
        extendedTextMessage?: (E2E.Message.IExtendedTextMessage|null);

        /** Message documentMessage */
        documentMessage?: (E2E.Message.IDocumentMessage|null);

        /** Message audioMessage */
        audioMessage?: (E2E.Message.IAudioMessage|null);

        /** Message videoMessage */
        videoMessage?: (E2E.Message.IVideoMessage|null);

        /** Message call */
        call?: (E2E.Message.ICall|null);

        /** Message chat */
        chat?: (E2E.Message.IChat|null);

        /** Message protocolMessage */
        protocolMessage?: (E2E.Message.IProtocolMessage|null);

        /** Message contactsArrayMessage */
        contactsArrayMessage?: (E2E.Message.IContactsArrayMessage|null);

        /** Message highlyStructuredMessage */
        highlyStructuredMessage?: (E2E.Message.IHighlyStructuredMessage|null);

        /** Message fastRatchetKeySenderKeyDistributionMessage */
        fastRatchetKeySenderKeyDistributionMessage?: (E2E.Message.ISenderKeyDistributionMessage|null);

        /** Message sendPaymentMessage */
        sendPaymentMessage?: (E2E.Message.ISendPaymentMessage|null);

        /** Message liveLocationMessage */
        liveLocationMessage?: (E2E.Message.ILiveLocationMessage|null);

        /** Message requestPaymentMessage */
        requestPaymentMessage?: (E2E.Message.IRequestPaymentMessage|null);

        /** Message declinePaymentRequestMessage */
        declinePaymentRequestMessage?: (E2E.Message.IDeclinePaymentRequestMessage|null);

        /** Message cancelPaymentRequestMessage */
        cancelPaymentRequestMessage?: (E2E.Message.ICancelPaymentRequestMessage|null);

        /** Message templateMessage */
        templateMessage?: (E2E.Message.ITemplateMessage|null);

        /** Message stickerMessage */
        stickerMessage?: (E2E.Message.IStickerMessage|null);

        /** Message groupInviteMessage */
        groupInviteMessage?: (E2E.Message.IGroupInviteMessage|null);

        /** Message templateButtonReplyMessage */
        templateButtonReplyMessage?: (E2E.Message.ITemplateButtonReplyMessage|null);

        /** Message productMessage */
        productMessage?: (E2E.Message.IProductMessage|null);

        /** Message deviceSentMessage */
        deviceSentMessage?: (E2E.Message.IDeviceSentMessage|null);

        /** Message messageContextInfo */
        messageContextInfo?: (E2E.IMessageContextInfo|null);

        /** Message listMessage */
        listMessage?: (E2E.Message.IListMessage|null);

        /** Message viewOnceMessage */
        viewOnceMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message orderMessage */
        orderMessage?: (E2E.Message.IOrderMessage|null);

        /** Message listResponseMessage */
        listResponseMessage?: (E2E.Message.IListResponseMessage|null);

        /** Message ephemeralMessage */
        ephemeralMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message invoiceMessage */
        invoiceMessage?: (E2E.Message.IInvoiceMessage|null);

        /** Message buttonsMessage */
        buttonsMessage?: (E2E.Message.IButtonsMessage|null);

        /** Message buttonsResponseMessage */
        buttonsResponseMessage?: (E2E.Message.IButtonsResponseMessage|null);

        /** Message paymentInviteMessage */
        paymentInviteMessage?: (E2E.Message.IPaymentInviteMessage|null);

        /** Message interactiveMessage */
        interactiveMessage?: (E2E.Message.IInteractiveMessage|null);

        /** Message reactionMessage */
        reactionMessage?: (E2E.Message.IReactionMessage|null);

        /** Message stickerSyncRmrMessage */
        stickerSyncRmrMessage?: (E2E.Message.IStickerSyncRMRMessage|null);

        /** Message interactiveResponseMessage */
        interactiveResponseMessage?: (E2E.Message.IInteractiveResponseMessage|null);

        /** Message pollCreationMessage */
        pollCreationMessage?: (E2E.Message.IPollCreationMessage|null);

        /** Message pollUpdateMessage */
        pollUpdateMessage?: (E2E.Message.IPollUpdateMessage|null);

        /** Message keepInChatMessage */
        keepInChatMessage?: (E2E.Message.IKeepInChatMessage|null);

        /** Message documentWithCaptionMessage */
        documentWithCaptionMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message requestPhoneNumberMessage */
        requestPhoneNumberMessage?: (E2E.Message.IRequestPhoneNumberMessage|null);

        /** Message viewOnceMessageV2 */
        viewOnceMessageV2?: (E2E.Message.IFutureProofMessage|null);

        /** Message encReactionMessage */
        encReactionMessage?: (E2E.Message.IEncReactionMessage|null);

        /** Message editedMessage */
        editedMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message viewOnceMessageV2Extension */
        viewOnceMessageV2Extension?: (E2E.Message.IFutureProofMessage|null);

        /** Message pollCreationMessageV2 */
        pollCreationMessageV2?: (E2E.Message.IPollCreationMessage|null);

        /** Message scheduledCallCreationMessage */
        scheduledCallCreationMessage?: (E2E.Message.IScheduledCallCreationMessage|null);

        /** Message groupMentionedMessage */
        groupMentionedMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message pinInChatMessage */
        pinInChatMessage?: (E2E.Message.IPinInChatMessage|null);

        /** Message pollCreationMessageV3 */
        pollCreationMessageV3?: (E2E.Message.IPollCreationMessage|null);

        /** Message scheduledCallEditMessage */
        scheduledCallEditMessage?: (E2E.Message.IScheduledCallEditMessage|null);

        /** Message ptvMessage */
        ptvMessage?: (E2E.Message.IVideoMessage|null);

        /** Message botInvokeMessage */
        botInvokeMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message callLogMesssage */
        callLogMesssage?: (E2E.Message.ICallLogMessage|null);

        /** Message messageHistoryBundle */
        messageHistoryBundle?: (E2E.Message.IMessageHistoryBundle|null);

        /** Message encCommentMessage */
        encCommentMessage?: (E2E.Message.IEncCommentMessage|null);

        /** Message bcallMessage */
        bcallMessage?: (E2E.Message.IBCallMessage|null);

        /** Message lottieStickerMessage */
        lottieStickerMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message eventMessage */
        eventMessage?: (E2E.Message.IEventMessage|null);

        /** Message encEventResponseMessage */
        encEventResponseMessage?: (E2E.Message.IEncEventResponseMessage|null);

        /** Message commentMessage */
        commentMessage?: (E2E.Message.ICommentMessage|null);

        /** Message newsletterAdminInviteMessage */
        newsletterAdminInviteMessage?: (E2E.Message.INewsletterAdminInviteMessage|null);

        /** Message placeholderMessage */
        placeholderMessage?: (E2E.Message.IPlaceholderMessage|null);

        /** Message secretEncryptedMessage */
        secretEncryptedMessage?: (E2E.Message.ISecretEncryptedMessage|null);

        /** Message albumMessage */
        albumMessage?: (E2E.Message.IAlbumMessage|null);

        /** Message eventCoverImage */
        eventCoverImage?: (E2E.Message.IFutureProofMessage|null);

        /** Message stickerPackMessage */
        stickerPackMessage?: (E2E.Message.IStickerPackMessage|null);

        /** Message statusMentionMessage */
        statusMentionMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message pollResultSnapshotMessage */
        pollResultSnapshotMessage?: (E2E.Message.IPollResultSnapshotMessage|null);

        /** Message pollCreationOptionImageMessage */
        pollCreationOptionImageMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message associatedChildMessage */
        associatedChildMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message groupStatusMentionMessage */
        groupStatusMentionMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message pollCreationMessageV4 */
        pollCreationMessageV4?: (E2E.Message.IFutureProofMessage|null);

        /** Message pollCreationMessageV5 */
        pollCreationMessageV5?: (E2E.Message.IFutureProofMessage|null);

        /** Message statusAddYours */
        statusAddYours?: (E2E.Message.IFutureProofMessage|null);

        /** Message groupStatusMessage */
        groupStatusMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message richResponseMessage */
        richResponseMessage?: (E2E.IAIRichResponseMessage|null);

        /** Message statusNotificationMessage */
        statusNotificationMessage?: (E2E.Message.IStatusNotificationMessage|null);

        /** Message limitSharingMessage */
        limitSharingMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message botTaskMessage */
        botTaskMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message questionMessage */
        questionMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message messageHistoryNotice */
        messageHistoryNotice?: (E2E.Message.IMessageHistoryNotice|null);

        /** Message groupStatusMessageV2 */
        groupStatusMessageV2?: (E2E.Message.IFutureProofMessage|null);

        /** Message botForwardedMessage */
        botForwardedMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message statusQuestionAnswerMessage */
        statusQuestionAnswerMessage?: (E2E.Message.IStatusQuestionAnswerMessage|null);

        /** Message questionReplyMessage */
        questionReplyMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message questionResponseMessage */
        questionResponseMessage?: (E2E.Message.IQuestionResponseMessage|null);

        /** Message newsletterFollowerInviteMessage */
        newsletterFollowerInviteMessage?: (E2E.Message.INewsletterFollowerInviteMessage|null);

        /** Message statusQuotedMessage */
        statusQuotedMessage?: (E2E.Message.IStatusQuotedMessage|null);
    }

    /** Represents a Message. */
    class Message implements IMessage {

        /**
         * Constructs a new Message.
         * @param [properties] Properties to set
         */
        constructor(properties?: E2E.IMessage);

        /** Message conversation. */
        public conversation: string;

        /** Message senderKeyDistributionMessage. */
        public senderKeyDistributionMessage?: (E2E.Message.ISenderKeyDistributionMessage|null);

        /** Message imageMessage. */
        public imageMessage?: (E2E.Message.IImageMessage|null);

        /** Message contactMessage. */
        public contactMessage?: (E2E.Message.IContactMessage|null);

        /** Message locationMessage. */
        public locationMessage?: (E2E.Message.ILocationMessage|null);

        /** Message extendedTextMessage. */
        public extendedTextMessage?: (E2E.Message.IExtendedTextMessage|null);

        /** Message documentMessage. */
        public documentMessage?: (E2E.Message.IDocumentMessage|null);

        /** Message audioMessage. */
        public audioMessage?: (E2E.Message.IAudioMessage|null);

        /** Message videoMessage. */
        public videoMessage?: (E2E.Message.IVideoMessage|null);

        /** Message call. */
        public call?: (E2E.Message.ICall|null);

        /** Message chat. */
        public chat?: (E2E.Message.IChat|null);

        /** Message protocolMessage. */
        public protocolMessage?: (E2E.Message.IProtocolMessage|null);

        /** Message contactsArrayMessage. */
        public contactsArrayMessage?: (E2E.Message.IContactsArrayMessage|null);

        /** Message highlyStructuredMessage. */
        public highlyStructuredMessage?: (E2E.Message.IHighlyStructuredMessage|null);

        /** Message fastRatchetKeySenderKeyDistributionMessage. */
        public fastRatchetKeySenderKeyDistributionMessage?: (E2E.Message.ISenderKeyDistributionMessage|null);

        /** Message sendPaymentMessage. */
        public sendPaymentMessage?: (E2E.Message.ISendPaymentMessage|null);

        /** Message liveLocationMessage. */
        public liveLocationMessage?: (E2E.Message.ILiveLocationMessage|null);

        /** Message requestPaymentMessage. */
        public requestPaymentMessage?: (E2E.Message.IRequestPaymentMessage|null);

        /** Message declinePaymentRequestMessage. */
        public declinePaymentRequestMessage?: (E2E.Message.IDeclinePaymentRequestMessage|null);

        /** Message cancelPaymentRequestMessage. */
        public cancelPaymentRequestMessage?: (E2E.Message.ICancelPaymentRequestMessage|null);

        /** Message templateMessage. */
        public templateMessage?: (E2E.Message.ITemplateMessage|null);

        /** Message stickerMessage. */
        public stickerMessage?: (E2E.Message.IStickerMessage|null);

        /** Message groupInviteMessage. */
        public groupInviteMessage?: (E2E.Message.IGroupInviteMessage|null);

        /** Message templateButtonReplyMessage. */
        public templateButtonReplyMessage?: (E2E.Message.ITemplateButtonReplyMessage|null);

        /** Message productMessage. */
        public productMessage?: (E2E.Message.IProductMessage|null);

        /** Message deviceSentMessage. */
        public deviceSentMessage?: (E2E.Message.IDeviceSentMessage|null);

        /** Message messageContextInfo. */
        public messageContextInfo?: (E2E.IMessageContextInfo|null);

        /** Message listMessage. */
        public listMessage?: (E2E.Message.IListMessage|null);

        /** Message viewOnceMessage. */
        public viewOnceMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message orderMessage. */
        public orderMessage?: (E2E.Message.IOrderMessage|null);

        /** Message listResponseMessage. */
        public listResponseMessage?: (E2E.Message.IListResponseMessage|null);

        /** Message ephemeralMessage. */
        public ephemeralMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message invoiceMessage. */
        public invoiceMessage?: (E2E.Message.IInvoiceMessage|null);

        /** Message buttonsMessage. */
        public buttonsMessage?: (E2E.Message.IButtonsMessage|null);

        /** Message buttonsResponseMessage. */
        public buttonsResponseMessage?: (E2E.Message.IButtonsResponseMessage|null);

        /** Message paymentInviteMessage. */
        public paymentInviteMessage?: (E2E.Message.IPaymentInviteMessage|null);

        /** Message interactiveMessage. */
        public interactiveMessage?: (E2E.Message.IInteractiveMessage|null);

        /** Message reactionMessage. */
        public reactionMessage?: (E2E.Message.IReactionMessage|null);

        /** Message stickerSyncRmrMessage. */
        public stickerSyncRmrMessage?: (E2E.Message.IStickerSyncRMRMessage|null);

        /** Message interactiveResponseMessage. */
        public interactiveResponseMessage?: (E2E.Message.IInteractiveResponseMessage|null);

        /** Message pollCreationMessage. */
        public pollCreationMessage?: (E2E.Message.IPollCreationMessage|null);

        /** Message pollUpdateMessage. */
        public pollUpdateMessage?: (E2E.Message.IPollUpdateMessage|null);

        /** Message keepInChatMessage. */
        public keepInChatMessage?: (E2E.Message.IKeepInChatMessage|null);

        /** Message documentWithCaptionMessage. */
        public documentWithCaptionMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message requestPhoneNumberMessage. */
        public requestPhoneNumberMessage?: (E2E.Message.IRequestPhoneNumberMessage|null);

        /** Message viewOnceMessageV2. */
        public viewOnceMessageV2?: (E2E.Message.IFutureProofMessage|null);

        /** Message encReactionMessage. */
        public encReactionMessage?: (E2E.Message.IEncReactionMessage|null);

        /** Message editedMessage. */
        public editedMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message viewOnceMessageV2Extension. */
        public viewOnceMessageV2Extension?: (E2E.Message.IFutureProofMessage|null);

        /** Message pollCreationMessageV2. */
        public pollCreationMessageV2?: (E2E.Message.IPollCreationMessage|null);

        /** Message scheduledCallCreationMessage. */
        public scheduledCallCreationMessage?: (E2E.Message.IScheduledCallCreationMessage|null);

        /** Message groupMentionedMessage. */
        public groupMentionedMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message pinInChatMessage. */
        public pinInChatMessage?: (E2E.Message.IPinInChatMessage|null);

        /** Message pollCreationMessageV3. */
        public pollCreationMessageV3?: (E2E.Message.IPollCreationMessage|null);

        /** Message scheduledCallEditMessage. */
        public scheduledCallEditMessage?: (E2E.Message.IScheduledCallEditMessage|null);

        /** Message ptvMessage. */
        public ptvMessage?: (E2E.Message.IVideoMessage|null);

        /** Message botInvokeMessage. */
        public botInvokeMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message callLogMesssage. */
        public callLogMesssage?: (E2E.Message.ICallLogMessage|null);

        /** Message messageHistoryBundle. */
        public messageHistoryBundle?: (E2E.Message.IMessageHistoryBundle|null);

        /** Message encCommentMessage. */
        public encCommentMessage?: (E2E.Message.IEncCommentMessage|null);

        /** Message bcallMessage. */
        public bcallMessage?: (E2E.Message.IBCallMessage|null);

        /** Message lottieStickerMessage. */
        public lottieStickerMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message eventMessage. */
        public eventMessage?: (E2E.Message.IEventMessage|null);

        /** Message encEventResponseMessage. */
        public encEventResponseMessage?: (E2E.Message.IEncEventResponseMessage|null);

        /** Message commentMessage. */
        public commentMessage?: (E2E.Message.ICommentMessage|null);

        /** Message newsletterAdminInviteMessage. */
        public newsletterAdminInviteMessage?: (E2E.Message.INewsletterAdminInviteMessage|null);

        /** Message placeholderMessage. */
        public placeholderMessage?: (E2E.Message.IPlaceholderMessage|null);

        /** Message secretEncryptedMessage. */
        public secretEncryptedMessage?: (E2E.Message.ISecretEncryptedMessage|null);

        /** Message albumMessage. */
        public albumMessage?: (E2E.Message.IAlbumMessage|null);

        /** Message eventCoverImage. */
        public eventCoverImage?: (E2E.Message.IFutureProofMessage|null);

        /** Message stickerPackMessage. */
        public stickerPackMessage?: (E2E.Message.IStickerPackMessage|null);

        /** Message statusMentionMessage. */
        public statusMentionMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message pollResultSnapshotMessage. */
        public pollResultSnapshotMessage?: (E2E.Message.IPollResultSnapshotMessage|null);

        /** Message pollCreationOptionImageMessage. */
        public pollCreationOptionImageMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message associatedChildMessage. */
        public associatedChildMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message groupStatusMentionMessage. */
        public groupStatusMentionMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message pollCreationMessageV4. */
        public pollCreationMessageV4?: (E2E.Message.IFutureProofMessage|null);

        /** Message pollCreationMessageV5. */
        public pollCreationMessageV5?: (E2E.Message.IFutureProofMessage|null);

        /** Message statusAddYours. */
        public statusAddYours?: (E2E.Message.IFutureProofMessage|null);

        /** Message groupStatusMessage. */
        public groupStatusMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message richResponseMessage. */
        public richResponseMessage?: (E2E.IAIRichResponseMessage|null);

        /** Message statusNotificationMessage. */
        public statusNotificationMessage?: (E2E.Message.IStatusNotificationMessage|null);

        /** Message limitSharingMessage. */
        public limitSharingMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message botTaskMessage. */
        public botTaskMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message questionMessage. */
        public questionMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message messageHistoryNotice. */
        public messageHistoryNotice?: (E2E.Message.IMessageHistoryNotice|null);

        /** Message groupStatusMessageV2. */
        public groupStatusMessageV2?: (E2E.Message.IFutureProofMessage|null);

        /** Message botForwardedMessage. */
        public botForwardedMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message statusQuestionAnswerMessage. */
        public statusQuestionAnswerMessage?: (E2E.Message.IStatusQuestionAnswerMessage|null);

        /** Message questionReplyMessage. */
        public questionReplyMessage?: (E2E.Message.IFutureProofMessage|null);

        /** Message questionResponseMessage. */
        public questionResponseMessage?: (E2E.Message.IQuestionResponseMessage|null);

        /** Message newsletterFollowerInviteMessage. */
        public newsletterFollowerInviteMessage?: (E2E.Message.INewsletterFollowerInviteMessage|null);

        /** Message statusQuotedMessage. */
        public statusQuotedMessage?: (E2E.Message.IStatusQuotedMessage|null);

        /**
         * Creates a new Message instance using the specified properties.
         * @param [properties] Properties to set
         * @returns Message instance
         */
        public static create(properties?: E2E.IMessage): E2E.Message;

        /**
         * Encodes the specified Message message. Does not implicitly {@link E2E.Message.verify|verify} messages.
         * @param message Message message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: E2E.IMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified Message message, length delimited. Does not implicitly {@link E2E.Message.verify|verify} messages.
         * @param message Message message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: E2E.IMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a Message message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Message
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message;

        /**
         * Decodes a Message message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns Message
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message;

        /**
         * Verifies a Message message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a Message message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Message
         */
        public static fromObject(object: { [k: string]: any }): E2E.Message;

        /**
         * Creates a plain object from a Message message. Also converts values to other types if specified.
         * @param message Message
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: E2E.Message, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Message to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for Message
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace Message {

        /** Properties of an AlbumMessage. */
        interface IAlbumMessage {

            /** AlbumMessage expectedImageCount */
            expectedImageCount?: (number|null);

            /** AlbumMessage expectedVideoCount */
            expectedVideoCount?: (number|null);

            /** AlbumMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);
        }

        /** Represents an AlbumMessage. */
        class AlbumMessage implements IAlbumMessage {

            /**
             * Constructs a new AlbumMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IAlbumMessage);

            /** AlbumMessage expectedImageCount. */
            public expectedImageCount: number;

            /** AlbumMessage expectedVideoCount. */
            public expectedVideoCount: number;

            /** AlbumMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /**
             * Creates a new AlbumMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AlbumMessage instance
             */
            public static create(properties?: E2E.Message.IAlbumMessage): E2E.Message.AlbumMessage;

            /**
             * Encodes the specified AlbumMessage message. Does not implicitly {@link E2E.Message.AlbumMessage.verify|verify} messages.
             * @param message AlbumMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IAlbumMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AlbumMessage message, length delimited. Does not implicitly {@link E2E.Message.AlbumMessage.verify|verify} messages.
             * @param message AlbumMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IAlbumMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AlbumMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AlbumMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.AlbumMessage;

            /**
             * Decodes an AlbumMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AlbumMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.AlbumMessage;

            /**
             * Verifies an AlbumMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AlbumMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AlbumMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.AlbumMessage;

            /**
             * Creates a plain object from an AlbumMessage message. Also converts values to other types if specified.
             * @param message AlbumMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.AlbumMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AlbumMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AlbumMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an AppStateFatalExceptionNotification. */
        interface IAppStateFatalExceptionNotification {

            /** AppStateFatalExceptionNotification collectionNames */
            collectionNames?: (string[]|null);

            /** AppStateFatalExceptionNotification timestamp */
            timestamp?: (number|Long|null);
        }

        /** Represents an AppStateFatalExceptionNotification. */
        class AppStateFatalExceptionNotification implements IAppStateFatalExceptionNotification {

            /**
             * Constructs a new AppStateFatalExceptionNotification.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IAppStateFatalExceptionNotification);

            /** AppStateFatalExceptionNotification collectionNames. */
            public collectionNames: string[];

            /** AppStateFatalExceptionNotification timestamp. */
            public timestamp: (number|Long);

            /**
             * Creates a new AppStateFatalExceptionNotification instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AppStateFatalExceptionNotification instance
             */
            public static create(properties?: E2E.Message.IAppStateFatalExceptionNotification): E2E.Message.AppStateFatalExceptionNotification;

            /**
             * Encodes the specified AppStateFatalExceptionNotification message. Does not implicitly {@link E2E.Message.AppStateFatalExceptionNotification.verify|verify} messages.
             * @param message AppStateFatalExceptionNotification message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IAppStateFatalExceptionNotification, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AppStateFatalExceptionNotification message, length delimited. Does not implicitly {@link E2E.Message.AppStateFatalExceptionNotification.verify|verify} messages.
             * @param message AppStateFatalExceptionNotification message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IAppStateFatalExceptionNotification, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AppStateFatalExceptionNotification message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AppStateFatalExceptionNotification
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.AppStateFatalExceptionNotification;

            /**
             * Decodes an AppStateFatalExceptionNotification message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AppStateFatalExceptionNotification
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.AppStateFatalExceptionNotification;

            /**
             * Verifies an AppStateFatalExceptionNotification message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AppStateFatalExceptionNotification message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AppStateFatalExceptionNotification
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.AppStateFatalExceptionNotification;

            /**
             * Creates a plain object from an AppStateFatalExceptionNotification message. Also converts values to other types if specified.
             * @param message AppStateFatalExceptionNotification
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.AppStateFatalExceptionNotification, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AppStateFatalExceptionNotification to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AppStateFatalExceptionNotification
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an AppStateSyncKey. */
        interface IAppStateSyncKey {

            /** AppStateSyncKey keyId */
            keyId?: (E2E.Message.IAppStateSyncKeyId|null);

            /** AppStateSyncKey keyData */
            keyData?: (E2E.Message.IAppStateSyncKeyData|null);
        }

        /** Represents an AppStateSyncKey. */
        class AppStateSyncKey implements IAppStateSyncKey {

            /**
             * Constructs a new AppStateSyncKey.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IAppStateSyncKey);

            /** AppStateSyncKey keyId. */
            public keyId?: (E2E.Message.IAppStateSyncKeyId|null);

            /** AppStateSyncKey keyData. */
            public keyData?: (E2E.Message.IAppStateSyncKeyData|null);

            /**
             * Creates a new AppStateSyncKey instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AppStateSyncKey instance
             */
            public static create(properties?: E2E.Message.IAppStateSyncKey): E2E.Message.AppStateSyncKey;

            /**
             * Encodes the specified AppStateSyncKey message. Does not implicitly {@link E2E.Message.AppStateSyncKey.verify|verify} messages.
             * @param message AppStateSyncKey message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IAppStateSyncKey, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AppStateSyncKey message, length delimited. Does not implicitly {@link E2E.Message.AppStateSyncKey.verify|verify} messages.
             * @param message AppStateSyncKey message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IAppStateSyncKey, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AppStateSyncKey message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AppStateSyncKey
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.AppStateSyncKey;

            /**
             * Decodes an AppStateSyncKey message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AppStateSyncKey
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.AppStateSyncKey;

            /**
             * Verifies an AppStateSyncKey message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AppStateSyncKey message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AppStateSyncKey
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.AppStateSyncKey;

            /**
             * Creates a plain object from an AppStateSyncKey message. Also converts values to other types if specified.
             * @param message AppStateSyncKey
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.AppStateSyncKey, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AppStateSyncKey to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AppStateSyncKey
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an AppStateSyncKeyData. */
        interface IAppStateSyncKeyData {

            /** AppStateSyncKeyData keyData */
            keyData?: (Uint8Array|null);

            /** AppStateSyncKeyData fingerprint */
            fingerprint?: (E2E.Message.IAppStateSyncKeyFingerprint|null);

            /** AppStateSyncKeyData timestamp */
            timestamp?: (number|Long|null);
        }

        /** Represents an AppStateSyncKeyData. */
        class AppStateSyncKeyData implements IAppStateSyncKeyData {

            /**
             * Constructs a new AppStateSyncKeyData.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IAppStateSyncKeyData);

            /** AppStateSyncKeyData keyData. */
            public keyData: Uint8Array;

            /** AppStateSyncKeyData fingerprint. */
            public fingerprint?: (E2E.Message.IAppStateSyncKeyFingerprint|null);

            /** AppStateSyncKeyData timestamp. */
            public timestamp: (number|Long);

            /**
             * Creates a new AppStateSyncKeyData instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AppStateSyncKeyData instance
             */
            public static create(properties?: E2E.Message.IAppStateSyncKeyData): E2E.Message.AppStateSyncKeyData;

            /**
             * Encodes the specified AppStateSyncKeyData message. Does not implicitly {@link E2E.Message.AppStateSyncKeyData.verify|verify} messages.
             * @param message AppStateSyncKeyData message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IAppStateSyncKeyData, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AppStateSyncKeyData message, length delimited. Does not implicitly {@link E2E.Message.AppStateSyncKeyData.verify|verify} messages.
             * @param message AppStateSyncKeyData message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IAppStateSyncKeyData, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AppStateSyncKeyData message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AppStateSyncKeyData
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.AppStateSyncKeyData;

            /**
             * Decodes an AppStateSyncKeyData message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AppStateSyncKeyData
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.AppStateSyncKeyData;

            /**
             * Verifies an AppStateSyncKeyData message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AppStateSyncKeyData message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AppStateSyncKeyData
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.AppStateSyncKeyData;

            /**
             * Creates a plain object from an AppStateSyncKeyData message. Also converts values to other types if specified.
             * @param message AppStateSyncKeyData
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.AppStateSyncKeyData, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AppStateSyncKeyData to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AppStateSyncKeyData
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an AppStateSyncKeyFingerprint. */
        interface IAppStateSyncKeyFingerprint {

            /** AppStateSyncKeyFingerprint rawId */
            rawId?: (number|null);

            /** AppStateSyncKeyFingerprint currentIndex */
            currentIndex?: (number|null);

            /** AppStateSyncKeyFingerprint deviceIndexes */
            deviceIndexes?: (number[]|null);
        }

        /** Represents an AppStateSyncKeyFingerprint. */
        class AppStateSyncKeyFingerprint implements IAppStateSyncKeyFingerprint {

            /**
             * Constructs a new AppStateSyncKeyFingerprint.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IAppStateSyncKeyFingerprint);

            /** AppStateSyncKeyFingerprint rawId. */
            public rawId: number;

            /** AppStateSyncKeyFingerprint currentIndex. */
            public currentIndex: number;

            /** AppStateSyncKeyFingerprint deviceIndexes. */
            public deviceIndexes: number[];

            /**
             * Creates a new AppStateSyncKeyFingerprint instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AppStateSyncKeyFingerprint instance
             */
            public static create(properties?: E2E.Message.IAppStateSyncKeyFingerprint): E2E.Message.AppStateSyncKeyFingerprint;

            /**
             * Encodes the specified AppStateSyncKeyFingerprint message. Does not implicitly {@link E2E.Message.AppStateSyncKeyFingerprint.verify|verify} messages.
             * @param message AppStateSyncKeyFingerprint message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IAppStateSyncKeyFingerprint, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AppStateSyncKeyFingerprint message, length delimited. Does not implicitly {@link E2E.Message.AppStateSyncKeyFingerprint.verify|verify} messages.
             * @param message AppStateSyncKeyFingerprint message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IAppStateSyncKeyFingerprint, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AppStateSyncKeyFingerprint message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AppStateSyncKeyFingerprint
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.AppStateSyncKeyFingerprint;

            /**
             * Decodes an AppStateSyncKeyFingerprint message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AppStateSyncKeyFingerprint
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.AppStateSyncKeyFingerprint;

            /**
             * Verifies an AppStateSyncKeyFingerprint message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AppStateSyncKeyFingerprint message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AppStateSyncKeyFingerprint
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.AppStateSyncKeyFingerprint;

            /**
             * Creates a plain object from an AppStateSyncKeyFingerprint message. Also converts values to other types if specified.
             * @param message AppStateSyncKeyFingerprint
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.AppStateSyncKeyFingerprint, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AppStateSyncKeyFingerprint to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AppStateSyncKeyFingerprint
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an AppStateSyncKeyId. */
        interface IAppStateSyncKeyId {

            /** AppStateSyncKeyId keyId */
            keyId?: (Uint8Array|null);
        }

        /** Represents an AppStateSyncKeyId. */
        class AppStateSyncKeyId implements IAppStateSyncKeyId {

            /**
             * Constructs a new AppStateSyncKeyId.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IAppStateSyncKeyId);

            /** AppStateSyncKeyId keyId. */
            public keyId: Uint8Array;

            /**
             * Creates a new AppStateSyncKeyId instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AppStateSyncKeyId instance
             */
            public static create(properties?: E2E.Message.IAppStateSyncKeyId): E2E.Message.AppStateSyncKeyId;

            /**
             * Encodes the specified AppStateSyncKeyId message. Does not implicitly {@link E2E.Message.AppStateSyncKeyId.verify|verify} messages.
             * @param message AppStateSyncKeyId message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IAppStateSyncKeyId, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AppStateSyncKeyId message, length delimited. Does not implicitly {@link E2E.Message.AppStateSyncKeyId.verify|verify} messages.
             * @param message AppStateSyncKeyId message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IAppStateSyncKeyId, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AppStateSyncKeyId message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AppStateSyncKeyId
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.AppStateSyncKeyId;

            /**
             * Decodes an AppStateSyncKeyId message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AppStateSyncKeyId
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.AppStateSyncKeyId;

            /**
             * Verifies an AppStateSyncKeyId message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AppStateSyncKeyId message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AppStateSyncKeyId
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.AppStateSyncKeyId;

            /**
             * Creates a plain object from an AppStateSyncKeyId message. Also converts values to other types if specified.
             * @param message AppStateSyncKeyId
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.AppStateSyncKeyId, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AppStateSyncKeyId to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AppStateSyncKeyId
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an AppStateSyncKeyRequest. */
        interface IAppStateSyncKeyRequest {

            /** AppStateSyncKeyRequest keyIds */
            keyIds?: (E2E.Message.IAppStateSyncKeyId[]|null);
        }

        /** Represents an AppStateSyncKeyRequest. */
        class AppStateSyncKeyRequest implements IAppStateSyncKeyRequest {

            /**
             * Constructs a new AppStateSyncKeyRequest.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IAppStateSyncKeyRequest);

            /** AppStateSyncKeyRequest keyIds. */
            public keyIds: E2E.Message.IAppStateSyncKeyId[];

            /**
             * Creates a new AppStateSyncKeyRequest instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AppStateSyncKeyRequest instance
             */
            public static create(properties?: E2E.Message.IAppStateSyncKeyRequest): E2E.Message.AppStateSyncKeyRequest;

            /**
             * Encodes the specified AppStateSyncKeyRequest message. Does not implicitly {@link E2E.Message.AppStateSyncKeyRequest.verify|verify} messages.
             * @param message AppStateSyncKeyRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IAppStateSyncKeyRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AppStateSyncKeyRequest message, length delimited. Does not implicitly {@link E2E.Message.AppStateSyncKeyRequest.verify|verify} messages.
             * @param message AppStateSyncKeyRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IAppStateSyncKeyRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AppStateSyncKeyRequest message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AppStateSyncKeyRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.AppStateSyncKeyRequest;

            /**
             * Decodes an AppStateSyncKeyRequest message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AppStateSyncKeyRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.AppStateSyncKeyRequest;

            /**
             * Verifies an AppStateSyncKeyRequest message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AppStateSyncKeyRequest message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AppStateSyncKeyRequest
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.AppStateSyncKeyRequest;

            /**
             * Creates a plain object from an AppStateSyncKeyRequest message. Also converts values to other types if specified.
             * @param message AppStateSyncKeyRequest
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.AppStateSyncKeyRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AppStateSyncKeyRequest to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AppStateSyncKeyRequest
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an AppStateSyncKeyShare. */
        interface IAppStateSyncKeyShare {

            /** AppStateSyncKeyShare keys */
            keys?: (E2E.Message.IAppStateSyncKey[]|null);
        }

        /** Represents an AppStateSyncKeyShare. */
        class AppStateSyncKeyShare implements IAppStateSyncKeyShare {

            /**
             * Constructs a new AppStateSyncKeyShare.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IAppStateSyncKeyShare);

            /** AppStateSyncKeyShare keys. */
            public keys: E2E.Message.IAppStateSyncKey[];

            /**
             * Creates a new AppStateSyncKeyShare instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AppStateSyncKeyShare instance
             */
            public static create(properties?: E2E.Message.IAppStateSyncKeyShare): E2E.Message.AppStateSyncKeyShare;

            /**
             * Encodes the specified AppStateSyncKeyShare message. Does not implicitly {@link E2E.Message.AppStateSyncKeyShare.verify|verify} messages.
             * @param message AppStateSyncKeyShare message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IAppStateSyncKeyShare, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AppStateSyncKeyShare message, length delimited. Does not implicitly {@link E2E.Message.AppStateSyncKeyShare.verify|verify} messages.
             * @param message AppStateSyncKeyShare message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IAppStateSyncKeyShare, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AppStateSyncKeyShare message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AppStateSyncKeyShare
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.AppStateSyncKeyShare;

            /**
             * Decodes an AppStateSyncKeyShare message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AppStateSyncKeyShare
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.AppStateSyncKeyShare;

            /**
             * Verifies an AppStateSyncKeyShare message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AppStateSyncKeyShare message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AppStateSyncKeyShare
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.AppStateSyncKeyShare;

            /**
             * Creates a plain object from an AppStateSyncKeyShare message. Also converts values to other types if specified.
             * @param message AppStateSyncKeyShare
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.AppStateSyncKeyShare, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AppStateSyncKeyShare to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AppStateSyncKeyShare
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an AudioMessage. */
        interface IAudioMessage {

            /** AudioMessage url */
            url?: (string|null);

            /** AudioMessage mimetype */
            mimetype?: (string|null);

            /** AudioMessage fileSha256 */
            fileSha256?: (Uint8Array|null);

            /** AudioMessage fileLength */
            fileLength?: (number|Long|null);

            /** AudioMessage seconds */
            seconds?: (number|null);

            /** AudioMessage ptt */
            ptt?: (boolean|null);

            /** AudioMessage mediaKey */
            mediaKey?: (Uint8Array|null);

            /** AudioMessage fileEncSha256 */
            fileEncSha256?: (Uint8Array|null);

            /** AudioMessage directPath */
            directPath?: (string|null);

            /** AudioMessage mediaKeyTimestamp */
            mediaKeyTimestamp?: (number|Long|null);

            /** AudioMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** AudioMessage streamingSidecar */
            streamingSidecar?: (Uint8Array|null);

            /** AudioMessage waveform */
            waveform?: (Uint8Array|null);

            /** AudioMessage backgroundArgb */
            backgroundArgb?: (number|null);

            /** AudioMessage viewOnce */
            viewOnce?: (boolean|null);

            /** AudioMessage accessibilityLabel */
            accessibilityLabel?: (string|null);

            /** AudioMessage mediaKeyDomain */
            mediaKeyDomain?: (E2E.Message.MediaKeyDomain|null);
        }

        /** Represents an AudioMessage. */
        class AudioMessage implements IAudioMessage {

            /**
             * Constructs a new AudioMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IAudioMessage);

            /** AudioMessage url. */
            public url: string;

            /** AudioMessage mimetype. */
            public mimetype: string;

            /** AudioMessage fileSha256. */
            public fileSha256: Uint8Array;

            /** AudioMessage fileLength. */
            public fileLength: (number|Long);

            /** AudioMessage seconds. */
            public seconds: number;

            /** AudioMessage ptt. */
            public ptt: boolean;

            /** AudioMessage mediaKey. */
            public mediaKey: Uint8Array;

            /** AudioMessage fileEncSha256. */
            public fileEncSha256: Uint8Array;

            /** AudioMessage directPath. */
            public directPath: string;

            /** AudioMessage mediaKeyTimestamp. */
            public mediaKeyTimestamp: (number|Long);

            /** AudioMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** AudioMessage streamingSidecar. */
            public streamingSidecar: Uint8Array;

            /** AudioMessage waveform. */
            public waveform: Uint8Array;

            /** AudioMessage backgroundArgb. */
            public backgroundArgb: number;

            /** AudioMessage viewOnce. */
            public viewOnce: boolean;

            /** AudioMessage accessibilityLabel. */
            public accessibilityLabel: string;

            /** AudioMessage mediaKeyDomain. */
            public mediaKeyDomain: E2E.Message.MediaKeyDomain;

            /**
             * Creates a new AudioMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AudioMessage instance
             */
            public static create(properties?: E2E.Message.IAudioMessage): E2E.Message.AudioMessage;

            /**
             * Encodes the specified AudioMessage message. Does not implicitly {@link E2E.Message.AudioMessage.verify|verify} messages.
             * @param message AudioMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IAudioMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AudioMessage message, length delimited. Does not implicitly {@link E2E.Message.AudioMessage.verify|verify} messages.
             * @param message AudioMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IAudioMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AudioMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AudioMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.AudioMessage;

            /**
             * Decodes an AudioMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AudioMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.AudioMessage;

            /**
             * Verifies an AudioMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AudioMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AudioMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.AudioMessage;

            /**
             * Creates a plain object from an AudioMessage message. Also converts values to other types if specified.
             * @param message AudioMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.AudioMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AudioMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AudioMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a BCallMessage. */
        interface IBCallMessage {

            /** BCallMessage sessionId */
            sessionId?: (string|null);

            /** BCallMessage mediaType */
            mediaType?: (E2E.Message.BCallMessage.MediaType|null);

            /** BCallMessage masterKey */
            masterKey?: (Uint8Array|null);

            /** BCallMessage caption */
            caption?: (string|null);
        }

        /** Represents a BCallMessage. */
        class BCallMessage implements IBCallMessage {

            /**
             * Constructs a new BCallMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IBCallMessage);

            /** BCallMessage sessionId. */
            public sessionId: string;

            /** BCallMessage mediaType. */
            public mediaType: E2E.Message.BCallMessage.MediaType;

            /** BCallMessage masterKey. */
            public masterKey: Uint8Array;

            /** BCallMessage caption. */
            public caption: string;

            /**
             * Creates a new BCallMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns BCallMessage instance
             */
            public static create(properties?: E2E.Message.IBCallMessage): E2E.Message.BCallMessage;

            /**
             * Encodes the specified BCallMessage message. Does not implicitly {@link E2E.Message.BCallMessage.verify|verify} messages.
             * @param message BCallMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IBCallMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified BCallMessage message, length delimited. Does not implicitly {@link E2E.Message.BCallMessage.verify|verify} messages.
             * @param message BCallMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IBCallMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a BCallMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns BCallMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.BCallMessage;

            /**
             * Decodes a BCallMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns BCallMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.BCallMessage;

            /**
             * Verifies a BCallMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a BCallMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns BCallMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.BCallMessage;

            /**
             * Creates a plain object from a BCallMessage message. Also converts values to other types if specified.
             * @param message BCallMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.BCallMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this BCallMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for BCallMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace BCallMessage {

            /** MediaType enum. */
            enum MediaType {
                UNKNOWN = 0,
                AUDIO = 1,
                VIDEO = 2
            }
        }

        /** Properties of a ButtonsMessage. */
        interface IButtonsMessage {

            /** ButtonsMessage contentText */
            contentText?: (string|null);

            /** ButtonsMessage footerText */
            footerText?: (string|null);

            /** ButtonsMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** ButtonsMessage buttons */
            buttons?: (E2E.Message.ButtonsMessage.IButton[]|null);

            /** ButtonsMessage headerType */
            headerType?: (E2E.Message.ButtonsMessage.HeaderType|null);

            /** ButtonsMessage text */
            text?: (string|null);

            /** ButtonsMessage documentMessage */
            documentMessage?: (E2E.Message.IDocumentMessage|null);

            /** ButtonsMessage imageMessage */
            imageMessage?: (E2E.Message.IImageMessage|null);

            /** ButtonsMessage videoMessage */
            videoMessage?: (E2E.Message.IVideoMessage|null);

            /** ButtonsMessage locationMessage */
            locationMessage?: (E2E.Message.ILocationMessage|null);
        }

        /** Represents a ButtonsMessage. */
        class ButtonsMessage implements IButtonsMessage {

            /**
             * Constructs a new ButtonsMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IButtonsMessage);

            /** ButtonsMessage contentText. */
            public contentText: string;

            /** ButtonsMessage footerText. */
            public footerText: string;

            /** ButtonsMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** ButtonsMessage buttons. */
            public buttons: E2E.Message.ButtonsMessage.IButton[];

            /** ButtonsMessage headerType. */
            public headerType: E2E.Message.ButtonsMessage.HeaderType;

            /** ButtonsMessage text. */
            public text?: (string|null);

            /** ButtonsMessage documentMessage. */
            public documentMessage?: (E2E.Message.IDocumentMessage|null);

            /** ButtonsMessage imageMessage. */
            public imageMessage?: (E2E.Message.IImageMessage|null);

            /** ButtonsMessage videoMessage. */
            public videoMessage?: (E2E.Message.IVideoMessage|null);

            /** ButtonsMessage locationMessage. */
            public locationMessage?: (E2E.Message.ILocationMessage|null);

            /** ButtonsMessage header. */
            public header?: ("text"|"documentMessage"|"imageMessage"|"videoMessage"|"locationMessage");

            /**
             * Creates a new ButtonsMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ButtonsMessage instance
             */
            public static create(properties?: E2E.Message.IButtonsMessage): E2E.Message.ButtonsMessage;

            /**
             * Encodes the specified ButtonsMessage message. Does not implicitly {@link E2E.Message.ButtonsMessage.verify|verify} messages.
             * @param message ButtonsMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IButtonsMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ButtonsMessage message, length delimited. Does not implicitly {@link E2E.Message.ButtonsMessage.verify|verify} messages.
             * @param message ButtonsMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IButtonsMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ButtonsMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ButtonsMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ButtonsMessage;

            /**
             * Decodes a ButtonsMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ButtonsMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ButtonsMessage;

            /**
             * Verifies a ButtonsMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ButtonsMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ButtonsMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ButtonsMessage;

            /**
             * Creates a plain object from a ButtonsMessage message. Also converts values to other types if specified.
             * @param message ButtonsMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ButtonsMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ButtonsMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ButtonsMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ButtonsMessage {

            /** Properties of a Button. */
            interface IButton {

                /** Button buttonId */
                buttonId?: (string|null);

                /** Button buttonText */
                buttonText?: (E2E.Message.ButtonsMessage.Button.IButtonText|null);

                /** Button type */
                type?: (E2E.Message.ButtonsMessage.Button.Type|null);

                /** Button nativeFlowInfo */
                nativeFlowInfo?: (E2E.Message.ButtonsMessage.Button.INativeFlowInfo|null);
            }

            /** Represents a Button. */
            class Button implements IButton {

                /**
                 * Constructs a new Button.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.ButtonsMessage.IButton);

                /** Button buttonId. */
                public buttonId: string;

                /** Button buttonText. */
                public buttonText?: (E2E.Message.ButtonsMessage.Button.IButtonText|null);

                /** Button type. */
                public type: E2E.Message.ButtonsMessage.Button.Type;

                /** Button nativeFlowInfo. */
                public nativeFlowInfo?: (E2E.Message.ButtonsMessage.Button.INativeFlowInfo|null);

                /**
                 * Creates a new Button instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Button instance
                 */
                public static create(properties?: E2E.Message.ButtonsMessage.IButton): E2E.Message.ButtonsMessage.Button;

                /**
                 * Encodes the specified Button message. Does not implicitly {@link E2E.Message.ButtonsMessage.Button.verify|verify} messages.
                 * @param message Button message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.ButtonsMessage.IButton, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Button message, length delimited. Does not implicitly {@link E2E.Message.ButtonsMessage.Button.verify|verify} messages.
                 * @param message Button message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.ButtonsMessage.IButton, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Button message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Button
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ButtonsMessage.Button;

                /**
                 * Decodes a Button message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Button
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ButtonsMessage.Button;

                /**
                 * Verifies a Button message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Button message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Button
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.ButtonsMessage.Button;

                /**
                 * Creates a plain object from a Button message. Also converts values to other types if specified.
                 * @param message Button
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.ButtonsMessage.Button, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Button to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Button
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace Button {

                /** Properties of a ButtonText. */
                interface IButtonText {

                    /** ButtonText displayText */
                    displayText?: (string|null);
                }

                /** Represents a ButtonText. */
                class ButtonText implements IButtonText {

                    /**
                     * Constructs a new ButtonText.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.ButtonsMessage.Button.IButtonText);

                    /** ButtonText displayText. */
                    public displayText: string;

                    /**
                     * Creates a new ButtonText instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns ButtonText instance
                     */
                    public static create(properties?: E2E.Message.ButtonsMessage.Button.IButtonText): E2E.Message.ButtonsMessage.Button.ButtonText;

                    /**
                     * Encodes the specified ButtonText message. Does not implicitly {@link E2E.Message.ButtonsMessage.Button.ButtonText.verify|verify} messages.
                     * @param message ButtonText message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.ButtonsMessage.Button.IButtonText, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified ButtonText message, length delimited. Does not implicitly {@link E2E.Message.ButtonsMessage.Button.ButtonText.verify|verify} messages.
                     * @param message ButtonText message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.ButtonsMessage.Button.IButtonText, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a ButtonText message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns ButtonText
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ButtonsMessage.Button.ButtonText;

                    /**
                     * Decodes a ButtonText message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns ButtonText
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ButtonsMessage.Button.ButtonText;

                    /**
                     * Verifies a ButtonText message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a ButtonText message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns ButtonText
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.ButtonsMessage.Button.ButtonText;

                    /**
                     * Creates a plain object from a ButtonText message. Also converts values to other types if specified.
                     * @param message ButtonText
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.ButtonsMessage.Button.ButtonText, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this ButtonText to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for ButtonText
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a NativeFlowInfo. */
                interface INativeFlowInfo {

                    /** NativeFlowInfo name */
                    name?: (string|null);

                    /** NativeFlowInfo paramsJson */
                    paramsJson?: (string|null);
                }

                /** Represents a NativeFlowInfo. */
                class NativeFlowInfo implements INativeFlowInfo {

                    /**
                     * Constructs a new NativeFlowInfo.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.ButtonsMessage.Button.INativeFlowInfo);

                    /** NativeFlowInfo name. */
                    public name: string;

                    /** NativeFlowInfo paramsJson. */
                    public paramsJson: string;

                    /**
                     * Creates a new NativeFlowInfo instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns NativeFlowInfo instance
                     */
                    public static create(properties?: E2E.Message.ButtonsMessage.Button.INativeFlowInfo): E2E.Message.ButtonsMessage.Button.NativeFlowInfo;

                    /**
                     * Encodes the specified NativeFlowInfo message. Does not implicitly {@link E2E.Message.ButtonsMessage.Button.NativeFlowInfo.verify|verify} messages.
                     * @param message NativeFlowInfo message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.ButtonsMessage.Button.INativeFlowInfo, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified NativeFlowInfo message, length delimited. Does not implicitly {@link E2E.Message.ButtonsMessage.Button.NativeFlowInfo.verify|verify} messages.
                     * @param message NativeFlowInfo message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.ButtonsMessage.Button.INativeFlowInfo, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a NativeFlowInfo message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns NativeFlowInfo
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ButtonsMessage.Button.NativeFlowInfo;

                    /**
                     * Decodes a NativeFlowInfo message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns NativeFlowInfo
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ButtonsMessage.Button.NativeFlowInfo;

                    /**
                     * Verifies a NativeFlowInfo message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a NativeFlowInfo message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns NativeFlowInfo
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.ButtonsMessage.Button.NativeFlowInfo;

                    /**
                     * Creates a plain object from a NativeFlowInfo message. Also converts values to other types if specified.
                     * @param message NativeFlowInfo
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.ButtonsMessage.Button.NativeFlowInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this NativeFlowInfo to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for NativeFlowInfo
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Type enum. */
                enum Type {
                    UNKNOWN = 0,
                    RESPONSE = 1,
                    NATIVE_FLOW = 2
                }
            }

            /** HeaderType enum. */
            enum HeaderType {
                UNKNOWN = 0,
                EMPTY = 1,
                TEXT = 2,
                DOCUMENT = 3,
                IMAGE = 4,
                VIDEO = 5,
                LOCATION = 6
            }
        }

        /** Properties of a ButtonsResponseMessage. */
        interface IButtonsResponseMessage {

            /** ButtonsResponseMessage selectedButtonId */
            selectedButtonId?: (string|null);

            /** ButtonsResponseMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** ButtonsResponseMessage type */
            type?: (E2E.Message.ButtonsResponseMessage.Type|null);

            /** ButtonsResponseMessage selectedDisplayText */
            selectedDisplayText?: (string|null);
        }

        /** Represents a ButtonsResponseMessage. */
        class ButtonsResponseMessage implements IButtonsResponseMessage {

            /**
             * Constructs a new ButtonsResponseMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IButtonsResponseMessage);

            /** ButtonsResponseMessage selectedButtonId. */
            public selectedButtonId: string;

            /** ButtonsResponseMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** ButtonsResponseMessage type. */
            public type: E2E.Message.ButtonsResponseMessage.Type;

            /** ButtonsResponseMessage selectedDisplayText. */
            public selectedDisplayText?: (string|null);

            /** ButtonsResponseMessage response. */
            public response?: "selectedDisplayText";

            /**
             * Creates a new ButtonsResponseMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ButtonsResponseMessage instance
             */
            public static create(properties?: E2E.Message.IButtonsResponseMessage): E2E.Message.ButtonsResponseMessage;

            /**
             * Encodes the specified ButtonsResponseMessage message. Does not implicitly {@link E2E.Message.ButtonsResponseMessage.verify|verify} messages.
             * @param message ButtonsResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IButtonsResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ButtonsResponseMessage message, length delimited. Does not implicitly {@link E2E.Message.ButtonsResponseMessage.verify|verify} messages.
             * @param message ButtonsResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IButtonsResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ButtonsResponseMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ButtonsResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ButtonsResponseMessage;

            /**
             * Decodes a ButtonsResponseMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ButtonsResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ButtonsResponseMessage;

            /**
             * Verifies a ButtonsResponseMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ButtonsResponseMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ButtonsResponseMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ButtonsResponseMessage;

            /**
             * Creates a plain object from a ButtonsResponseMessage message. Also converts values to other types if specified.
             * @param message ButtonsResponseMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ButtonsResponseMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ButtonsResponseMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ButtonsResponseMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ButtonsResponseMessage {

            /** Type enum. */
            enum Type {
                UNKNOWN = 0,
                DISPLAY_TEXT = 1
            }
        }

        /** Properties of a Call. */
        interface ICall {

            /** Call callKey */
            callKey?: (Uint8Array|null);

            /** Call conversionSource */
            conversionSource?: (string|null);

            /** Call conversionData */
            conversionData?: (Uint8Array|null);

            /** Call conversionDelaySeconds */
            conversionDelaySeconds?: (number|null);

            /** Call ctwaSignals */
            ctwaSignals?: (string|null);

            /** Call ctwaPayload */
            ctwaPayload?: (Uint8Array|null);

            /** Call contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** Call nativeFlowCallButtonPayload */
            nativeFlowCallButtonPayload?: (string|null);

            /** Call deeplinkPayload */
            deeplinkPayload?: (string|null);
        }

        /** Represents a Call. */
        class Call implements ICall {

            /**
             * Constructs a new Call.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ICall);

            /** Call callKey. */
            public callKey: Uint8Array;

            /** Call conversionSource. */
            public conversionSource: string;

            /** Call conversionData. */
            public conversionData: Uint8Array;

            /** Call conversionDelaySeconds. */
            public conversionDelaySeconds: number;

            /** Call ctwaSignals. */
            public ctwaSignals: string;

            /** Call ctwaPayload. */
            public ctwaPayload: Uint8Array;

            /** Call contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** Call nativeFlowCallButtonPayload. */
            public nativeFlowCallButtonPayload: string;

            /** Call deeplinkPayload. */
            public deeplinkPayload: string;

            /**
             * Creates a new Call instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Call instance
             */
            public static create(properties?: E2E.Message.ICall): E2E.Message.Call;

            /**
             * Encodes the specified Call message. Does not implicitly {@link E2E.Message.Call.verify|verify} messages.
             * @param message Call message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ICall, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Call message, length delimited. Does not implicitly {@link E2E.Message.Call.verify|verify} messages.
             * @param message Call message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ICall, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a Call message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Call
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.Call;

            /**
             * Decodes a Call message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Call
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.Call;

            /**
             * Verifies a Call message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a Call message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Call
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.Call;

            /**
             * Creates a plain object from a Call message. Also converts values to other types if specified.
             * @param message Call
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.Call, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Call to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Call
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a CallLogMessage. */
        interface ICallLogMessage {

            /** CallLogMessage isVideo */
            isVideo?: (boolean|null);

            /** CallLogMessage callOutcome */
            callOutcome?: (E2E.Message.CallLogMessage.CallOutcome|null);

            /** CallLogMessage durationSecs */
            durationSecs?: (number|Long|null);

            /** CallLogMessage callType */
            callType?: (E2E.Message.CallLogMessage.CallType|null);

            /** CallLogMessage participants */
            participants?: (E2E.Message.CallLogMessage.ICallParticipant[]|null);
        }

        /** Represents a CallLogMessage. */
        class CallLogMessage implements ICallLogMessage {

            /**
             * Constructs a new CallLogMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ICallLogMessage);

            /** CallLogMessage isVideo. */
            public isVideo: boolean;

            /** CallLogMessage callOutcome. */
            public callOutcome: E2E.Message.CallLogMessage.CallOutcome;

            /** CallLogMessage durationSecs. */
            public durationSecs: (number|Long);

            /** CallLogMessage callType. */
            public callType: E2E.Message.CallLogMessage.CallType;

            /** CallLogMessage participants. */
            public participants: E2E.Message.CallLogMessage.ICallParticipant[];

            /**
             * Creates a new CallLogMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CallLogMessage instance
             */
            public static create(properties?: E2E.Message.ICallLogMessage): E2E.Message.CallLogMessage;

            /**
             * Encodes the specified CallLogMessage message. Does not implicitly {@link E2E.Message.CallLogMessage.verify|verify} messages.
             * @param message CallLogMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ICallLogMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CallLogMessage message, length delimited. Does not implicitly {@link E2E.Message.CallLogMessage.verify|verify} messages.
             * @param message CallLogMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ICallLogMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CallLogMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CallLogMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.CallLogMessage;

            /**
             * Decodes a CallLogMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CallLogMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.CallLogMessage;

            /**
             * Verifies a CallLogMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CallLogMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CallLogMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.CallLogMessage;

            /**
             * Creates a plain object from a CallLogMessage message. Also converts values to other types if specified.
             * @param message CallLogMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.CallLogMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CallLogMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CallLogMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace CallLogMessage {

            /** CallOutcome enum. */
            enum CallOutcome {
                CONNECTED = 0,
                MISSED = 1,
                FAILED = 2,
                REJECTED = 3,
                ACCEPTED_ELSEWHERE = 4,
                ONGOING = 5,
                SILENCED_BY_DND = 6,
                SILENCED_UNKNOWN_CALLER = 7
            }

            /** Properties of a CallParticipant. */
            interface ICallParticipant {

                /** CallParticipant jid */
                jid?: (string|null);

                /** CallParticipant callOutcome */
                callOutcome?: (E2E.Message.CallLogMessage.CallOutcome|null);
            }

            /** Represents a CallParticipant. */
            class CallParticipant implements ICallParticipant {

                /**
                 * Constructs a new CallParticipant.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.CallLogMessage.ICallParticipant);

                /** CallParticipant jid. */
                public jid: string;

                /** CallParticipant callOutcome. */
                public callOutcome: E2E.Message.CallLogMessage.CallOutcome;

                /**
                 * Creates a new CallParticipant instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns CallParticipant instance
                 */
                public static create(properties?: E2E.Message.CallLogMessage.ICallParticipant): E2E.Message.CallLogMessage.CallParticipant;

                /**
                 * Encodes the specified CallParticipant message. Does not implicitly {@link E2E.Message.CallLogMessage.CallParticipant.verify|verify} messages.
                 * @param message CallParticipant message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.CallLogMessage.ICallParticipant, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified CallParticipant message, length delimited. Does not implicitly {@link E2E.Message.CallLogMessage.CallParticipant.verify|verify} messages.
                 * @param message CallParticipant message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.CallLogMessage.ICallParticipant, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a CallParticipant message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns CallParticipant
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.CallLogMessage.CallParticipant;

                /**
                 * Decodes a CallParticipant message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns CallParticipant
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.CallLogMessage.CallParticipant;

                /**
                 * Verifies a CallParticipant message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a CallParticipant message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns CallParticipant
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.CallLogMessage.CallParticipant;

                /**
                 * Creates a plain object from a CallParticipant message. Also converts values to other types if specified.
                 * @param message CallParticipant
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.CallLogMessage.CallParticipant, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this CallParticipant to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for CallParticipant
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** CallType enum. */
            enum CallType {
                REGULAR = 0,
                SCHEDULED_CALL = 1,
                VOICE_CHAT = 2
            }
        }

        /** Properties of a CancelPaymentRequestMessage. */
        interface ICancelPaymentRequestMessage {

            /** CancelPaymentRequestMessage key */
            key?: (Protocol.IMessageKey|null);
        }

        /** Represents a CancelPaymentRequestMessage. */
        class CancelPaymentRequestMessage implements ICancelPaymentRequestMessage {

            /**
             * Constructs a new CancelPaymentRequestMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ICancelPaymentRequestMessage);

            /** CancelPaymentRequestMessage key. */
            public key?: (Protocol.IMessageKey|null);

            /**
             * Creates a new CancelPaymentRequestMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CancelPaymentRequestMessage instance
             */
            public static create(properties?: E2E.Message.ICancelPaymentRequestMessage): E2E.Message.CancelPaymentRequestMessage;

            /**
             * Encodes the specified CancelPaymentRequestMessage message. Does not implicitly {@link E2E.Message.CancelPaymentRequestMessage.verify|verify} messages.
             * @param message CancelPaymentRequestMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ICancelPaymentRequestMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CancelPaymentRequestMessage message, length delimited. Does not implicitly {@link E2E.Message.CancelPaymentRequestMessage.verify|verify} messages.
             * @param message CancelPaymentRequestMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ICancelPaymentRequestMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CancelPaymentRequestMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CancelPaymentRequestMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.CancelPaymentRequestMessage;

            /**
             * Decodes a CancelPaymentRequestMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CancelPaymentRequestMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.CancelPaymentRequestMessage;

            /**
             * Verifies a CancelPaymentRequestMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CancelPaymentRequestMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CancelPaymentRequestMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.CancelPaymentRequestMessage;

            /**
             * Creates a plain object from a CancelPaymentRequestMessage message. Also converts values to other types if specified.
             * @param message CancelPaymentRequestMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.CancelPaymentRequestMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CancelPaymentRequestMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CancelPaymentRequestMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a Chat. */
        interface IChat {

            /** Chat displayName */
            displayName?: (string|null);

            /** Chat id */
            id?: (string|null);
        }

        /** Represents a Chat. */
        class Chat implements IChat {

            /**
             * Constructs a new Chat.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IChat);

            /** Chat displayName. */
            public displayName: string;

            /** Chat id. */
            public id: string;

            /**
             * Creates a new Chat instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Chat instance
             */
            public static create(properties?: E2E.Message.IChat): E2E.Message.Chat;

            /**
             * Encodes the specified Chat message. Does not implicitly {@link E2E.Message.Chat.verify|verify} messages.
             * @param message Chat message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IChat, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Chat message, length delimited. Does not implicitly {@link E2E.Message.Chat.verify|verify} messages.
             * @param message Chat message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IChat, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a Chat message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Chat
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.Chat;

            /**
             * Decodes a Chat message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Chat
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.Chat;

            /**
             * Verifies a Chat message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a Chat message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Chat
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.Chat;

            /**
             * Creates a plain object from a Chat message. Also converts values to other types if specified.
             * @param message Chat
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.Chat, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Chat to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Chat
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a CloudAPIThreadControlNotification. */
        interface ICloudAPIThreadControlNotification {

            /** CloudAPIThreadControlNotification status */
            status?: (E2E.Message.CloudAPIThreadControlNotification.CloudAPIThreadControl|null);

            /** CloudAPIThreadControlNotification senderNotificationTimestampMs */
            senderNotificationTimestampMs?: (number|Long|null);

            /** CloudAPIThreadControlNotification consumerLid */
            consumerLid?: (string|null);

            /** CloudAPIThreadControlNotification consumerPhoneNumber */
            consumerPhoneNumber?: (string|null);

            /** CloudAPIThreadControlNotification notificationContent */
            notificationContent?: (E2E.Message.CloudAPIThreadControlNotification.ICloudAPIThreadControlNotificationContent|null);

            /** CloudAPIThreadControlNotification shouldSuppressNotification */
            shouldSuppressNotification?: (boolean|null);
        }

        /** Represents a CloudAPIThreadControlNotification. */
        class CloudAPIThreadControlNotification implements ICloudAPIThreadControlNotification {

            /**
             * Constructs a new CloudAPIThreadControlNotification.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ICloudAPIThreadControlNotification);

            /** CloudAPIThreadControlNotification status. */
            public status: E2E.Message.CloudAPIThreadControlNotification.CloudAPIThreadControl;

            /** CloudAPIThreadControlNotification senderNotificationTimestampMs. */
            public senderNotificationTimestampMs: (number|Long);

            /** CloudAPIThreadControlNotification consumerLid. */
            public consumerLid: string;

            /** CloudAPIThreadControlNotification consumerPhoneNumber. */
            public consumerPhoneNumber: string;

            /** CloudAPIThreadControlNotification notificationContent. */
            public notificationContent?: (E2E.Message.CloudAPIThreadControlNotification.ICloudAPIThreadControlNotificationContent|null);

            /** CloudAPIThreadControlNotification shouldSuppressNotification. */
            public shouldSuppressNotification: boolean;

            /**
             * Creates a new CloudAPIThreadControlNotification instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CloudAPIThreadControlNotification instance
             */
            public static create(properties?: E2E.Message.ICloudAPIThreadControlNotification): E2E.Message.CloudAPIThreadControlNotification;

            /**
             * Encodes the specified CloudAPIThreadControlNotification message. Does not implicitly {@link E2E.Message.CloudAPIThreadControlNotification.verify|verify} messages.
             * @param message CloudAPIThreadControlNotification message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ICloudAPIThreadControlNotification, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CloudAPIThreadControlNotification message, length delimited. Does not implicitly {@link E2E.Message.CloudAPIThreadControlNotification.verify|verify} messages.
             * @param message CloudAPIThreadControlNotification message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ICloudAPIThreadControlNotification, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CloudAPIThreadControlNotification message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CloudAPIThreadControlNotification
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.CloudAPIThreadControlNotification;

            /**
             * Decodes a CloudAPIThreadControlNotification message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CloudAPIThreadControlNotification
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.CloudAPIThreadControlNotification;

            /**
             * Verifies a CloudAPIThreadControlNotification message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CloudAPIThreadControlNotification message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CloudAPIThreadControlNotification
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.CloudAPIThreadControlNotification;

            /**
             * Creates a plain object from a CloudAPIThreadControlNotification message. Also converts values to other types if specified.
             * @param message CloudAPIThreadControlNotification
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.CloudAPIThreadControlNotification, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CloudAPIThreadControlNotification to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CloudAPIThreadControlNotification
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace CloudAPIThreadControlNotification {

            /** CloudAPIThreadControl enum. */
            enum CloudAPIThreadControl {
                UNKNOWN = 0,
                CONTROL_PASSED = 1,
                CONTROL_TAKEN = 2
            }

            /** Properties of a CloudAPIThreadControlNotificationContent. */
            interface ICloudAPIThreadControlNotificationContent {

                /** CloudAPIThreadControlNotificationContent handoffNotificationText */
                handoffNotificationText?: (string|null);

                /** CloudAPIThreadControlNotificationContent extraJson */
                extraJson?: (string|null);
            }

            /** Represents a CloudAPIThreadControlNotificationContent. */
            class CloudAPIThreadControlNotificationContent implements ICloudAPIThreadControlNotificationContent {

                /**
                 * Constructs a new CloudAPIThreadControlNotificationContent.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.CloudAPIThreadControlNotification.ICloudAPIThreadControlNotificationContent);

                /** CloudAPIThreadControlNotificationContent handoffNotificationText. */
                public handoffNotificationText: string;

                /** CloudAPIThreadControlNotificationContent extraJson. */
                public extraJson: string;

                /**
                 * Creates a new CloudAPIThreadControlNotificationContent instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns CloudAPIThreadControlNotificationContent instance
                 */
                public static create(properties?: E2E.Message.CloudAPIThreadControlNotification.ICloudAPIThreadControlNotificationContent): E2E.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent;

                /**
                 * Encodes the specified CloudAPIThreadControlNotificationContent message. Does not implicitly {@link E2E.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent.verify|verify} messages.
                 * @param message CloudAPIThreadControlNotificationContent message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.CloudAPIThreadControlNotification.ICloudAPIThreadControlNotificationContent, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified CloudAPIThreadControlNotificationContent message, length delimited. Does not implicitly {@link E2E.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent.verify|verify} messages.
                 * @param message CloudAPIThreadControlNotificationContent message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.CloudAPIThreadControlNotification.ICloudAPIThreadControlNotificationContent, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a CloudAPIThreadControlNotificationContent message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns CloudAPIThreadControlNotificationContent
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent;

                /**
                 * Decodes a CloudAPIThreadControlNotificationContent message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns CloudAPIThreadControlNotificationContent
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent;

                /**
                 * Verifies a CloudAPIThreadControlNotificationContent message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a CloudAPIThreadControlNotificationContent message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns CloudAPIThreadControlNotificationContent
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent;

                /**
                 * Creates a plain object from a CloudAPIThreadControlNotificationContent message. Also converts values to other types if specified.
                 * @param message CloudAPIThreadControlNotificationContent
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this CloudAPIThreadControlNotificationContent to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for CloudAPIThreadControlNotificationContent
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a CommentMessage. */
        interface ICommentMessage {

            /** CommentMessage message */
            message?: (E2E.IMessage|null);

            /** CommentMessage targetMessageKey */
            targetMessageKey?: (Protocol.IMessageKey|null);
        }

        /** Represents a CommentMessage. */
        class CommentMessage implements ICommentMessage {

            /**
             * Constructs a new CommentMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ICommentMessage);

            /** CommentMessage message. */
            public message?: (E2E.IMessage|null);

            /** CommentMessage targetMessageKey. */
            public targetMessageKey?: (Protocol.IMessageKey|null);

            /**
             * Creates a new CommentMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CommentMessage instance
             */
            public static create(properties?: E2E.Message.ICommentMessage): E2E.Message.CommentMessage;

            /**
             * Encodes the specified CommentMessage message. Does not implicitly {@link E2E.Message.CommentMessage.verify|verify} messages.
             * @param message CommentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ICommentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CommentMessage message, length delimited. Does not implicitly {@link E2E.Message.CommentMessage.verify|verify} messages.
             * @param message CommentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ICommentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CommentMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CommentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.CommentMessage;

            /**
             * Decodes a CommentMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CommentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.CommentMessage;

            /**
             * Verifies a CommentMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CommentMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CommentMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.CommentMessage;

            /**
             * Creates a plain object from a CommentMessage message. Also converts values to other types if specified.
             * @param message CommentMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.CommentMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CommentMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CommentMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ContactMessage. */
        interface IContactMessage {

            /** ContactMessage displayName */
            displayName?: (string|null);

            /** ContactMessage vcard */
            vcard?: (string|null);

            /** ContactMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);
        }

        /** Represents a ContactMessage. */
        class ContactMessage implements IContactMessage {

            /**
             * Constructs a new ContactMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IContactMessage);

            /** ContactMessage displayName. */
            public displayName: string;

            /** ContactMessage vcard. */
            public vcard: string;

            /** ContactMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /**
             * Creates a new ContactMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ContactMessage instance
             */
            public static create(properties?: E2E.Message.IContactMessage): E2E.Message.ContactMessage;

            /**
             * Encodes the specified ContactMessage message. Does not implicitly {@link E2E.Message.ContactMessage.verify|verify} messages.
             * @param message ContactMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IContactMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ContactMessage message, length delimited. Does not implicitly {@link E2E.Message.ContactMessage.verify|verify} messages.
             * @param message ContactMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IContactMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ContactMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ContactMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ContactMessage;

            /**
             * Decodes a ContactMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ContactMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ContactMessage;

            /**
             * Verifies a ContactMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ContactMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ContactMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ContactMessage;

            /**
             * Creates a plain object from a ContactMessage message. Also converts values to other types if specified.
             * @param message ContactMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ContactMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ContactMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ContactMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ContactsArrayMessage. */
        interface IContactsArrayMessage {

            /** ContactsArrayMessage displayName */
            displayName?: (string|null);

            /** ContactsArrayMessage contacts */
            contacts?: (E2E.Message.IContactMessage[]|null);

            /** ContactsArrayMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);
        }

        /** Represents a ContactsArrayMessage. */
        class ContactsArrayMessage implements IContactsArrayMessage {

            /**
             * Constructs a new ContactsArrayMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IContactsArrayMessage);

            /** ContactsArrayMessage displayName. */
            public displayName: string;

            /** ContactsArrayMessage contacts. */
            public contacts: E2E.Message.IContactMessage[];

            /** ContactsArrayMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /**
             * Creates a new ContactsArrayMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ContactsArrayMessage instance
             */
            public static create(properties?: E2E.Message.IContactsArrayMessage): E2E.Message.ContactsArrayMessage;

            /**
             * Encodes the specified ContactsArrayMessage message. Does not implicitly {@link E2E.Message.ContactsArrayMessage.verify|verify} messages.
             * @param message ContactsArrayMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IContactsArrayMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ContactsArrayMessage message, length delimited. Does not implicitly {@link E2E.Message.ContactsArrayMessage.verify|verify} messages.
             * @param message ContactsArrayMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IContactsArrayMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ContactsArrayMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ContactsArrayMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ContactsArrayMessage;

            /**
             * Decodes a ContactsArrayMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ContactsArrayMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ContactsArrayMessage;

            /**
             * Verifies a ContactsArrayMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ContactsArrayMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ContactsArrayMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ContactsArrayMessage;

            /**
             * Creates a plain object from a ContactsArrayMessage message. Also converts values to other types if specified.
             * @param message ContactsArrayMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ContactsArrayMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ContactsArrayMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ContactsArrayMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a DeclinePaymentRequestMessage. */
        interface IDeclinePaymentRequestMessage {

            /** DeclinePaymentRequestMessage key */
            key?: (Protocol.IMessageKey|null);
        }

        /** Represents a DeclinePaymentRequestMessage. */
        class DeclinePaymentRequestMessage implements IDeclinePaymentRequestMessage {

            /**
             * Constructs a new DeclinePaymentRequestMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IDeclinePaymentRequestMessage);

            /** DeclinePaymentRequestMessage key. */
            public key?: (Protocol.IMessageKey|null);

            /**
             * Creates a new DeclinePaymentRequestMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns DeclinePaymentRequestMessage instance
             */
            public static create(properties?: E2E.Message.IDeclinePaymentRequestMessage): E2E.Message.DeclinePaymentRequestMessage;

            /**
             * Encodes the specified DeclinePaymentRequestMessage message. Does not implicitly {@link E2E.Message.DeclinePaymentRequestMessage.verify|verify} messages.
             * @param message DeclinePaymentRequestMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IDeclinePaymentRequestMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified DeclinePaymentRequestMessage message, length delimited. Does not implicitly {@link E2E.Message.DeclinePaymentRequestMessage.verify|verify} messages.
             * @param message DeclinePaymentRequestMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IDeclinePaymentRequestMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a DeclinePaymentRequestMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns DeclinePaymentRequestMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.DeclinePaymentRequestMessage;

            /**
             * Decodes a DeclinePaymentRequestMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns DeclinePaymentRequestMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.DeclinePaymentRequestMessage;

            /**
             * Verifies a DeclinePaymentRequestMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a DeclinePaymentRequestMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns DeclinePaymentRequestMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.DeclinePaymentRequestMessage;

            /**
             * Creates a plain object from a DeclinePaymentRequestMessage message. Also converts values to other types if specified.
             * @param message DeclinePaymentRequestMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.DeclinePaymentRequestMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this DeclinePaymentRequestMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for DeclinePaymentRequestMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a DeviceSentMessage. */
        interface IDeviceSentMessage {

            /** DeviceSentMessage destinationJid */
            destinationJid?: (string|null);

            /** DeviceSentMessage message */
            message?: (E2E.IMessage|null);

            /** DeviceSentMessage phash */
            phash?: (string|null);
        }

        /** Represents a DeviceSentMessage. */
        class DeviceSentMessage implements IDeviceSentMessage {

            /**
             * Constructs a new DeviceSentMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IDeviceSentMessage);

            /** DeviceSentMessage destinationJid. */
            public destinationJid: string;

            /** DeviceSentMessage message. */
            public message?: (E2E.IMessage|null);

            /** DeviceSentMessage phash. */
            public phash: string;

            /**
             * Creates a new DeviceSentMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns DeviceSentMessage instance
             */
            public static create(properties?: E2E.Message.IDeviceSentMessage): E2E.Message.DeviceSentMessage;

            /**
             * Encodes the specified DeviceSentMessage message. Does not implicitly {@link E2E.Message.DeviceSentMessage.verify|verify} messages.
             * @param message DeviceSentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IDeviceSentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified DeviceSentMessage message, length delimited. Does not implicitly {@link E2E.Message.DeviceSentMessage.verify|verify} messages.
             * @param message DeviceSentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IDeviceSentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a DeviceSentMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns DeviceSentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.DeviceSentMessage;

            /**
             * Decodes a DeviceSentMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns DeviceSentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.DeviceSentMessage;

            /**
             * Verifies a DeviceSentMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a DeviceSentMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns DeviceSentMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.DeviceSentMessage;

            /**
             * Creates a plain object from a DeviceSentMessage message. Also converts values to other types if specified.
             * @param message DeviceSentMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.DeviceSentMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this DeviceSentMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for DeviceSentMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a DocumentMessage. */
        interface IDocumentMessage {

            /** DocumentMessage url */
            url?: (string|null);

            /** DocumentMessage mimetype */
            mimetype?: (string|null);

            /** DocumentMessage title */
            title?: (string|null);

            /** DocumentMessage fileSha256 */
            fileSha256?: (Uint8Array|null);

            /** DocumentMessage fileLength */
            fileLength?: (number|Long|null);

            /** DocumentMessage pageCount */
            pageCount?: (number|null);

            /** DocumentMessage mediaKey */
            mediaKey?: (Uint8Array|null);

            /** DocumentMessage fileName */
            fileName?: (string|null);

            /** DocumentMessage fileEncSha256 */
            fileEncSha256?: (Uint8Array|null);

            /** DocumentMessage directPath */
            directPath?: (string|null);

            /** DocumentMessage mediaKeyTimestamp */
            mediaKeyTimestamp?: (number|Long|null);

            /** DocumentMessage contactVcard */
            contactVcard?: (boolean|null);

            /** DocumentMessage thumbnailDirectPath */
            thumbnailDirectPath?: (string|null);

            /** DocumentMessage thumbnailSha256 */
            thumbnailSha256?: (Uint8Array|null);

            /** DocumentMessage thumbnailEncSha256 */
            thumbnailEncSha256?: (Uint8Array|null);

            /** DocumentMessage jpegThumbnail */
            jpegThumbnail?: (Uint8Array|null);

            /** DocumentMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** DocumentMessage thumbnailHeight */
            thumbnailHeight?: (number|null);

            /** DocumentMessage thumbnailWidth */
            thumbnailWidth?: (number|null);

            /** DocumentMessage caption */
            caption?: (string|null);

            /** DocumentMessage accessibilityLabel */
            accessibilityLabel?: (string|null);

            /** DocumentMessage mediaKeyDomain */
            mediaKeyDomain?: (E2E.Message.MediaKeyDomain|null);
        }

        /** Represents a DocumentMessage. */
        class DocumentMessage implements IDocumentMessage {

            /**
             * Constructs a new DocumentMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IDocumentMessage);

            /** DocumentMessage url. */
            public url: string;

            /** DocumentMessage mimetype. */
            public mimetype: string;

            /** DocumentMessage title. */
            public title: string;

            /** DocumentMessage fileSha256. */
            public fileSha256: Uint8Array;

            /** DocumentMessage fileLength. */
            public fileLength: (number|Long);

            /** DocumentMessage pageCount. */
            public pageCount: number;

            /** DocumentMessage mediaKey. */
            public mediaKey: Uint8Array;

            /** DocumentMessage fileName. */
            public fileName: string;

            /** DocumentMessage fileEncSha256. */
            public fileEncSha256: Uint8Array;

            /** DocumentMessage directPath. */
            public directPath: string;

            /** DocumentMessage mediaKeyTimestamp. */
            public mediaKeyTimestamp: (number|Long);

            /** DocumentMessage contactVcard. */
            public contactVcard: boolean;

            /** DocumentMessage thumbnailDirectPath. */
            public thumbnailDirectPath: string;

            /** DocumentMessage thumbnailSha256. */
            public thumbnailSha256: Uint8Array;

            /** DocumentMessage thumbnailEncSha256. */
            public thumbnailEncSha256: Uint8Array;

            /** DocumentMessage jpegThumbnail. */
            public jpegThumbnail: Uint8Array;

            /** DocumentMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** DocumentMessage thumbnailHeight. */
            public thumbnailHeight: number;

            /** DocumentMessage thumbnailWidth. */
            public thumbnailWidth: number;

            /** DocumentMessage caption. */
            public caption: string;

            /** DocumentMessage accessibilityLabel. */
            public accessibilityLabel: string;

            /** DocumentMessage mediaKeyDomain. */
            public mediaKeyDomain: E2E.Message.MediaKeyDomain;

            /**
             * Creates a new DocumentMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns DocumentMessage instance
             */
            public static create(properties?: E2E.Message.IDocumentMessage): E2E.Message.DocumentMessage;

            /**
             * Encodes the specified DocumentMessage message. Does not implicitly {@link E2E.Message.DocumentMessage.verify|verify} messages.
             * @param message DocumentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IDocumentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified DocumentMessage message, length delimited. Does not implicitly {@link E2E.Message.DocumentMessage.verify|verify} messages.
             * @param message DocumentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IDocumentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a DocumentMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns DocumentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.DocumentMessage;

            /**
             * Decodes a DocumentMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns DocumentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.DocumentMessage;

            /**
             * Verifies a DocumentMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a DocumentMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns DocumentMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.DocumentMessage;

            /**
             * Creates a plain object from a DocumentMessage message. Also converts values to other types if specified.
             * @param message DocumentMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.DocumentMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this DocumentMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for DocumentMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an EncCommentMessage. */
        interface IEncCommentMessage {

            /** EncCommentMessage targetMessageKey */
            targetMessageKey?: (Protocol.IMessageKey|null);

            /** EncCommentMessage encPayload */
            encPayload?: (Uint8Array|null);

            /** EncCommentMessage encIv */
            encIv?: (Uint8Array|null);
        }

        /** Represents an EncCommentMessage. */
        class EncCommentMessage implements IEncCommentMessage {

            /**
             * Constructs a new EncCommentMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IEncCommentMessage);

            /** EncCommentMessage targetMessageKey. */
            public targetMessageKey?: (Protocol.IMessageKey|null);

            /** EncCommentMessage encPayload. */
            public encPayload: Uint8Array;

            /** EncCommentMessage encIv. */
            public encIv: Uint8Array;

            /**
             * Creates a new EncCommentMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns EncCommentMessage instance
             */
            public static create(properties?: E2E.Message.IEncCommentMessage): E2E.Message.EncCommentMessage;

            /**
             * Encodes the specified EncCommentMessage message. Does not implicitly {@link E2E.Message.EncCommentMessage.verify|verify} messages.
             * @param message EncCommentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IEncCommentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified EncCommentMessage message, length delimited. Does not implicitly {@link E2E.Message.EncCommentMessage.verify|verify} messages.
             * @param message EncCommentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IEncCommentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an EncCommentMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns EncCommentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.EncCommentMessage;

            /**
             * Decodes an EncCommentMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns EncCommentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.EncCommentMessage;

            /**
             * Verifies an EncCommentMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an EncCommentMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns EncCommentMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.EncCommentMessage;

            /**
             * Creates a plain object from an EncCommentMessage message. Also converts values to other types if specified.
             * @param message EncCommentMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.EncCommentMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this EncCommentMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for EncCommentMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an EncEventResponseMessage. */
        interface IEncEventResponseMessage {

            /** EncEventResponseMessage eventCreationMessageKey */
            eventCreationMessageKey?: (Protocol.IMessageKey|null);

            /** EncEventResponseMessage encPayload */
            encPayload?: (Uint8Array|null);

            /** EncEventResponseMessage encIv */
            encIv?: (Uint8Array|null);
        }

        /** Represents an EncEventResponseMessage. */
        class EncEventResponseMessage implements IEncEventResponseMessage {

            /**
             * Constructs a new EncEventResponseMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IEncEventResponseMessage);

            /** EncEventResponseMessage eventCreationMessageKey. */
            public eventCreationMessageKey?: (Protocol.IMessageKey|null);

            /** EncEventResponseMessage encPayload. */
            public encPayload: Uint8Array;

            /** EncEventResponseMessage encIv. */
            public encIv: Uint8Array;

            /**
             * Creates a new EncEventResponseMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns EncEventResponseMessage instance
             */
            public static create(properties?: E2E.Message.IEncEventResponseMessage): E2E.Message.EncEventResponseMessage;

            /**
             * Encodes the specified EncEventResponseMessage message. Does not implicitly {@link E2E.Message.EncEventResponseMessage.verify|verify} messages.
             * @param message EncEventResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IEncEventResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified EncEventResponseMessage message, length delimited. Does not implicitly {@link E2E.Message.EncEventResponseMessage.verify|verify} messages.
             * @param message EncEventResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IEncEventResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an EncEventResponseMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns EncEventResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.EncEventResponseMessage;

            /**
             * Decodes an EncEventResponseMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns EncEventResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.EncEventResponseMessage;

            /**
             * Verifies an EncEventResponseMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an EncEventResponseMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns EncEventResponseMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.EncEventResponseMessage;

            /**
             * Creates a plain object from an EncEventResponseMessage message. Also converts values to other types if specified.
             * @param message EncEventResponseMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.EncEventResponseMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this EncEventResponseMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for EncEventResponseMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an EncReactionMessage. */
        interface IEncReactionMessage {

            /** EncReactionMessage targetMessageKey */
            targetMessageKey?: (Protocol.IMessageKey|null);

            /** EncReactionMessage encPayload */
            encPayload?: (Uint8Array|null);

            /** EncReactionMessage encIv */
            encIv?: (Uint8Array|null);
        }

        /** Represents an EncReactionMessage. */
        class EncReactionMessage implements IEncReactionMessage {

            /**
             * Constructs a new EncReactionMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IEncReactionMessage);

            /** EncReactionMessage targetMessageKey. */
            public targetMessageKey?: (Protocol.IMessageKey|null);

            /** EncReactionMessage encPayload. */
            public encPayload: Uint8Array;

            /** EncReactionMessage encIv. */
            public encIv: Uint8Array;

            /**
             * Creates a new EncReactionMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns EncReactionMessage instance
             */
            public static create(properties?: E2E.Message.IEncReactionMessage): E2E.Message.EncReactionMessage;

            /**
             * Encodes the specified EncReactionMessage message. Does not implicitly {@link E2E.Message.EncReactionMessage.verify|verify} messages.
             * @param message EncReactionMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IEncReactionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified EncReactionMessage message, length delimited. Does not implicitly {@link E2E.Message.EncReactionMessage.verify|verify} messages.
             * @param message EncReactionMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IEncReactionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an EncReactionMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns EncReactionMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.EncReactionMessage;

            /**
             * Decodes an EncReactionMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns EncReactionMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.EncReactionMessage;

            /**
             * Verifies an EncReactionMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an EncReactionMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns EncReactionMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.EncReactionMessage;

            /**
             * Creates a plain object from an EncReactionMessage message. Also converts values to other types if specified.
             * @param message EncReactionMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.EncReactionMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this EncReactionMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for EncReactionMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an EventMessage. */
        interface IEventMessage {

            /** EventMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** EventMessage isCanceled */
            isCanceled?: (boolean|null);

            /** EventMessage name */
            name?: (string|null);

            /** EventMessage description */
            description?: (string|null);

            /** EventMessage location */
            location?: (E2E.Message.ILocationMessage|null);

            /** EventMessage joinLink */
            joinLink?: (string|null);

            /** EventMessage startTime */
            startTime?: (number|Long|null);

            /** EventMessage endTime */
            endTime?: (number|Long|null);

            /** EventMessage extraGuestsAllowed */
            extraGuestsAllowed?: (boolean|null);

            /** EventMessage isScheduleCall */
            isScheduleCall?: (boolean|null);
        }

        /** Represents an EventMessage. */
        class EventMessage implements IEventMessage {

            /**
             * Constructs a new EventMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IEventMessage);

            /** EventMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** EventMessage isCanceled. */
            public isCanceled: boolean;

            /** EventMessage name. */
            public name: string;

            /** EventMessage description. */
            public description: string;

            /** EventMessage location. */
            public location?: (E2E.Message.ILocationMessage|null);

            /** EventMessage joinLink. */
            public joinLink: string;

            /** EventMessage startTime. */
            public startTime: (number|Long);

            /** EventMessage endTime. */
            public endTime: (number|Long);

            /** EventMessage extraGuestsAllowed. */
            public extraGuestsAllowed: boolean;

            /** EventMessage isScheduleCall. */
            public isScheduleCall: boolean;

            /**
             * Creates a new EventMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns EventMessage instance
             */
            public static create(properties?: E2E.Message.IEventMessage): E2E.Message.EventMessage;

            /**
             * Encodes the specified EventMessage message. Does not implicitly {@link E2E.Message.EventMessage.verify|verify} messages.
             * @param message EventMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IEventMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified EventMessage message, length delimited. Does not implicitly {@link E2E.Message.EventMessage.verify|verify} messages.
             * @param message EventMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IEventMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an EventMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns EventMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.EventMessage;

            /**
             * Decodes an EventMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns EventMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.EventMessage;

            /**
             * Verifies an EventMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an EventMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns EventMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.EventMessage;

            /**
             * Creates a plain object from an EventMessage message. Also converts values to other types if specified.
             * @param message EventMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.EventMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this EventMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for EventMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an EventResponseMessage. */
        interface IEventResponseMessage {

            /** EventResponseMessage response */
            response?: (E2E.Message.EventResponseMessage.EventResponseType|null);

            /** EventResponseMessage timestampMs */
            timestampMs?: (number|Long|null);

            /** EventResponseMessage extraGuestCount */
            extraGuestCount?: (number|null);
        }

        /** Represents an EventResponseMessage. */
        class EventResponseMessage implements IEventResponseMessage {

            /**
             * Constructs a new EventResponseMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IEventResponseMessage);

            /** EventResponseMessage response. */
            public response: E2E.Message.EventResponseMessage.EventResponseType;

            /** EventResponseMessage timestampMs. */
            public timestampMs: (number|Long);

            /** EventResponseMessage extraGuestCount. */
            public extraGuestCount: number;

            /**
             * Creates a new EventResponseMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns EventResponseMessage instance
             */
            public static create(properties?: E2E.Message.IEventResponseMessage): E2E.Message.EventResponseMessage;

            /**
             * Encodes the specified EventResponseMessage message. Does not implicitly {@link E2E.Message.EventResponseMessage.verify|verify} messages.
             * @param message EventResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IEventResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified EventResponseMessage message, length delimited. Does not implicitly {@link E2E.Message.EventResponseMessage.verify|verify} messages.
             * @param message EventResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IEventResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an EventResponseMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns EventResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.EventResponseMessage;

            /**
             * Decodes an EventResponseMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns EventResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.EventResponseMessage;

            /**
             * Verifies an EventResponseMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an EventResponseMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns EventResponseMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.EventResponseMessage;

            /**
             * Creates a plain object from an EventResponseMessage message. Also converts values to other types if specified.
             * @param message EventResponseMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.EventResponseMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this EventResponseMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for EventResponseMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace EventResponseMessage {

            /** EventResponseType enum. */
            enum EventResponseType {
                UNKNOWN = 0,
                GOING = 1,
                NOT_GOING = 2,
                MAYBE = 3
            }
        }

        /** Properties of an ExtendedTextMessage. */
        interface IExtendedTextMessage {

            /** ExtendedTextMessage text */
            text?: (string|null);

            /** ExtendedTextMessage matchedText */
            matchedText?: (string|null);

            /** ExtendedTextMessage description */
            description?: (string|null);

            /** ExtendedTextMessage title */
            title?: (string|null);

            /** ExtendedTextMessage textArgb */
            textArgb?: (number|null);

            /** ExtendedTextMessage backgroundArgb */
            backgroundArgb?: (number|null);

            /** ExtendedTextMessage font */
            font?: (E2E.Message.ExtendedTextMessage.FontType|null);

            /** ExtendedTextMessage previewType */
            previewType?: (E2E.Message.ExtendedTextMessage.PreviewType|null);

            /** ExtendedTextMessage jpegThumbnail */
            jpegThumbnail?: (Uint8Array|null);

            /** ExtendedTextMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** ExtendedTextMessage doNotPlayInline */
            doNotPlayInline?: (boolean|null);

            /** ExtendedTextMessage thumbnailDirectPath */
            thumbnailDirectPath?: (string|null);

            /** ExtendedTextMessage thumbnailSha256 */
            thumbnailSha256?: (Uint8Array|null);

            /** ExtendedTextMessage thumbnailEncSha256 */
            thumbnailEncSha256?: (Uint8Array|null);

            /** ExtendedTextMessage mediaKey */
            mediaKey?: (Uint8Array|null);

            /** ExtendedTextMessage mediaKeyTimestamp */
            mediaKeyTimestamp?: (number|Long|null);

            /** ExtendedTextMessage thumbnailHeight */
            thumbnailHeight?: (number|null);

            /** ExtendedTextMessage thumbnailWidth */
            thumbnailWidth?: (number|null);

            /** ExtendedTextMessage inviteLinkGroupType */
            inviteLinkGroupType?: (E2E.Message.ExtendedTextMessage.InviteLinkGroupType|null);

            /** ExtendedTextMessage inviteLinkParentGroupSubjectV2 */
            inviteLinkParentGroupSubjectV2?: (string|null);

            /** ExtendedTextMessage inviteLinkParentGroupThumbnailV2 */
            inviteLinkParentGroupThumbnailV2?: (Uint8Array|null);

            /** ExtendedTextMessage inviteLinkGroupTypeV2 */
            inviteLinkGroupTypeV2?: (E2E.Message.ExtendedTextMessage.InviteLinkGroupType|null);

            /** ExtendedTextMessage viewOnce */
            viewOnce?: (boolean|null);

            /** ExtendedTextMessage videoHeight */
            videoHeight?: (number|null);

            /** ExtendedTextMessage videoWidth */
            videoWidth?: (number|null);

            /** ExtendedTextMessage faviconMMSMetadata */
            faviconMMSMetadata?: (E2E.Message.IMMSThumbnailMetadata|null);

            /** ExtendedTextMessage linkPreviewMetadata */
            linkPreviewMetadata?: (E2E.Message.ILinkPreviewMetadata|null);

            /** ExtendedTextMessage paymentLinkMetadata */
            paymentLinkMetadata?: (E2E.Message.IPaymentLinkMetadata|null);

            /** ExtendedTextMessage endCardTiles */
            endCardTiles?: (E2E.Message.IVideoEndCard[]|null);

            /** ExtendedTextMessage videoContentUrl */
            videoContentUrl?: (string|null);

            /** ExtendedTextMessage musicMetadata */
            musicMetadata?: (E2E.IEmbeddedMusic|null);
        }

        /** Represents an ExtendedTextMessage. */
        class ExtendedTextMessage implements IExtendedTextMessage {

            /**
             * Constructs a new ExtendedTextMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IExtendedTextMessage);

            /** ExtendedTextMessage text. */
            public text: string;

            /** ExtendedTextMessage matchedText. */
            public matchedText: string;

            /** ExtendedTextMessage description. */
            public description: string;

            /** ExtendedTextMessage title. */
            public title: string;

            /** ExtendedTextMessage textArgb. */
            public textArgb: number;

            /** ExtendedTextMessage backgroundArgb. */
            public backgroundArgb: number;

            /** ExtendedTextMessage font. */
            public font: E2E.Message.ExtendedTextMessage.FontType;

            /** ExtendedTextMessage previewType. */
            public previewType: E2E.Message.ExtendedTextMessage.PreviewType;

            /** ExtendedTextMessage jpegThumbnail. */
            public jpegThumbnail: Uint8Array;

            /** ExtendedTextMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** ExtendedTextMessage doNotPlayInline. */
            public doNotPlayInline: boolean;

            /** ExtendedTextMessage thumbnailDirectPath. */
            public thumbnailDirectPath: string;

            /** ExtendedTextMessage thumbnailSha256. */
            public thumbnailSha256: Uint8Array;

            /** ExtendedTextMessage thumbnailEncSha256. */
            public thumbnailEncSha256: Uint8Array;

            /** ExtendedTextMessage mediaKey. */
            public mediaKey: Uint8Array;

            /** ExtendedTextMessage mediaKeyTimestamp. */
            public mediaKeyTimestamp: (number|Long);

            /** ExtendedTextMessage thumbnailHeight. */
            public thumbnailHeight: number;

            /** ExtendedTextMessage thumbnailWidth. */
            public thumbnailWidth: number;

            /** ExtendedTextMessage inviteLinkGroupType. */
            public inviteLinkGroupType: E2E.Message.ExtendedTextMessage.InviteLinkGroupType;

            /** ExtendedTextMessage inviteLinkParentGroupSubjectV2. */
            public inviteLinkParentGroupSubjectV2: string;

            /** ExtendedTextMessage inviteLinkParentGroupThumbnailV2. */
            public inviteLinkParentGroupThumbnailV2: Uint8Array;

            /** ExtendedTextMessage inviteLinkGroupTypeV2. */
            public inviteLinkGroupTypeV2: E2E.Message.ExtendedTextMessage.InviteLinkGroupType;

            /** ExtendedTextMessage viewOnce. */
            public viewOnce: boolean;

            /** ExtendedTextMessage videoHeight. */
            public videoHeight: number;

            /** ExtendedTextMessage videoWidth. */
            public videoWidth: number;

            /** ExtendedTextMessage faviconMMSMetadata. */
            public faviconMMSMetadata?: (E2E.Message.IMMSThumbnailMetadata|null);

            /** ExtendedTextMessage linkPreviewMetadata. */
            public linkPreviewMetadata?: (E2E.Message.ILinkPreviewMetadata|null);

            /** ExtendedTextMessage paymentLinkMetadata. */
            public paymentLinkMetadata?: (E2E.Message.IPaymentLinkMetadata|null);

            /** ExtendedTextMessage endCardTiles. */
            public endCardTiles: E2E.Message.IVideoEndCard[];

            /** ExtendedTextMessage videoContentUrl. */
            public videoContentUrl: string;

            /** ExtendedTextMessage musicMetadata. */
            public musicMetadata?: (E2E.IEmbeddedMusic|null);

            /**
             * Creates a new ExtendedTextMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ExtendedTextMessage instance
             */
            public static create(properties?: E2E.Message.IExtendedTextMessage): E2E.Message.ExtendedTextMessage;

            /**
             * Encodes the specified ExtendedTextMessage message. Does not implicitly {@link E2E.Message.ExtendedTextMessage.verify|verify} messages.
             * @param message ExtendedTextMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IExtendedTextMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ExtendedTextMessage message, length delimited. Does not implicitly {@link E2E.Message.ExtendedTextMessage.verify|verify} messages.
             * @param message ExtendedTextMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IExtendedTextMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an ExtendedTextMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ExtendedTextMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ExtendedTextMessage;

            /**
             * Decodes an ExtendedTextMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ExtendedTextMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ExtendedTextMessage;

            /**
             * Verifies an ExtendedTextMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an ExtendedTextMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ExtendedTextMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ExtendedTextMessage;

            /**
             * Creates a plain object from an ExtendedTextMessage message. Also converts values to other types if specified.
             * @param message ExtendedTextMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ExtendedTextMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ExtendedTextMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ExtendedTextMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ExtendedTextMessage {

            /** FontType enum. */
            enum FontType {
                SYSTEM = 0,
                SYSTEM_TEXT = 1,
                FB_SCRIPT = 2,
                SYSTEM_BOLD = 6,
                MORNINGBREEZE_REGULAR = 7,
                CALISTOGA_REGULAR = 8,
                EXO2_EXTRABOLD = 9,
                COURIERPRIME_BOLD = 10
            }

            /** InviteLinkGroupType enum. */
            enum InviteLinkGroupType {
                DEFAULT = 0,
                PARENT = 1,
                SUB = 2,
                DEFAULT_SUB = 3
            }

            /** PreviewType enum. */
            enum PreviewType {
                NONE = 0,
                VIDEO = 1,
                PLACEHOLDER = 4,
                IMAGE = 5,
                PAYMENT_LINKS = 6,
                PROFILE = 7
            }
        }

        /** Properties of a FullHistorySyncOnDemandRequestMetadata. */
        interface IFullHistorySyncOnDemandRequestMetadata {

            /** FullHistorySyncOnDemandRequestMetadata requestId */
            requestId?: (string|null);
        }

        /** Represents a FullHistorySyncOnDemandRequestMetadata. */
        class FullHistorySyncOnDemandRequestMetadata implements IFullHistorySyncOnDemandRequestMetadata {

            /**
             * Constructs a new FullHistorySyncOnDemandRequestMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IFullHistorySyncOnDemandRequestMetadata);

            /** FullHistorySyncOnDemandRequestMetadata requestId. */
            public requestId: string;

            /**
             * Creates a new FullHistorySyncOnDemandRequestMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FullHistorySyncOnDemandRequestMetadata instance
             */
            public static create(properties?: E2E.Message.IFullHistorySyncOnDemandRequestMetadata): E2E.Message.FullHistorySyncOnDemandRequestMetadata;

            /**
             * Encodes the specified FullHistorySyncOnDemandRequestMetadata message. Does not implicitly {@link E2E.Message.FullHistorySyncOnDemandRequestMetadata.verify|verify} messages.
             * @param message FullHistorySyncOnDemandRequestMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IFullHistorySyncOnDemandRequestMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FullHistorySyncOnDemandRequestMetadata message, length delimited. Does not implicitly {@link E2E.Message.FullHistorySyncOnDemandRequestMetadata.verify|verify} messages.
             * @param message FullHistorySyncOnDemandRequestMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IFullHistorySyncOnDemandRequestMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FullHistorySyncOnDemandRequestMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FullHistorySyncOnDemandRequestMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.FullHistorySyncOnDemandRequestMetadata;

            /**
             * Decodes a FullHistorySyncOnDemandRequestMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FullHistorySyncOnDemandRequestMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.FullHistorySyncOnDemandRequestMetadata;

            /**
             * Verifies a FullHistorySyncOnDemandRequestMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FullHistorySyncOnDemandRequestMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FullHistorySyncOnDemandRequestMetadata
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.FullHistorySyncOnDemandRequestMetadata;

            /**
             * Creates a plain object from a FullHistorySyncOnDemandRequestMetadata message. Also converts values to other types if specified.
             * @param message FullHistorySyncOnDemandRequestMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.FullHistorySyncOnDemandRequestMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FullHistorySyncOnDemandRequestMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FullHistorySyncOnDemandRequestMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a FutureProofMessage. */
        interface IFutureProofMessage {

            /** FutureProofMessage message */
            message?: (E2E.IMessage|null);
        }

        /** Represents a FutureProofMessage. */
        class FutureProofMessage implements IFutureProofMessage {

            /**
             * Constructs a new FutureProofMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IFutureProofMessage);

            /** FutureProofMessage message. */
            public message?: (E2E.IMessage|null);

            /**
             * Creates a new FutureProofMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FutureProofMessage instance
             */
            public static create(properties?: E2E.Message.IFutureProofMessage): E2E.Message.FutureProofMessage;

            /**
             * Encodes the specified FutureProofMessage message. Does not implicitly {@link E2E.Message.FutureProofMessage.verify|verify} messages.
             * @param message FutureProofMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IFutureProofMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FutureProofMessage message, length delimited. Does not implicitly {@link E2E.Message.FutureProofMessage.verify|verify} messages.
             * @param message FutureProofMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IFutureProofMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FutureProofMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FutureProofMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.FutureProofMessage;

            /**
             * Decodes a FutureProofMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FutureProofMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.FutureProofMessage;

            /**
             * Verifies a FutureProofMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FutureProofMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FutureProofMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.FutureProofMessage;

            /**
             * Creates a plain object from a FutureProofMessage message. Also converts values to other types if specified.
             * @param message FutureProofMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.FutureProofMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FutureProofMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FutureProofMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a GroupInviteMessage. */
        interface IGroupInviteMessage {

            /** GroupInviteMessage groupJid */
            groupJid?: (string|null);

            /** GroupInviteMessage inviteCode */
            inviteCode?: (string|null);

            /** GroupInviteMessage inviteExpiration */
            inviteExpiration?: (number|Long|null);

            /** GroupInviteMessage groupName */
            groupName?: (string|null);

            /** GroupInviteMessage jpegThumbnail */
            jpegThumbnail?: (Uint8Array|null);

            /** GroupInviteMessage caption */
            caption?: (string|null);

            /** GroupInviteMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** GroupInviteMessage groupType */
            groupType?: (E2E.Message.GroupInviteMessage.GroupType|null);
        }

        /** Represents a GroupInviteMessage. */
        class GroupInviteMessage implements IGroupInviteMessage {

            /**
             * Constructs a new GroupInviteMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IGroupInviteMessage);

            /** GroupInviteMessage groupJid. */
            public groupJid: string;

            /** GroupInviteMessage inviteCode. */
            public inviteCode: string;

            /** GroupInviteMessage inviteExpiration. */
            public inviteExpiration: (number|Long);

            /** GroupInviteMessage groupName. */
            public groupName: string;

            /** GroupInviteMessage jpegThumbnail. */
            public jpegThumbnail: Uint8Array;

            /** GroupInviteMessage caption. */
            public caption: string;

            /** GroupInviteMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** GroupInviteMessage groupType. */
            public groupType: E2E.Message.GroupInviteMessage.GroupType;

            /**
             * Creates a new GroupInviteMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns GroupInviteMessage instance
             */
            public static create(properties?: E2E.Message.IGroupInviteMessage): E2E.Message.GroupInviteMessage;

            /**
             * Encodes the specified GroupInviteMessage message. Does not implicitly {@link E2E.Message.GroupInviteMessage.verify|verify} messages.
             * @param message GroupInviteMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IGroupInviteMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified GroupInviteMessage message, length delimited. Does not implicitly {@link E2E.Message.GroupInviteMessage.verify|verify} messages.
             * @param message GroupInviteMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IGroupInviteMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a GroupInviteMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns GroupInviteMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.GroupInviteMessage;

            /**
             * Decodes a GroupInviteMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns GroupInviteMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.GroupInviteMessage;

            /**
             * Verifies a GroupInviteMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a GroupInviteMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns GroupInviteMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.GroupInviteMessage;

            /**
             * Creates a plain object from a GroupInviteMessage message. Also converts values to other types if specified.
             * @param message GroupInviteMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.GroupInviteMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this GroupInviteMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for GroupInviteMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace GroupInviteMessage {

            /** GroupType enum. */
            enum GroupType {
                DEFAULT = 0,
                PARENT = 1
            }
        }

        /** Properties of a HighlyStructuredMessage. */
        interface IHighlyStructuredMessage {

            /** HighlyStructuredMessage namespace */
            namespace?: (string|null);

            /** HighlyStructuredMessage elementName */
            elementName?: (string|null);

            /** HighlyStructuredMessage params */
            params?: (string[]|null);

            /** HighlyStructuredMessage fallbackLg */
            fallbackLg?: (string|null);

            /** HighlyStructuredMessage fallbackLc */
            fallbackLc?: (string|null);

            /** HighlyStructuredMessage localizableParams */
            localizableParams?: (E2E.Message.HighlyStructuredMessage.IHSMLocalizableParameter[]|null);

            /** HighlyStructuredMessage deterministicLg */
            deterministicLg?: (string|null);

            /** HighlyStructuredMessage deterministicLc */
            deterministicLc?: (string|null);

            /** HighlyStructuredMessage hydratedHsm */
            hydratedHsm?: (E2E.Message.ITemplateMessage|null);
        }

        /** Represents a HighlyStructuredMessage. */
        class HighlyStructuredMessage implements IHighlyStructuredMessage {

            /**
             * Constructs a new HighlyStructuredMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IHighlyStructuredMessage);

            /** HighlyStructuredMessage namespace. */
            public namespace: string;

            /** HighlyStructuredMessage elementName. */
            public elementName: string;

            /** HighlyStructuredMessage params. */
            public params: string[];

            /** HighlyStructuredMessage fallbackLg. */
            public fallbackLg: string;

            /** HighlyStructuredMessage fallbackLc. */
            public fallbackLc: string;

            /** HighlyStructuredMessage localizableParams. */
            public localizableParams: E2E.Message.HighlyStructuredMessage.IHSMLocalizableParameter[];

            /** HighlyStructuredMessage deterministicLg. */
            public deterministicLg: string;

            /** HighlyStructuredMessage deterministicLc. */
            public deterministicLc: string;

            /** HighlyStructuredMessage hydratedHsm. */
            public hydratedHsm?: (E2E.Message.ITemplateMessage|null);

            /**
             * Creates a new HighlyStructuredMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns HighlyStructuredMessage instance
             */
            public static create(properties?: E2E.Message.IHighlyStructuredMessage): E2E.Message.HighlyStructuredMessage;

            /**
             * Encodes the specified HighlyStructuredMessage message. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.verify|verify} messages.
             * @param message HighlyStructuredMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IHighlyStructuredMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified HighlyStructuredMessage message, length delimited. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.verify|verify} messages.
             * @param message HighlyStructuredMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IHighlyStructuredMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a HighlyStructuredMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns HighlyStructuredMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.HighlyStructuredMessage;

            /**
             * Decodes a HighlyStructuredMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns HighlyStructuredMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.HighlyStructuredMessage;

            /**
             * Verifies a HighlyStructuredMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a HighlyStructuredMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns HighlyStructuredMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.HighlyStructuredMessage;

            /**
             * Creates a plain object from a HighlyStructuredMessage message. Also converts values to other types if specified.
             * @param message HighlyStructuredMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.HighlyStructuredMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this HighlyStructuredMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for HighlyStructuredMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace HighlyStructuredMessage {

            /** Properties of a HSMLocalizableParameter. */
            interface IHSMLocalizableParameter {

                /** HSMLocalizableParameter default */
                "default"?: (string|null);

                /** HSMLocalizableParameter currency */
                currency?: (E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMCurrency|null);

                /** HSMLocalizableParameter dateTime */
                dateTime?: (E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMDateTime|null);
            }

            /** Represents a HSMLocalizableParameter. */
            class HSMLocalizableParameter implements IHSMLocalizableParameter {

                /**
                 * Constructs a new HSMLocalizableParameter.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.HighlyStructuredMessage.IHSMLocalizableParameter);

                /** HSMLocalizableParameter default. */
                public default: string;

                /** HSMLocalizableParameter currency. */
                public currency?: (E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMCurrency|null);

                /** HSMLocalizableParameter dateTime. */
                public dateTime?: (E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMDateTime|null);

                /** HSMLocalizableParameter paramOneof. */
                public paramOneof?: ("currency"|"dateTime");

                /**
                 * Creates a new HSMLocalizableParameter instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns HSMLocalizableParameter instance
                 */
                public static create(properties?: E2E.Message.HighlyStructuredMessage.IHSMLocalizableParameter): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter;

                /**
                 * Encodes the specified HSMLocalizableParameter message. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.verify|verify} messages.
                 * @param message HSMLocalizableParameter message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.HighlyStructuredMessage.IHSMLocalizableParameter, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified HSMLocalizableParameter message, length delimited. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.verify|verify} messages.
                 * @param message HSMLocalizableParameter message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.HighlyStructuredMessage.IHSMLocalizableParameter, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a HSMLocalizableParameter message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns HSMLocalizableParameter
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter;

                /**
                 * Decodes a HSMLocalizableParameter message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns HSMLocalizableParameter
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter;

                /**
                 * Verifies a HSMLocalizableParameter message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a HSMLocalizableParameter message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns HSMLocalizableParameter
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter;

                /**
                 * Creates a plain object from a HSMLocalizableParameter message. Also converts values to other types if specified.
                 * @param message HSMLocalizableParameter
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this HSMLocalizableParameter to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for HSMLocalizableParameter
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace HSMLocalizableParameter {

                /** Properties of a HSMCurrency. */
                interface IHSMCurrency {

                    /** HSMCurrency currencyCode */
                    currencyCode?: (string|null);

                    /** HSMCurrency amount1000 */
                    amount1000?: (number|Long|null);
                }

                /** Represents a HSMCurrency. */
                class HSMCurrency implements IHSMCurrency {

                    /**
                     * Constructs a new HSMCurrency.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMCurrency);

                    /** HSMCurrency currencyCode. */
                    public currencyCode: string;

                    /** HSMCurrency amount1000. */
                    public amount1000: (number|Long);

                    /**
                     * Creates a new HSMCurrency instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns HSMCurrency instance
                     */
                    public static create(properties?: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMCurrency): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency;

                    /**
                     * Encodes the specified HSMCurrency message. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency.verify|verify} messages.
                     * @param message HSMCurrency message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMCurrency, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified HSMCurrency message, length delimited. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency.verify|verify} messages.
                     * @param message HSMCurrency message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMCurrency, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a HSMCurrency message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns HSMCurrency
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency;

                    /**
                     * Decodes a HSMCurrency message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns HSMCurrency
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency;

                    /**
                     * Verifies a HSMCurrency message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a HSMCurrency message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns HSMCurrency
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency;

                    /**
                     * Creates a plain object from a HSMCurrency message. Also converts values to other types if specified.
                     * @param message HSMCurrency
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this HSMCurrency to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for HSMCurrency
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a HSMDateTime. */
                interface IHSMDateTime {

                    /** HSMDateTime component */
                    component?: (E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeComponent|null);

                    /** HSMDateTime unixEpoch */
                    unixEpoch?: (E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeUnixEpoch|null);
                }

                /** Represents a HSMDateTime. */
                class HSMDateTime implements IHSMDateTime {

                    /**
                     * Constructs a new HSMDateTime.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMDateTime);

                    /** HSMDateTime component. */
                    public component?: (E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeComponent|null);

                    /** HSMDateTime unixEpoch. */
                    public unixEpoch?: (E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeUnixEpoch|null);

                    /** HSMDateTime datetimeOneof. */
                    public datetimeOneof?: ("component"|"unixEpoch");

                    /**
                     * Creates a new HSMDateTime instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns HSMDateTime instance
                     */
                    public static create(properties?: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMDateTime): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime;

                    /**
                     * Encodes the specified HSMDateTime message. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.verify|verify} messages.
                     * @param message HSMDateTime message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMDateTime, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified HSMDateTime message, length delimited. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.verify|verify} messages.
                     * @param message HSMDateTime message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMDateTime, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a HSMDateTime message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns HSMDateTime
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime;

                    /**
                     * Decodes a HSMDateTime message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns HSMDateTime
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime;

                    /**
                     * Verifies a HSMDateTime message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a HSMDateTime message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns HSMDateTime
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime;

                    /**
                     * Creates a plain object from a HSMDateTime message. Also converts values to other types if specified.
                     * @param message HSMDateTime
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this HSMDateTime to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for HSMDateTime
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                namespace HSMDateTime {

                    /** Properties of a HSMDateTimeComponent. */
                    interface IHSMDateTimeComponent {

                        /** HSMDateTimeComponent dayOfWeek */
                        dayOfWeek?: (E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.DayOfWeekType|null);

                        /** HSMDateTimeComponent year */
                        year?: (number|null);

                        /** HSMDateTimeComponent month */
                        month?: (number|null);

                        /** HSMDateTimeComponent dayOfMonth */
                        dayOfMonth?: (number|null);

                        /** HSMDateTimeComponent hour */
                        hour?: (number|null);

                        /** HSMDateTimeComponent minute */
                        minute?: (number|null);

                        /** HSMDateTimeComponent calendar */
                        calendar?: (E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.CalendarType|null);
                    }

                    /** Represents a HSMDateTimeComponent. */
                    class HSMDateTimeComponent implements IHSMDateTimeComponent {

                        /**
                         * Constructs a new HSMDateTimeComponent.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeComponent);

                        /** HSMDateTimeComponent dayOfWeek. */
                        public dayOfWeek: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.DayOfWeekType;

                        /** HSMDateTimeComponent year. */
                        public year: number;

                        /** HSMDateTimeComponent month. */
                        public month: number;

                        /** HSMDateTimeComponent dayOfMonth. */
                        public dayOfMonth: number;

                        /** HSMDateTimeComponent hour. */
                        public hour: number;

                        /** HSMDateTimeComponent minute. */
                        public minute: number;

                        /** HSMDateTimeComponent calendar. */
                        public calendar: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.CalendarType;

                        /**
                         * Creates a new HSMDateTimeComponent instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns HSMDateTimeComponent instance
                         */
                        public static create(properties?: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeComponent): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent;

                        /**
                         * Encodes the specified HSMDateTimeComponent message. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.verify|verify} messages.
                         * @param message HSMDateTimeComponent message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeComponent, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified HSMDateTimeComponent message, length delimited. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.verify|verify} messages.
                         * @param message HSMDateTimeComponent message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeComponent, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a HSMDateTimeComponent message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns HSMDateTimeComponent
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent;

                        /**
                         * Decodes a HSMDateTimeComponent message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns HSMDateTimeComponent
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent;

                        /**
                         * Verifies a HSMDateTimeComponent message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a HSMDateTimeComponent message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns HSMDateTimeComponent
                         */
                        public static fromObject(object: { [k: string]: any }): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent;

                        /**
                         * Creates a plain object from a HSMDateTimeComponent message. Also converts values to other types if specified.
                         * @param message HSMDateTimeComponent
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this HSMDateTimeComponent to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for HSMDateTimeComponent
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }

                    namespace HSMDateTimeComponent {

                        /** CalendarType enum. */
                        enum CalendarType {
                            GREGORIAN = 1,
                            SOLAR_HIJRI = 2
                        }

                        /** DayOfWeekType enum. */
                        enum DayOfWeekType {
                            MONDAY = 1,
                            TUESDAY = 2,
                            WEDNESDAY = 3,
                            THURSDAY = 4,
                            FRIDAY = 5,
                            SATURDAY = 6,
                            SUNDAY = 7
                        }
                    }

                    /** Properties of a HSMDateTimeUnixEpoch. */
                    interface IHSMDateTimeUnixEpoch {

                        /** HSMDateTimeUnixEpoch timestamp */
                        timestamp?: (number|Long|null);
                    }

                    /** Represents a HSMDateTimeUnixEpoch. */
                    class HSMDateTimeUnixEpoch implements IHSMDateTimeUnixEpoch {

                        /**
                         * Constructs a new HSMDateTimeUnixEpoch.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeUnixEpoch);

                        /** HSMDateTimeUnixEpoch timestamp. */
                        public timestamp: (number|Long);

                        /**
                         * Creates a new HSMDateTimeUnixEpoch instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns HSMDateTimeUnixEpoch instance
                         */
                        public static create(properties?: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeUnixEpoch): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch;

                        /**
                         * Encodes the specified HSMDateTimeUnixEpoch message. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch.verify|verify} messages.
                         * @param message HSMDateTimeUnixEpoch message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeUnixEpoch, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified HSMDateTimeUnixEpoch message, length delimited. Does not implicitly {@link E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch.verify|verify} messages.
                         * @param message HSMDateTimeUnixEpoch message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeUnixEpoch, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a HSMDateTimeUnixEpoch message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns HSMDateTimeUnixEpoch
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch;

                        /**
                         * Decodes a HSMDateTimeUnixEpoch message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns HSMDateTimeUnixEpoch
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch;

                        /**
                         * Verifies a HSMDateTimeUnixEpoch message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a HSMDateTimeUnixEpoch message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns HSMDateTimeUnixEpoch
                         */
                        public static fromObject(object: { [k: string]: any }): E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch;

                        /**
                         * Creates a plain object from a HSMDateTimeUnixEpoch message. Also converts values to other types if specified.
                         * @param message HSMDateTimeUnixEpoch
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: E2E.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this HSMDateTimeUnixEpoch to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for HSMDateTimeUnixEpoch
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }
                }
            }
        }

        /** Properties of a HistorySyncNotification. */
        interface IHistorySyncNotification {

            /** HistorySyncNotification fileSha256 */
            fileSha256?: (Uint8Array|null);

            /** HistorySyncNotification fileLength */
            fileLength?: (number|Long|null);

            /** HistorySyncNotification mediaKey */
            mediaKey?: (Uint8Array|null);

            /** HistorySyncNotification fileEncSha256 */
            fileEncSha256?: (Uint8Array|null);

            /** HistorySyncNotification directPath */
            directPath?: (string|null);

            /** HistorySyncNotification syncType */
            syncType?: (E2E.Message.HistorySyncType|null);

            /** HistorySyncNotification chunkOrder */
            chunkOrder?: (number|null);

            /** HistorySyncNotification originalMessageId */
            originalMessageId?: (string|null);

            /** HistorySyncNotification progress */
            progress?: (number|null);

            /** HistorySyncNotification oldestMsgInChunkTimestampSec */
            oldestMsgInChunkTimestampSec?: (number|Long|null);

            /** HistorySyncNotification initialHistBootstrapInlinePayload */
            initialHistBootstrapInlinePayload?: (Uint8Array|null);

            /** HistorySyncNotification peerDataRequestSessionId */
            peerDataRequestSessionId?: (string|null);

            /** HistorySyncNotification fullHistorySyncOnDemandRequestMetadata */
            fullHistorySyncOnDemandRequestMetadata?: (E2E.Message.IFullHistorySyncOnDemandRequestMetadata|null);

            /** HistorySyncNotification encHandle */
            encHandle?: (string|null);
        }

        /** Represents a HistorySyncNotification. */
        class HistorySyncNotification implements IHistorySyncNotification {

            /**
             * Constructs a new HistorySyncNotification.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IHistorySyncNotification);

            /** HistorySyncNotification fileSha256. */
            public fileSha256: Uint8Array;

            /** HistorySyncNotification fileLength. */
            public fileLength: (number|Long);

            /** HistorySyncNotification mediaKey. */
            public mediaKey: Uint8Array;

            /** HistorySyncNotification fileEncSha256. */
            public fileEncSha256: Uint8Array;

            /** HistorySyncNotification directPath. */
            public directPath: string;

            /** HistorySyncNotification syncType. */
            public syncType: E2E.Message.HistorySyncType;

            /** HistorySyncNotification chunkOrder. */
            public chunkOrder: number;

            /** HistorySyncNotification originalMessageId. */
            public originalMessageId: string;

            /** HistorySyncNotification progress. */
            public progress: number;

            /** HistorySyncNotification oldestMsgInChunkTimestampSec. */
            public oldestMsgInChunkTimestampSec: (number|Long);

            /** HistorySyncNotification initialHistBootstrapInlinePayload. */
            public initialHistBootstrapInlinePayload: Uint8Array;

            /** HistorySyncNotification peerDataRequestSessionId. */
            public peerDataRequestSessionId: string;

            /** HistorySyncNotification fullHistorySyncOnDemandRequestMetadata. */
            public fullHistorySyncOnDemandRequestMetadata?: (E2E.Message.IFullHistorySyncOnDemandRequestMetadata|null);

            /** HistorySyncNotification encHandle. */
            public encHandle: string;

            /**
             * Creates a new HistorySyncNotification instance using the specified properties.
             * @param [properties] Properties to set
             * @returns HistorySyncNotification instance
             */
            public static create(properties?: E2E.Message.IHistorySyncNotification): E2E.Message.HistorySyncNotification;

            /**
             * Encodes the specified HistorySyncNotification message. Does not implicitly {@link E2E.Message.HistorySyncNotification.verify|verify} messages.
             * @param message HistorySyncNotification message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IHistorySyncNotification, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified HistorySyncNotification message, length delimited. Does not implicitly {@link E2E.Message.HistorySyncNotification.verify|verify} messages.
             * @param message HistorySyncNotification message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IHistorySyncNotification, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a HistorySyncNotification message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns HistorySyncNotification
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.HistorySyncNotification;

            /**
             * Decodes a HistorySyncNotification message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns HistorySyncNotification
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.HistorySyncNotification;

            /**
             * Verifies a HistorySyncNotification message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a HistorySyncNotification message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns HistorySyncNotification
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.HistorySyncNotification;

            /**
             * Creates a plain object from a HistorySyncNotification message. Also converts values to other types if specified.
             * @param message HistorySyncNotification
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.HistorySyncNotification, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this HistorySyncNotification to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for HistorySyncNotification
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** HistorySyncType enum. */
        enum HistorySyncType {
            INITIAL_BOOTSTRAP = 0,
            INITIAL_STATUS_V3 = 1,
            FULL = 2,
            RECENT = 3,
            PUSH_NAME = 4,
            NON_BLOCKING_DATA = 5,
            ON_DEMAND = 6,
            NO_HISTORY = 7
        }

        /** Properties of an ImageMessage. */
        interface IImageMessage {

            /** ImageMessage url */
            url?: (string|null);

            /** ImageMessage mimetype */
            mimetype?: (string|null);

            /** ImageMessage caption */
            caption?: (string|null);

            /** ImageMessage fileSha256 */
            fileSha256?: (Uint8Array|null);

            /** ImageMessage fileLength */
            fileLength?: (number|Long|null);

            /** ImageMessage height */
            height?: (number|null);

            /** ImageMessage width */
            width?: (number|null);

            /** ImageMessage mediaKey */
            mediaKey?: (Uint8Array|null);

            /** ImageMessage fileEncSha256 */
            fileEncSha256?: (Uint8Array|null);

            /** ImageMessage interactiveAnnotations */
            interactiveAnnotations?: (E2E.IInteractiveAnnotation[]|null);

            /** ImageMessage directPath */
            directPath?: (string|null);

            /** ImageMessage mediaKeyTimestamp */
            mediaKeyTimestamp?: (number|Long|null);

            /** ImageMessage jpegThumbnail */
            jpegThumbnail?: (Uint8Array|null);

            /** ImageMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** ImageMessage firstScanSidecar */
            firstScanSidecar?: (Uint8Array|null);

            /** ImageMessage firstScanLength */
            firstScanLength?: (number|null);

            /** ImageMessage experimentGroupId */
            experimentGroupId?: (number|null);

            /** ImageMessage scansSidecar */
            scansSidecar?: (Uint8Array|null);

            /** ImageMessage scanLengths */
            scanLengths?: (number[]|null);

            /** ImageMessage midQualityFileSha256 */
            midQualityFileSha256?: (Uint8Array|null);

            /** ImageMessage midQualityFileEncSha256 */
            midQualityFileEncSha256?: (Uint8Array|null);

            /** ImageMessage viewOnce */
            viewOnce?: (boolean|null);

            /** ImageMessage thumbnailDirectPath */
            thumbnailDirectPath?: (string|null);

            /** ImageMessage thumbnailSha256 */
            thumbnailSha256?: (Uint8Array|null);

            /** ImageMessage thumbnailEncSha256 */
            thumbnailEncSha256?: (Uint8Array|null);

            /** ImageMessage staticUrl */
            staticUrl?: (string|null);

            /** ImageMessage annotations */
            annotations?: (E2E.IInteractiveAnnotation[]|null);

            /** ImageMessage imageSourceType */
            imageSourceType?: (E2E.Message.ImageMessage.ImageSourceType|null);

            /** ImageMessage accessibilityLabel */
            accessibilityLabel?: (string|null);

            /** ImageMessage mediaKeyDomain */
            mediaKeyDomain?: (E2E.Message.MediaKeyDomain|null);

            /** ImageMessage qrUrl */
            qrUrl?: (string|null);
        }

        /** Represents an ImageMessage. */
        class ImageMessage implements IImageMessage {

            /**
             * Constructs a new ImageMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IImageMessage);

            /** ImageMessage url. */
            public url: string;

            /** ImageMessage mimetype. */
            public mimetype: string;

            /** ImageMessage caption. */
            public caption: string;

            /** ImageMessage fileSha256. */
            public fileSha256: Uint8Array;

            /** ImageMessage fileLength. */
            public fileLength: (number|Long);

            /** ImageMessage height. */
            public height: number;

            /** ImageMessage width. */
            public width: number;

            /** ImageMessage mediaKey. */
            public mediaKey: Uint8Array;

            /** ImageMessage fileEncSha256. */
            public fileEncSha256: Uint8Array;

            /** ImageMessage interactiveAnnotations. */
            public interactiveAnnotations: E2E.IInteractiveAnnotation[];

            /** ImageMessage directPath. */
            public directPath: string;

            /** ImageMessage mediaKeyTimestamp. */
            public mediaKeyTimestamp: (number|Long);

            /** ImageMessage jpegThumbnail. */
            public jpegThumbnail: Uint8Array;

            /** ImageMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** ImageMessage firstScanSidecar. */
            public firstScanSidecar: Uint8Array;

            /** ImageMessage firstScanLength. */
            public firstScanLength: number;

            /** ImageMessage experimentGroupId. */
            public experimentGroupId: number;

            /** ImageMessage scansSidecar. */
            public scansSidecar: Uint8Array;

            /** ImageMessage scanLengths. */
            public scanLengths: number[];

            /** ImageMessage midQualityFileSha256. */
            public midQualityFileSha256: Uint8Array;

            /** ImageMessage midQualityFileEncSha256. */
            public midQualityFileEncSha256: Uint8Array;

            /** ImageMessage viewOnce. */
            public viewOnce: boolean;

            /** ImageMessage thumbnailDirectPath. */
            public thumbnailDirectPath: string;

            /** ImageMessage thumbnailSha256. */
            public thumbnailSha256: Uint8Array;

            /** ImageMessage thumbnailEncSha256. */
            public thumbnailEncSha256: Uint8Array;

            /** ImageMessage staticUrl. */
            public staticUrl: string;

            /** ImageMessage annotations. */
            public annotations: E2E.IInteractiveAnnotation[];

            /** ImageMessage imageSourceType. */
            public imageSourceType: E2E.Message.ImageMessage.ImageSourceType;

            /** ImageMessage accessibilityLabel. */
            public accessibilityLabel: string;

            /** ImageMessage mediaKeyDomain. */
            public mediaKeyDomain: E2E.Message.MediaKeyDomain;

            /** ImageMessage qrUrl. */
            public qrUrl: string;

            /**
             * Creates a new ImageMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ImageMessage instance
             */
            public static create(properties?: E2E.Message.IImageMessage): E2E.Message.ImageMessage;

            /**
             * Encodes the specified ImageMessage message. Does not implicitly {@link E2E.Message.ImageMessage.verify|verify} messages.
             * @param message ImageMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IImageMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ImageMessage message, length delimited. Does not implicitly {@link E2E.Message.ImageMessage.verify|verify} messages.
             * @param message ImageMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IImageMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an ImageMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ImageMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ImageMessage;

            /**
             * Decodes an ImageMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ImageMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ImageMessage;

            /**
             * Verifies an ImageMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an ImageMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ImageMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ImageMessage;

            /**
             * Creates a plain object from an ImageMessage message. Also converts values to other types if specified.
             * @param message ImageMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ImageMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ImageMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ImageMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ImageMessage {

            /** ImageSourceType enum. */
            enum ImageSourceType {
                USER_IMAGE = 0,
                AI_GENERATED = 1,
                AI_MODIFIED = 2,
                RASTERIZED_TEXT_STATUS = 3
            }
        }

        /** Properties of an InitialSecurityNotificationSettingSync. */
        interface IInitialSecurityNotificationSettingSync {

            /** InitialSecurityNotificationSettingSync securityNotificationEnabled */
            securityNotificationEnabled?: (boolean|null);
        }

        /** Represents an InitialSecurityNotificationSettingSync. */
        class InitialSecurityNotificationSettingSync implements IInitialSecurityNotificationSettingSync {

            /**
             * Constructs a new InitialSecurityNotificationSettingSync.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IInitialSecurityNotificationSettingSync);

            /** InitialSecurityNotificationSettingSync securityNotificationEnabled. */
            public securityNotificationEnabled: boolean;

            /**
             * Creates a new InitialSecurityNotificationSettingSync instance using the specified properties.
             * @param [properties] Properties to set
             * @returns InitialSecurityNotificationSettingSync instance
             */
            public static create(properties?: E2E.Message.IInitialSecurityNotificationSettingSync): E2E.Message.InitialSecurityNotificationSettingSync;

            /**
             * Encodes the specified InitialSecurityNotificationSettingSync message. Does not implicitly {@link E2E.Message.InitialSecurityNotificationSettingSync.verify|verify} messages.
             * @param message InitialSecurityNotificationSettingSync message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IInitialSecurityNotificationSettingSync, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified InitialSecurityNotificationSettingSync message, length delimited. Does not implicitly {@link E2E.Message.InitialSecurityNotificationSettingSync.verify|verify} messages.
             * @param message InitialSecurityNotificationSettingSync message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IInitialSecurityNotificationSettingSync, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an InitialSecurityNotificationSettingSync message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns InitialSecurityNotificationSettingSync
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InitialSecurityNotificationSettingSync;

            /**
             * Decodes an InitialSecurityNotificationSettingSync message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns InitialSecurityNotificationSettingSync
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InitialSecurityNotificationSettingSync;

            /**
             * Verifies an InitialSecurityNotificationSettingSync message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an InitialSecurityNotificationSettingSync message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns InitialSecurityNotificationSettingSync
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.InitialSecurityNotificationSettingSync;

            /**
             * Creates a plain object from an InitialSecurityNotificationSettingSync message. Also converts values to other types if specified.
             * @param message InitialSecurityNotificationSettingSync
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.InitialSecurityNotificationSettingSync, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this InitialSecurityNotificationSettingSync to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for InitialSecurityNotificationSettingSync
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an InteractiveMessage. */
        interface IInteractiveMessage {

            /** InteractiveMessage header */
            header?: (E2E.Message.InteractiveMessage.IHeader|null);

            /** InteractiveMessage body */
            body?: (E2E.Message.InteractiveMessage.IBody|null);

            /** InteractiveMessage footer */
            footer?: (E2E.Message.InteractiveMessage.IFooter|null);

            /** InteractiveMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** InteractiveMessage urlTrackingMap */
            urlTrackingMap?: (E2E.IUrlTrackingMap|null);

            /** InteractiveMessage shopStorefrontMessage */
            shopStorefrontMessage?: (E2E.Message.InteractiveMessage.IShopMessage|null);

            /** InteractiveMessage collectionMessage */
            collectionMessage?: (E2E.Message.InteractiveMessage.ICollectionMessage|null);

            /** InteractiveMessage nativeFlowMessage */
            nativeFlowMessage?: (E2E.Message.InteractiveMessage.INativeFlowMessage|null);

            /** InteractiveMessage carouselMessage */
            carouselMessage?: (E2E.Message.InteractiveMessage.ICarouselMessage|null);
        }

        /** Represents an InteractiveMessage. */
        class InteractiveMessage implements IInteractiveMessage {

            /**
             * Constructs a new InteractiveMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IInteractiveMessage);

            /** InteractiveMessage header. */
            public header?: (E2E.Message.InteractiveMessage.IHeader|null);

            /** InteractiveMessage body. */
            public body?: (E2E.Message.InteractiveMessage.IBody|null);

            /** InteractiveMessage footer. */
            public footer?: (E2E.Message.InteractiveMessage.IFooter|null);

            /** InteractiveMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** InteractiveMessage urlTrackingMap. */
            public urlTrackingMap?: (E2E.IUrlTrackingMap|null);

            /** InteractiveMessage shopStorefrontMessage. */
            public shopStorefrontMessage?: (E2E.Message.InteractiveMessage.IShopMessage|null);

            /** InteractiveMessage collectionMessage. */
            public collectionMessage?: (E2E.Message.InteractiveMessage.ICollectionMessage|null);

            /** InteractiveMessage nativeFlowMessage. */
            public nativeFlowMessage?: (E2E.Message.InteractiveMessage.INativeFlowMessage|null);

            /** InteractiveMessage carouselMessage. */
            public carouselMessage?: (E2E.Message.InteractiveMessage.ICarouselMessage|null);

            /** InteractiveMessage interactiveMessage. */
            public interactiveMessage?: ("shopStorefrontMessage"|"collectionMessage"|"nativeFlowMessage"|"carouselMessage");

            /**
             * Creates a new InteractiveMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns InteractiveMessage instance
             */
            public static create(properties?: E2E.Message.IInteractiveMessage): E2E.Message.InteractiveMessage;

            /**
             * Encodes the specified InteractiveMessage message. Does not implicitly {@link E2E.Message.InteractiveMessage.verify|verify} messages.
             * @param message InteractiveMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IInteractiveMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified InteractiveMessage message, length delimited. Does not implicitly {@link E2E.Message.InteractiveMessage.verify|verify} messages.
             * @param message InteractiveMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IInteractiveMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an InteractiveMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns InteractiveMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveMessage;

            /**
             * Decodes an InteractiveMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns InteractiveMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveMessage;

            /**
             * Verifies an InteractiveMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an InteractiveMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns InteractiveMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveMessage;

            /**
             * Creates a plain object from an InteractiveMessage message. Also converts values to other types if specified.
             * @param message InteractiveMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.InteractiveMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this InteractiveMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for InteractiveMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace InteractiveMessage {

            /** Properties of a Body. */
            interface IBody {

                /** Body text */
                text?: (string|null);
            }

            /** Represents a Body. */
            class Body implements IBody {

                /**
                 * Constructs a new Body.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.InteractiveMessage.IBody);

                /** Body text. */
                public text: string;

                /**
                 * Creates a new Body instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Body instance
                 */
                public static create(properties?: E2E.Message.InteractiveMessage.IBody): E2E.Message.InteractiveMessage.Body;

                /**
                 * Encodes the specified Body message. Does not implicitly {@link E2E.Message.InteractiveMessage.Body.verify|verify} messages.
                 * @param message Body message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.InteractiveMessage.IBody, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Body message, length delimited. Does not implicitly {@link E2E.Message.InteractiveMessage.Body.verify|verify} messages.
                 * @param message Body message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.InteractiveMessage.IBody, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Body message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Body
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveMessage.Body;

                /**
                 * Decodes a Body message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Body
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveMessage.Body;

                /**
                 * Verifies a Body message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Body message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Body
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveMessage.Body;

                /**
                 * Creates a plain object from a Body message. Also converts values to other types if specified.
                 * @param message Body
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.InteractiveMessage.Body, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Body to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Body
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a CarouselMessage. */
            interface ICarouselMessage {

                /** CarouselMessage cards */
                cards?: (E2E.Message.IInteractiveMessage[]|null);

                /** CarouselMessage messageVersion */
                messageVersion?: (number|null);

                /** CarouselMessage carouselCardType */
                carouselCardType?: (E2E.Message.InteractiveMessage.CarouselMessage.CarouselCardType|null);
            }

            /** Represents a CarouselMessage. */
            class CarouselMessage implements ICarouselMessage {

                /**
                 * Constructs a new CarouselMessage.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.InteractiveMessage.ICarouselMessage);

                /** CarouselMessage cards. */
                public cards: E2E.Message.IInteractiveMessage[];

                /** CarouselMessage messageVersion. */
                public messageVersion: number;

                /** CarouselMessage carouselCardType. */
                public carouselCardType: E2E.Message.InteractiveMessage.CarouselMessage.CarouselCardType;

                /**
                 * Creates a new CarouselMessage instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns CarouselMessage instance
                 */
                public static create(properties?: E2E.Message.InteractiveMessage.ICarouselMessage): E2E.Message.InteractiveMessage.CarouselMessage;

                /**
                 * Encodes the specified CarouselMessage message. Does not implicitly {@link E2E.Message.InteractiveMessage.CarouselMessage.verify|verify} messages.
                 * @param message CarouselMessage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.InteractiveMessage.ICarouselMessage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified CarouselMessage message, length delimited. Does not implicitly {@link E2E.Message.InteractiveMessage.CarouselMessage.verify|verify} messages.
                 * @param message CarouselMessage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.InteractiveMessage.ICarouselMessage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a CarouselMessage message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns CarouselMessage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveMessage.CarouselMessage;

                /**
                 * Decodes a CarouselMessage message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns CarouselMessage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveMessage.CarouselMessage;

                /**
                 * Verifies a CarouselMessage message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a CarouselMessage message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns CarouselMessage
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveMessage.CarouselMessage;

                /**
                 * Creates a plain object from a CarouselMessage message. Also converts values to other types if specified.
                 * @param message CarouselMessage
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.InteractiveMessage.CarouselMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this CarouselMessage to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for CarouselMessage
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace CarouselMessage {

                /** CarouselCardType enum. */
                enum CarouselCardType {
                    UNKNOWN = 0,
                    HSCROLL_CARDS = 1,
                    ALBUM_IMAGE = 2
                }
            }

            /** Properties of a CollectionMessage. */
            interface ICollectionMessage {

                /** CollectionMessage bizJid */
                bizJid?: (string|null);

                /** CollectionMessage id */
                id?: (string|null);

                /** CollectionMessage messageVersion */
                messageVersion?: (number|null);
            }

            /** Represents a CollectionMessage. */
            class CollectionMessage implements ICollectionMessage {

                /**
                 * Constructs a new CollectionMessage.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.InteractiveMessage.ICollectionMessage);

                /** CollectionMessage bizJid. */
                public bizJid: string;

                /** CollectionMessage id. */
                public id: string;

                /** CollectionMessage messageVersion. */
                public messageVersion: number;

                /**
                 * Creates a new CollectionMessage instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns CollectionMessage instance
                 */
                public static create(properties?: E2E.Message.InteractiveMessage.ICollectionMessage): E2E.Message.InteractiveMessage.CollectionMessage;

                /**
                 * Encodes the specified CollectionMessage message. Does not implicitly {@link E2E.Message.InteractiveMessage.CollectionMessage.verify|verify} messages.
                 * @param message CollectionMessage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.InteractiveMessage.ICollectionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified CollectionMessage message, length delimited. Does not implicitly {@link E2E.Message.InteractiveMessage.CollectionMessage.verify|verify} messages.
                 * @param message CollectionMessage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.InteractiveMessage.ICollectionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a CollectionMessage message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns CollectionMessage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveMessage.CollectionMessage;

                /**
                 * Decodes a CollectionMessage message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns CollectionMessage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveMessage.CollectionMessage;

                /**
                 * Verifies a CollectionMessage message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a CollectionMessage message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns CollectionMessage
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveMessage.CollectionMessage;

                /**
                 * Creates a plain object from a CollectionMessage message. Also converts values to other types if specified.
                 * @param message CollectionMessage
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.InteractiveMessage.CollectionMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this CollectionMessage to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for CollectionMessage
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a Footer. */
            interface IFooter {

                /** Footer text */
                text?: (string|null);
            }

            /** Represents a Footer. */
            class Footer implements IFooter {

                /**
                 * Constructs a new Footer.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.InteractiveMessage.IFooter);

                /** Footer text. */
                public text: string;

                /**
                 * Creates a new Footer instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Footer instance
                 */
                public static create(properties?: E2E.Message.InteractiveMessage.IFooter): E2E.Message.InteractiveMessage.Footer;

                /**
                 * Encodes the specified Footer message. Does not implicitly {@link E2E.Message.InteractiveMessage.Footer.verify|verify} messages.
                 * @param message Footer message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.InteractiveMessage.IFooter, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Footer message, length delimited. Does not implicitly {@link E2E.Message.InteractiveMessage.Footer.verify|verify} messages.
                 * @param message Footer message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.InteractiveMessage.IFooter, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Footer message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Footer
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveMessage.Footer;

                /**
                 * Decodes a Footer message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Footer
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveMessage.Footer;

                /**
                 * Verifies a Footer message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Footer message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Footer
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveMessage.Footer;

                /**
                 * Creates a plain object from a Footer message. Also converts values to other types if specified.
                 * @param message Footer
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.InteractiveMessage.Footer, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Footer to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Footer
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a Header. */
            interface IHeader {

                /** Header title */
                title?: (string|null);

                /** Header subtitle */
                subtitle?: (string|null);

                /** Header hasMediaAttachment */
                hasMediaAttachment?: (boolean|null);

                /** Header documentMessage */
                documentMessage?: (E2E.Message.IDocumentMessage|null);

                /** Header imageMessage */
                imageMessage?: (E2E.Message.IImageMessage|null);

                /** Header jpegThumbnail */
                jpegThumbnail?: (Uint8Array|null);

                /** Header videoMessage */
                videoMessage?: (E2E.Message.IVideoMessage|null);

                /** Header locationMessage */
                locationMessage?: (E2E.Message.ILocationMessage|null);

                /** Header productMessage */
                productMessage?: (E2E.Message.IProductMessage|null);
            }

            /** Represents a Header. */
            class Header implements IHeader {

                /**
                 * Constructs a new Header.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.InteractiveMessage.IHeader);

                /** Header title. */
                public title: string;

                /** Header subtitle. */
                public subtitle: string;

                /** Header hasMediaAttachment. */
                public hasMediaAttachment: boolean;

                /** Header documentMessage. */
                public documentMessage?: (E2E.Message.IDocumentMessage|null);

                /** Header imageMessage. */
                public imageMessage?: (E2E.Message.IImageMessage|null);

                /** Header jpegThumbnail. */
                public jpegThumbnail?: (Uint8Array|null);

                /** Header videoMessage. */
                public videoMessage?: (E2E.Message.IVideoMessage|null);

                /** Header locationMessage. */
                public locationMessage?: (E2E.Message.ILocationMessage|null);

                /** Header productMessage. */
                public productMessage?: (E2E.Message.IProductMessage|null);

                /** Header media. */
                public media?: ("documentMessage"|"imageMessage"|"jpegThumbnail"|"videoMessage"|"locationMessage"|"productMessage");

                /**
                 * Creates a new Header instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Header instance
                 */
                public static create(properties?: E2E.Message.InteractiveMessage.IHeader): E2E.Message.InteractiveMessage.Header;

                /**
                 * Encodes the specified Header message. Does not implicitly {@link E2E.Message.InteractiveMessage.Header.verify|verify} messages.
                 * @param message Header message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.InteractiveMessage.IHeader, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Header message, length delimited. Does not implicitly {@link E2E.Message.InteractiveMessage.Header.verify|verify} messages.
                 * @param message Header message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.InteractiveMessage.IHeader, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Header message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Header
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveMessage.Header;

                /**
                 * Decodes a Header message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Header
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveMessage.Header;

                /**
                 * Verifies a Header message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Header message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Header
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveMessage.Header;

                /**
                 * Creates a plain object from a Header message. Also converts values to other types if specified.
                 * @param message Header
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.InteractiveMessage.Header, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Header to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Header
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a NativeFlowMessage. */
            interface INativeFlowMessage {

                /** NativeFlowMessage buttons */
                buttons?: (E2E.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton[]|null);

                /** NativeFlowMessage messageParamsJson */
                messageParamsJson?: (string|null);

                /** NativeFlowMessage messageVersion */
                messageVersion?: (number|null);
            }

            /** Represents a NativeFlowMessage. */
            class NativeFlowMessage implements INativeFlowMessage {

                /**
                 * Constructs a new NativeFlowMessage.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.InteractiveMessage.INativeFlowMessage);

                /** NativeFlowMessage buttons. */
                public buttons: E2E.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton[];

                /** NativeFlowMessage messageParamsJson. */
                public messageParamsJson: string;

                /** NativeFlowMessage messageVersion. */
                public messageVersion: number;

                /**
                 * Creates a new NativeFlowMessage instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns NativeFlowMessage instance
                 */
                public static create(properties?: E2E.Message.InteractiveMessage.INativeFlowMessage): E2E.Message.InteractiveMessage.NativeFlowMessage;

                /**
                 * Encodes the specified NativeFlowMessage message. Does not implicitly {@link E2E.Message.InteractiveMessage.NativeFlowMessage.verify|verify} messages.
                 * @param message NativeFlowMessage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.InteractiveMessage.INativeFlowMessage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified NativeFlowMessage message, length delimited. Does not implicitly {@link E2E.Message.InteractiveMessage.NativeFlowMessage.verify|verify} messages.
                 * @param message NativeFlowMessage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.InteractiveMessage.INativeFlowMessage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a NativeFlowMessage message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns NativeFlowMessage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveMessage.NativeFlowMessage;

                /**
                 * Decodes a NativeFlowMessage message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns NativeFlowMessage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveMessage.NativeFlowMessage;

                /**
                 * Verifies a NativeFlowMessage message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a NativeFlowMessage message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns NativeFlowMessage
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveMessage.NativeFlowMessage;

                /**
                 * Creates a plain object from a NativeFlowMessage message. Also converts values to other types if specified.
                 * @param message NativeFlowMessage
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.InteractiveMessage.NativeFlowMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this NativeFlowMessage to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for NativeFlowMessage
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace NativeFlowMessage {

                /** Properties of a NativeFlowButton. */
                interface INativeFlowButton {

                    /** NativeFlowButton name */
                    name?: (string|null);

                    /** NativeFlowButton buttonParamsJson */
                    buttonParamsJson?: (string|null);
                }

                /** Represents a NativeFlowButton. */
                class NativeFlowButton implements INativeFlowButton {

                    /**
                     * Constructs a new NativeFlowButton.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton);

                    /** NativeFlowButton name. */
                    public name: string;

                    /** NativeFlowButton buttonParamsJson. */
                    public buttonParamsJson: string;

                    /**
                     * Creates a new NativeFlowButton instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns NativeFlowButton instance
                     */
                    public static create(properties?: E2E.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton): E2E.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton;

                    /**
                     * Encodes the specified NativeFlowButton message. Does not implicitly {@link E2E.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton.verify|verify} messages.
                     * @param message NativeFlowButton message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified NativeFlowButton message, length delimited. Does not implicitly {@link E2E.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton.verify|verify} messages.
                     * @param message NativeFlowButton message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a NativeFlowButton message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns NativeFlowButton
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton;

                    /**
                     * Decodes a NativeFlowButton message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns NativeFlowButton
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton;

                    /**
                     * Verifies a NativeFlowButton message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a NativeFlowButton message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns NativeFlowButton
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton;

                    /**
                     * Creates a plain object from a NativeFlowButton message. Also converts values to other types if specified.
                     * @param message NativeFlowButton
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this NativeFlowButton to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for NativeFlowButton
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }
            }

            /** Properties of a ShopMessage. */
            interface IShopMessage {

                /** ShopMessage id */
                id?: (string|null);

                /** ShopMessage surface */
                surface?: (E2E.Message.InteractiveMessage.ShopMessage.Surface|null);

                /** ShopMessage messageVersion */
                messageVersion?: (number|null);
            }

            /** Represents a ShopMessage. */
            class ShopMessage implements IShopMessage {

                /**
                 * Constructs a new ShopMessage.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.InteractiveMessage.IShopMessage);

                /** ShopMessage id. */
                public id: string;

                /** ShopMessage surface. */
                public surface: E2E.Message.InteractiveMessage.ShopMessage.Surface;

                /** ShopMessage messageVersion. */
                public messageVersion: number;

                /**
                 * Creates a new ShopMessage instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ShopMessage instance
                 */
                public static create(properties?: E2E.Message.InteractiveMessage.IShopMessage): E2E.Message.InteractiveMessage.ShopMessage;

                /**
                 * Encodes the specified ShopMessage message. Does not implicitly {@link E2E.Message.InteractiveMessage.ShopMessage.verify|verify} messages.
                 * @param message ShopMessage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.InteractiveMessage.IShopMessage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ShopMessage message, length delimited. Does not implicitly {@link E2E.Message.InteractiveMessage.ShopMessage.verify|verify} messages.
                 * @param message ShopMessage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.InteractiveMessage.IShopMessage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ShopMessage message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ShopMessage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveMessage.ShopMessage;

                /**
                 * Decodes a ShopMessage message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ShopMessage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveMessage.ShopMessage;

                /**
                 * Verifies a ShopMessage message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ShopMessage message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ShopMessage
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveMessage.ShopMessage;

                /**
                 * Creates a plain object from a ShopMessage message. Also converts values to other types if specified.
                 * @param message ShopMessage
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.InteractiveMessage.ShopMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ShopMessage to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ShopMessage
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace ShopMessage {

                /** Surface enum. */
                enum Surface {
                    UNKNOWN_SURFACE = 0,
                    FB = 1,
                    IG = 2,
                    WA = 3
                }
            }
        }

        /** Properties of an InteractiveResponseMessage. */
        interface IInteractiveResponseMessage {

            /** InteractiveResponseMessage body */
            body?: (E2E.Message.InteractiveResponseMessage.IBody|null);

            /** InteractiveResponseMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** InteractiveResponseMessage nativeFlowResponseMessage */
            nativeFlowResponseMessage?: (E2E.Message.InteractiveResponseMessage.INativeFlowResponseMessage|null);
        }

        /** Represents an InteractiveResponseMessage. */
        class InteractiveResponseMessage implements IInteractiveResponseMessage {

            /**
             * Constructs a new InteractiveResponseMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IInteractiveResponseMessage);

            /** InteractiveResponseMessage body. */
            public body?: (E2E.Message.InteractiveResponseMessage.IBody|null);

            /** InteractiveResponseMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** InteractiveResponseMessage nativeFlowResponseMessage. */
            public nativeFlowResponseMessage?: (E2E.Message.InteractiveResponseMessage.INativeFlowResponseMessage|null);

            /** InteractiveResponseMessage interactiveResponseMessage. */
            public interactiveResponseMessage?: "nativeFlowResponseMessage";

            /**
             * Creates a new InteractiveResponseMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns InteractiveResponseMessage instance
             */
            public static create(properties?: E2E.Message.IInteractiveResponseMessage): E2E.Message.InteractiveResponseMessage;

            /**
             * Encodes the specified InteractiveResponseMessage message. Does not implicitly {@link E2E.Message.InteractiveResponseMessage.verify|verify} messages.
             * @param message InteractiveResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IInteractiveResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified InteractiveResponseMessage message, length delimited. Does not implicitly {@link E2E.Message.InteractiveResponseMessage.verify|verify} messages.
             * @param message InteractiveResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IInteractiveResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an InteractiveResponseMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns InteractiveResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveResponseMessage;

            /**
             * Decodes an InteractiveResponseMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns InteractiveResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveResponseMessage;

            /**
             * Verifies an InteractiveResponseMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an InteractiveResponseMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns InteractiveResponseMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveResponseMessage;

            /**
             * Creates a plain object from an InteractiveResponseMessage message. Also converts values to other types if specified.
             * @param message InteractiveResponseMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.InteractiveResponseMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this InteractiveResponseMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for InteractiveResponseMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace InteractiveResponseMessage {

            /** Properties of a Body. */
            interface IBody {

                /** Body text */
                text?: (string|null);

                /** Body format */
                format?: (E2E.Message.InteractiveResponseMessage.Body.Format|null);
            }

            /** Represents a Body. */
            class Body implements IBody {

                /**
                 * Constructs a new Body.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.InteractiveResponseMessage.IBody);

                /** Body text. */
                public text: string;

                /** Body format. */
                public format: E2E.Message.InteractiveResponseMessage.Body.Format;

                /**
                 * Creates a new Body instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Body instance
                 */
                public static create(properties?: E2E.Message.InteractiveResponseMessage.IBody): E2E.Message.InteractiveResponseMessage.Body;

                /**
                 * Encodes the specified Body message. Does not implicitly {@link E2E.Message.InteractiveResponseMessage.Body.verify|verify} messages.
                 * @param message Body message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.InteractiveResponseMessage.IBody, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Body message, length delimited. Does not implicitly {@link E2E.Message.InteractiveResponseMessage.Body.verify|verify} messages.
                 * @param message Body message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.InteractiveResponseMessage.IBody, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Body message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Body
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveResponseMessage.Body;

                /**
                 * Decodes a Body message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Body
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveResponseMessage.Body;

                /**
                 * Verifies a Body message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Body message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Body
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveResponseMessage.Body;

                /**
                 * Creates a plain object from a Body message. Also converts values to other types if specified.
                 * @param message Body
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.InteractiveResponseMessage.Body, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Body to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Body
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace Body {

                /** Format enum. */
                enum Format {
                    DEFAULT = 0,
                    EXTENSIONS_1 = 1
                }
            }

            /** Properties of a NativeFlowResponseMessage. */
            interface INativeFlowResponseMessage {

                /** NativeFlowResponseMessage name */
                name?: (string|null);

                /** NativeFlowResponseMessage paramsJson */
                paramsJson?: (string|null);

                /** NativeFlowResponseMessage version */
                version?: (number|null);
            }

            /** Represents a NativeFlowResponseMessage. */
            class NativeFlowResponseMessage implements INativeFlowResponseMessage {

                /**
                 * Constructs a new NativeFlowResponseMessage.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.InteractiveResponseMessage.INativeFlowResponseMessage);

                /** NativeFlowResponseMessage name. */
                public name: string;

                /** NativeFlowResponseMessage paramsJson. */
                public paramsJson: string;

                /** NativeFlowResponseMessage version. */
                public version: number;

                /**
                 * Creates a new NativeFlowResponseMessage instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns NativeFlowResponseMessage instance
                 */
                public static create(properties?: E2E.Message.InteractiveResponseMessage.INativeFlowResponseMessage): E2E.Message.InteractiveResponseMessage.NativeFlowResponseMessage;

                /**
                 * Encodes the specified NativeFlowResponseMessage message. Does not implicitly {@link E2E.Message.InteractiveResponseMessage.NativeFlowResponseMessage.verify|verify} messages.
                 * @param message NativeFlowResponseMessage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.InteractiveResponseMessage.INativeFlowResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified NativeFlowResponseMessage message, length delimited. Does not implicitly {@link E2E.Message.InteractiveResponseMessage.NativeFlowResponseMessage.verify|verify} messages.
                 * @param message NativeFlowResponseMessage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.InteractiveResponseMessage.INativeFlowResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a NativeFlowResponseMessage message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns NativeFlowResponseMessage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InteractiveResponseMessage.NativeFlowResponseMessage;

                /**
                 * Decodes a NativeFlowResponseMessage message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns NativeFlowResponseMessage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InteractiveResponseMessage.NativeFlowResponseMessage;

                /**
                 * Verifies a NativeFlowResponseMessage message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a NativeFlowResponseMessage message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns NativeFlowResponseMessage
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.InteractiveResponseMessage.NativeFlowResponseMessage;

                /**
                 * Creates a plain object from a NativeFlowResponseMessage message. Also converts values to other types if specified.
                 * @param message NativeFlowResponseMessage
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.InteractiveResponseMessage.NativeFlowResponseMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this NativeFlowResponseMessage to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for NativeFlowResponseMessage
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of an InvoiceMessage. */
        interface IInvoiceMessage {

            /** InvoiceMessage note */
            note?: (string|null);

            /** InvoiceMessage token */
            token?: (string|null);

            /** InvoiceMessage attachmentType */
            attachmentType?: (E2E.Message.InvoiceMessage.AttachmentType|null);

            /** InvoiceMessage attachmentMimetype */
            attachmentMimetype?: (string|null);

            /** InvoiceMessage attachmentMediaKey */
            attachmentMediaKey?: (Uint8Array|null);

            /** InvoiceMessage attachmentMediaKeyTimestamp */
            attachmentMediaKeyTimestamp?: (number|Long|null);

            /** InvoiceMessage attachmentFileSha256 */
            attachmentFileSha256?: (Uint8Array|null);

            /** InvoiceMessage attachmentFileEncSha256 */
            attachmentFileEncSha256?: (Uint8Array|null);

            /** InvoiceMessage attachmentDirectPath */
            attachmentDirectPath?: (string|null);

            /** InvoiceMessage attachmentJpegThumbnail */
            attachmentJpegThumbnail?: (Uint8Array|null);
        }

        /** Represents an InvoiceMessage. */
        class InvoiceMessage implements IInvoiceMessage {

            /**
             * Constructs a new InvoiceMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IInvoiceMessage);

            /** InvoiceMessage note. */
            public note: string;

            /** InvoiceMessage token. */
            public token: string;

            /** InvoiceMessage attachmentType. */
            public attachmentType: E2E.Message.InvoiceMessage.AttachmentType;

            /** InvoiceMessage attachmentMimetype. */
            public attachmentMimetype: string;

            /** InvoiceMessage attachmentMediaKey. */
            public attachmentMediaKey: Uint8Array;

            /** InvoiceMessage attachmentMediaKeyTimestamp. */
            public attachmentMediaKeyTimestamp: (number|Long);

            /** InvoiceMessage attachmentFileSha256. */
            public attachmentFileSha256: Uint8Array;

            /** InvoiceMessage attachmentFileEncSha256. */
            public attachmentFileEncSha256: Uint8Array;

            /** InvoiceMessage attachmentDirectPath. */
            public attachmentDirectPath: string;

            /** InvoiceMessage attachmentJpegThumbnail. */
            public attachmentJpegThumbnail: Uint8Array;

            /**
             * Creates a new InvoiceMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns InvoiceMessage instance
             */
            public static create(properties?: E2E.Message.IInvoiceMessage): E2E.Message.InvoiceMessage;

            /**
             * Encodes the specified InvoiceMessage message. Does not implicitly {@link E2E.Message.InvoiceMessage.verify|verify} messages.
             * @param message InvoiceMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IInvoiceMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified InvoiceMessage message, length delimited. Does not implicitly {@link E2E.Message.InvoiceMessage.verify|verify} messages.
             * @param message InvoiceMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IInvoiceMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an InvoiceMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns InvoiceMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.InvoiceMessage;

            /**
             * Decodes an InvoiceMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns InvoiceMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.InvoiceMessage;

            /**
             * Verifies an InvoiceMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an InvoiceMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns InvoiceMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.InvoiceMessage;

            /**
             * Creates a plain object from an InvoiceMessage message. Also converts values to other types if specified.
             * @param message InvoiceMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.InvoiceMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this InvoiceMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for InvoiceMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace InvoiceMessage {

            /** AttachmentType enum. */
            enum AttachmentType {
                IMAGE = 0,
                PDF = 1
            }
        }

        /** Properties of a KeepInChatMessage. */
        interface IKeepInChatMessage {

            /** KeepInChatMessage key */
            key?: (Protocol.IMessageKey|null);

            /** KeepInChatMessage keepType */
            keepType?: (E2E.KeepType|null);

            /** KeepInChatMessage timestampMs */
            timestampMs?: (number|Long|null);
        }

        /** Represents a KeepInChatMessage. */
        class KeepInChatMessage implements IKeepInChatMessage {

            /**
             * Constructs a new KeepInChatMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IKeepInChatMessage);

            /** KeepInChatMessage key. */
            public key?: (Protocol.IMessageKey|null);

            /** KeepInChatMessage keepType. */
            public keepType: E2E.KeepType;

            /** KeepInChatMessage timestampMs. */
            public timestampMs: (number|Long);

            /**
             * Creates a new KeepInChatMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns KeepInChatMessage instance
             */
            public static create(properties?: E2E.Message.IKeepInChatMessage): E2E.Message.KeepInChatMessage;

            /**
             * Encodes the specified KeepInChatMessage message. Does not implicitly {@link E2E.Message.KeepInChatMessage.verify|verify} messages.
             * @param message KeepInChatMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IKeepInChatMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified KeepInChatMessage message, length delimited. Does not implicitly {@link E2E.Message.KeepInChatMessage.verify|verify} messages.
             * @param message KeepInChatMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IKeepInChatMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a KeepInChatMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns KeepInChatMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.KeepInChatMessage;

            /**
             * Decodes a KeepInChatMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns KeepInChatMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.KeepInChatMessage;

            /**
             * Verifies a KeepInChatMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a KeepInChatMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns KeepInChatMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.KeepInChatMessage;

            /**
             * Creates a plain object from a KeepInChatMessage message. Also converts values to other types if specified.
             * @param message KeepInChatMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.KeepInChatMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this KeepInChatMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for KeepInChatMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a LinkPreviewMetadata. */
        interface ILinkPreviewMetadata {

            /** LinkPreviewMetadata paymentLinkMetadata */
            paymentLinkMetadata?: (E2E.Message.IPaymentLinkMetadata|null);

            /** LinkPreviewMetadata urlMetadata */
            urlMetadata?: (E2E.Message.IURLMetadata|null);

            /** LinkPreviewMetadata fbExperimentId */
            fbExperimentId?: (number|null);

            /** LinkPreviewMetadata linkMediaDuration */
            linkMediaDuration?: (number|null);

            /** LinkPreviewMetadata socialMediaPostType */
            socialMediaPostType?: (E2E.Message.LinkPreviewMetadata.SocialMediaPostType|null);

            /** LinkPreviewMetadata linkInlineVideoMuted */
            linkInlineVideoMuted?: (boolean|null);
        }

        /** Represents a LinkPreviewMetadata. */
        class LinkPreviewMetadata implements ILinkPreviewMetadata {

            /**
             * Constructs a new LinkPreviewMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ILinkPreviewMetadata);

            /** LinkPreviewMetadata paymentLinkMetadata. */
            public paymentLinkMetadata?: (E2E.Message.IPaymentLinkMetadata|null);

            /** LinkPreviewMetadata urlMetadata. */
            public urlMetadata?: (E2E.Message.IURLMetadata|null);

            /** LinkPreviewMetadata fbExperimentId. */
            public fbExperimentId: number;

            /** LinkPreviewMetadata linkMediaDuration. */
            public linkMediaDuration: number;

            /** LinkPreviewMetadata socialMediaPostType. */
            public socialMediaPostType: E2E.Message.LinkPreviewMetadata.SocialMediaPostType;

            /** LinkPreviewMetadata linkInlineVideoMuted. */
            public linkInlineVideoMuted: boolean;

            /**
             * Creates a new LinkPreviewMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns LinkPreviewMetadata instance
             */
            public static create(properties?: E2E.Message.ILinkPreviewMetadata): E2E.Message.LinkPreviewMetadata;

            /**
             * Encodes the specified LinkPreviewMetadata message. Does not implicitly {@link E2E.Message.LinkPreviewMetadata.verify|verify} messages.
             * @param message LinkPreviewMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ILinkPreviewMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified LinkPreviewMetadata message, length delimited. Does not implicitly {@link E2E.Message.LinkPreviewMetadata.verify|verify} messages.
             * @param message LinkPreviewMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ILinkPreviewMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a LinkPreviewMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns LinkPreviewMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.LinkPreviewMetadata;

            /**
             * Decodes a LinkPreviewMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns LinkPreviewMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.LinkPreviewMetadata;

            /**
             * Verifies a LinkPreviewMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a LinkPreviewMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns LinkPreviewMetadata
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.LinkPreviewMetadata;

            /**
             * Creates a plain object from a LinkPreviewMetadata message. Also converts values to other types if specified.
             * @param message LinkPreviewMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.LinkPreviewMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this LinkPreviewMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for LinkPreviewMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace LinkPreviewMetadata {

            /** SocialMediaPostType enum. */
            enum SocialMediaPostType {
                NONE = 0,
                REEL = 1,
                LIVE_VIDEO = 2,
                LONG_VIDEO = 3,
                SINGLE_IMAGE = 4,
                CAROUSEL = 5
            }
        }

        /** Properties of a ListMessage. */
        interface IListMessage {

            /** ListMessage title */
            title?: (string|null);

            /** ListMessage description */
            description?: (string|null);

            /** ListMessage buttonText */
            buttonText?: (string|null);

            /** ListMessage listType */
            listType?: (E2E.Message.ListMessage.ListType|null);

            /** ListMessage sections */
            sections?: (E2E.Message.ListMessage.ISection[]|null);

            /** ListMessage productListInfo */
            productListInfo?: (E2E.Message.ListMessage.IProductListInfo|null);

            /** ListMessage footerText */
            footerText?: (string|null);

            /** ListMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);
        }

        /** Represents a ListMessage. */
        class ListMessage implements IListMessage {

            /**
             * Constructs a new ListMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IListMessage);

            /** ListMessage title. */
            public title: string;

            /** ListMessage description. */
            public description: string;

            /** ListMessage buttonText. */
            public buttonText: string;

            /** ListMessage listType. */
            public listType: E2E.Message.ListMessage.ListType;

            /** ListMessage sections. */
            public sections: E2E.Message.ListMessage.ISection[];

            /** ListMessage productListInfo. */
            public productListInfo?: (E2E.Message.ListMessage.IProductListInfo|null);

            /** ListMessage footerText. */
            public footerText: string;

            /** ListMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /**
             * Creates a new ListMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ListMessage instance
             */
            public static create(properties?: E2E.Message.IListMessage): E2E.Message.ListMessage;

            /**
             * Encodes the specified ListMessage message. Does not implicitly {@link E2E.Message.ListMessage.verify|verify} messages.
             * @param message ListMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IListMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ListMessage message, length delimited. Does not implicitly {@link E2E.Message.ListMessage.verify|verify} messages.
             * @param message ListMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IListMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ListMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ListMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ListMessage;

            /**
             * Decodes a ListMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ListMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ListMessage;

            /**
             * Verifies a ListMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ListMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ListMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ListMessage;

            /**
             * Creates a plain object from a ListMessage message. Also converts values to other types if specified.
             * @param message ListMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ListMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ListMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ListMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ListMessage {

            /** ListType enum. */
            enum ListType {
                UNKNOWN = 0,
                SINGLE_SELECT = 1,
                PRODUCT_LIST = 2
            }

            /** Properties of a Product. */
            interface IProduct {

                /** Product productId */
                productId?: (string|null);
            }

            /** Represents a Product. */
            class Product implements IProduct {

                /**
                 * Constructs a new Product.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.ListMessage.IProduct);

                /** Product productId. */
                public productId: string;

                /**
                 * Creates a new Product instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Product instance
                 */
                public static create(properties?: E2E.Message.ListMessage.IProduct): E2E.Message.ListMessage.Product;

                /**
                 * Encodes the specified Product message. Does not implicitly {@link E2E.Message.ListMessage.Product.verify|verify} messages.
                 * @param message Product message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.ListMessage.IProduct, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Product message, length delimited. Does not implicitly {@link E2E.Message.ListMessage.Product.verify|verify} messages.
                 * @param message Product message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.ListMessage.IProduct, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Product message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Product
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ListMessage.Product;

                /**
                 * Decodes a Product message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Product
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ListMessage.Product;

                /**
                 * Verifies a Product message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Product message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Product
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.ListMessage.Product;

                /**
                 * Creates a plain object from a Product message. Also converts values to other types if specified.
                 * @param message Product
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.ListMessage.Product, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Product to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Product
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ProductListHeaderImage. */
            interface IProductListHeaderImage {

                /** ProductListHeaderImage productId */
                productId?: (string|null);

                /** ProductListHeaderImage jpegThumbnail */
                jpegThumbnail?: (Uint8Array|null);
            }

            /** Represents a ProductListHeaderImage. */
            class ProductListHeaderImage implements IProductListHeaderImage {

                /**
                 * Constructs a new ProductListHeaderImage.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.ListMessage.IProductListHeaderImage);

                /** ProductListHeaderImage productId. */
                public productId: string;

                /** ProductListHeaderImage jpegThumbnail. */
                public jpegThumbnail: Uint8Array;

                /**
                 * Creates a new ProductListHeaderImage instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ProductListHeaderImage instance
                 */
                public static create(properties?: E2E.Message.ListMessage.IProductListHeaderImage): E2E.Message.ListMessage.ProductListHeaderImage;

                /**
                 * Encodes the specified ProductListHeaderImage message. Does not implicitly {@link E2E.Message.ListMessage.ProductListHeaderImage.verify|verify} messages.
                 * @param message ProductListHeaderImage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.ListMessage.IProductListHeaderImage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ProductListHeaderImage message, length delimited. Does not implicitly {@link E2E.Message.ListMessage.ProductListHeaderImage.verify|verify} messages.
                 * @param message ProductListHeaderImage message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.ListMessage.IProductListHeaderImage, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ProductListHeaderImage message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ProductListHeaderImage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ListMessage.ProductListHeaderImage;

                /**
                 * Decodes a ProductListHeaderImage message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ProductListHeaderImage
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ListMessage.ProductListHeaderImage;

                /**
                 * Verifies a ProductListHeaderImage message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ProductListHeaderImage message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ProductListHeaderImage
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.ListMessage.ProductListHeaderImage;

                /**
                 * Creates a plain object from a ProductListHeaderImage message. Also converts values to other types if specified.
                 * @param message ProductListHeaderImage
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.ListMessage.ProductListHeaderImage, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ProductListHeaderImage to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ProductListHeaderImage
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ProductListInfo. */
            interface IProductListInfo {

                /** ProductListInfo productSections */
                productSections?: (E2E.Message.ListMessage.IProductSection[]|null);

                /** ProductListInfo headerImage */
                headerImage?: (E2E.Message.ListMessage.IProductListHeaderImage|null);

                /** ProductListInfo businessOwnerJid */
                businessOwnerJid?: (string|null);
            }

            /** Represents a ProductListInfo. */
            class ProductListInfo implements IProductListInfo {

                /**
                 * Constructs a new ProductListInfo.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.ListMessage.IProductListInfo);

                /** ProductListInfo productSections. */
                public productSections: E2E.Message.ListMessage.IProductSection[];

                /** ProductListInfo headerImage. */
                public headerImage?: (E2E.Message.ListMessage.IProductListHeaderImage|null);

                /** ProductListInfo businessOwnerJid. */
                public businessOwnerJid: string;

                /**
                 * Creates a new ProductListInfo instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ProductListInfo instance
                 */
                public static create(properties?: E2E.Message.ListMessage.IProductListInfo): E2E.Message.ListMessage.ProductListInfo;

                /**
                 * Encodes the specified ProductListInfo message. Does not implicitly {@link E2E.Message.ListMessage.ProductListInfo.verify|verify} messages.
                 * @param message ProductListInfo message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.ListMessage.IProductListInfo, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ProductListInfo message, length delimited. Does not implicitly {@link E2E.Message.ListMessage.ProductListInfo.verify|verify} messages.
                 * @param message ProductListInfo message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.ListMessage.IProductListInfo, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ProductListInfo message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ProductListInfo
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ListMessage.ProductListInfo;

                /**
                 * Decodes a ProductListInfo message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ProductListInfo
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ListMessage.ProductListInfo;

                /**
                 * Verifies a ProductListInfo message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ProductListInfo message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ProductListInfo
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.ListMessage.ProductListInfo;

                /**
                 * Creates a plain object from a ProductListInfo message. Also converts values to other types if specified.
                 * @param message ProductListInfo
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.ListMessage.ProductListInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ProductListInfo to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ProductListInfo
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ProductSection. */
            interface IProductSection {

                /** ProductSection title */
                title?: (string|null);

                /** ProductSection products */
                products?: (E2E.Message.ListMessage.IProduct[]|null);
            }

            /** Represents a ProductSection. */
            class ProductSection implements IProductSection {

                /**
                 * Constructs a new ProductSection.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.ListMessage.IProductSection);

                /** ProductSection title. */
                public title: string;

                /** ProductSection products. */
                public products: E2E.Message.ListMessage.IProduct[];

                /**
                 * Creates a new ProductSection instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ProductSection instance
                 */
                public static create(properties?: E2E.Message.ListMessage.IProductSection): E2E.Message.ListMessage.ProductSection;

                /**
                 * Encodes the specified ProductSection message. Does not implicitly {@link E2E.Message.ListMessage.ProductSection.verify|verify} messages.
                 * @param message ProductSection message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.ListMessage.IProductSection, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ProductSection message, length delimited. Does not implicitly {@link E2E.Message.ListMessage.ProductSection.verify|verify} messages.
                 * @param message ProductSection message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.ListMessage.IProductSection, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ProductSection message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ProductSection
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ListMessage.ProductSection;

                /**
                 * Decodes a ProductSection message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ProductSection
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ListMessage.ProductSection;

                /**
                 * Verifies a ProductSection message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ProductSection message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ProductSection
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.ListMessage.ProductSection;

                /**
                 * Creates a plain object from a ProductSection message. Also converts values to other types if specified.
                 * @param message ProductSection
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.ListMessage.ProductSection, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ProductSection to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ProductSection
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a Row. */
            interface IRow {

                /** Row title */
                title?: (string|null);

                /** Row description */
                description?: (string|null);

                /** Row rowId */
                rowId?: (string|null);
            }

            /** Represents a Row. */
            class Row implements IRow {

                /**
                 * Constructs a new Row.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.ListMessage.IRow);

                /** Row title. */
                public title: string;

                /** Row description. */
                public description: string;

                /** Row rowId. */
                public rowId: string;

                /**
                 * Creates a new Row instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Row instance
                 */
                public static create(properties?: E2E.Message.ListMessage.IRow): E2E.Message.ListMessage.Row;

                /**
                 * Encodes the specified Row message. Does not implicitly {@link E2E.Message.ListMessage.Row.verify|verify} messages.
                 * @param message Row message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.ListMessage.IRow, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Row message, length delimited. Does not implicitly {@link E2E.Message.ListMessage.Row.verify|verify} messages.
                 * @param message Row message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.ListMessage.IRow, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Row message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Row
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ListMessage.Row;

                /**
                 * Decodes a Row message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Row
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ListMessage.Row;

                /**
                 * Verifies a Row message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Row message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Row
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.ListMessage.Row;

                /**
                 * Creates a plain object from a Row message. Also converts values to other types if specified.
                 * @param message Row
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.ListMessage.Row, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Row to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Row
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a Section. */
            interface ISection {

                /** Section title */
                title?: (string|null);

                /** Section rows */
                rows?: (E2E.Message.ListMessage.IRow[]|null);
            }

            /** Represents a Section. */
            class Section implements ISection {

                /**
                 * Constructs a new Section.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.ListMessage.ISection);

                /** Section title. */
                public title: string;

                /** Section rows. */
                public rows: E2E.Message.ListMessage.IRow[];

                /**
                 * Creates a new Section instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Section instance
                 */
                public static create(properties?: E2E.Message.ListMessage.ISection): E2E.Message.ListMessage.Section;

                /**
                 * Encodes the specified Section message. Does not implicitly {@link E2E.Message.ListMessage.Section.verify|verify} messages.
                 * @param message Section message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.ListMessage.ISection, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Section message, length delimited. Does not implicitly {@link E2E.Message.ListMessage.Section.verify|verify} messages.
                 * @param message Section message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.ListMessage.ISection, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Section message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Section
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ListMessage.Section;

                /**
                 * Decodes a Section message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Section
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ListMessage.Section;

                /**
                 * Verifies a Section message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Section message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Section
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.ListMessage.Section;

                /**
                 * Creates a plain object from a Section message. Also converts values to other types if specified.
                 * @param message Section
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.ListMessage.Section, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Section to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Section
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a ListResponseMessage. */
        interface IListResponseMessage {

            /** ListResponseMessage title */
            title?: (string|null);

            /** ListResponseMessage listType */
            listType?: (E2E.Message.ListResponseMessage.ListType|null);

            /** ListResponseMessage singleSelectReply */
            singleSelectReply?: (E2E.Message.ListResponseMessage.ISingleSelectReply|null);

            /** ListResponseMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** ListResponseMessage description */
            description?: (string|null);
        }

        /** Represents a ListResponseMessage. */
        class ListResponseMessage implements IListResponseMessage {

            /**
             * Constructs a new ListResponseMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IListResponseMessage);

            /** ListResponseMessage title. */
            public title: string;

            /** ListResponseMessage listType. */
            public listType: E2E.Message.ListResponseMessage.ListType;

            /** ListResponseMessage singleSelectReply. */
            public singleSelectReply?: (E2E.Message.ListResponseMessage.ISingleSelectReply|null);

            /** ListResponseMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** ListResponseMessage description. */
            public description: string;

            /**
             * Creates a new ListResponseMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ListResponseMessage instance
             */
            public static create(properties?: E2E.Message.IListResponseMessage): E2E.Message.ListResponseMessage;

            /**
             * Encodes the specified ListResponseMessage message. Does not implicitly {@link E2E.Message.ListResponseMessage.verify|verify} messages.
             * @param message ListResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IListResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ListResponseMessage message, length delimited. Does not implicitly {@link E2E.Message.ListResponseMessage.verify|verify} messages.
             * @param message ListResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IListResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ListResponseMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ListResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ListResponseMessage;

            /**
             * Decodes a ListResponseMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ListResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ListResponseMessage;

            /**
             * Verifies a ListResponseMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ListResponseMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ListResponseMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ListResponseMessage;

            /**
             * Creates a plain object from a ListResponseMessage message. Also converts values to other types if specified.
             * @param message ListResponseMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ListResponseMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ListResponseMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ListResponseMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ListResponseMessage {

            /** ListType enum. */
            enum ListType {
                UNKNOWN = 0,
                SINGLE_SELECT = 1
            }

            /** Properties of a SingleSelectReply. */
            interface ISingleSelectReply {

                /** SingleSelectReply selectedRowId */
                selectedRowId?: (string|null);
            }

            /** Represents a SingleSelectReply. */
            class SingleSelectReply implements ISingleSelectReply {

                /**
                 * Constructs a new SingleSelectReply.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.ListResponseMessage.ISingleSelectReply);

                /** SingleSelectReply selectedRowId. */
                public selectedRowId: string;

                /**
                 * Creates a new SingleSelectReply instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns SingleSelectReply instance
                 */
                public static create(properties?: E2E.Message.ListResponseMessage.ISingleSelectReply): E2E.Message.ListResponseMessage.SingleSelectReply;

                /**
                 * Encodes the specified SingleSelectReply message. Does not implicitly {@link E2E.Message.ListResponseMessage.SingleSelectReply.verify|verify} messages.
                 * @param message SingleSelectReply message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.ListResponseMessage.ISingleSelectReply, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified SingleSelectReply message, length delimited. Does not implicitly {@link E2E.Message.ListResponseMessage.SingleSelectReply.verify|verify} messages.
                 * @param message SingleSelectReply message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.ListResponseMessage.ISingleSelectReply, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a SingleSelectReply message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns SingleSelectReply
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ListResponseMessage.SingleSelectReply;

                /**
                 * Decodes a SingleSelectReply message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns SingleSelectReply
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ListResponseMessage.SingleSelectReply;

                /**
                 * Verifies a SingleSelectReply message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a SingleSelectReply message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns SingleSelectReply
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.ListResponseMessage.SingleSelectReply;

                /**
                 * Creates a plain object from a SingleSelectReply message. Also converts values to other types if specified.
                 * @param message SingleSelectReply
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.ListResponseMessage.SingleSelectReply, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this SingleSelectReply to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for SingleSelectReply
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a LiveLocationMessage. */
        interface ILiveLocationMessage {

            /** LiveLocationMessage degreesLatitude */
            degreesLatitude?: (number|null);

            /** LiveLocationMessage degreesLongitude */
            degreesLongitude?: (number|null);

            /** LiveLocationMessage accuracyInMeters */
            accuracyInMeters?: (number|null);

            /** LiveLocationMessage speedInMps */
            speedInMps?: (number|null);

            /** LiveLocationMessage degreesClockwiseFromMagneticNorth */
            degreesClockwiseFromMagneticNorth?: (number|null);

            /** LiveLocationMessage caption */
            caption?: (string|null);

            /** LiveLocationMessage sequenceNumber */
            sequenceNumber?: (number|Long|null);

            /** LiveLocationMessage timeOffset */
            timeOffset?: (number|null);

            /** LiveLocationMessage jpegThumbnail */
            jpegThumbnail?: (Uint8Array|null);

            /** LiveLocationMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);
        }

        /** Represents a LiveLocationMessage. */
        class LiveLocationMessage implements ILiveLocationMessage {

            /**
             * Constructs a new LiveLocationMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ILiveLocationMessage);

            /** LiveLocationMessage degreesLatitude. */
            public degreesLatitude: number;

            /** LiveLocationMessage degreesLongitude. */
            public degreesLongitude: number;

            /** LiveLocationMessage accuracyInMeters. */
            public accuracyInMeters: number;

            /** LiveLocationMessage speedInMps. */
            public speedInMps: number;

            /** LiveLocationMessage degreesClockwiseFromMagneticNorth. */
            public degreesClockwiseFromMagneticNorth: number;

            /** LiveLocationMessage caption. */
            public caption: string;

            /** LiveLocationMessage sequenceNumber. */
            public sequenceNumber: (number|Long);

            /** LiveLocationMessage timeOffset. */
            public timeOffset: number;

            /** LiveLocationMessage jpegThumbnail. */
            public jpegThumbnail: Uint8Array;

            /** LiveLocationMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /**
             * Creates a new LiveLocationMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns LiveLocationMessage instance
             */
            public static create(properties?: E2E.Message.ILiveLocationMessage): E2E.Message.LiveLocationMessage;

            /**
             * Encodes the specified LiveLocationMessage message. Does not implicitly {@link E2E.Message.LiveLocationMessage.verify|verify} messages.
             * @param message LiveLocationMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ILiveLocationMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified LiveLocationMessage message, length delimited. Does not implicitly {@link E2E.Message.LiveLocationMessage.verify|verify} messages.
             * @param message LiveLocationMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ILiveLocationMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a LiveLocationMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns LiveLocationMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.LiveLocationMessage;

            /**
             * Decodes a LiveLocationMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns LiveLocationMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.LiveLocationMessage;

            /**
             * Verifies a LiveLocationMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a LiveLocationMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns LiveLocationMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.LiveLocationMessage;

            /**
             * Creates a plain object from a LiveLocationMessage message. Also converts values to other types if specified.
             * @param message LiveLocationMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.LiveLocationMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this LiveLocationMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for LiveLocationMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a LocationMessage. */
        interface ILocationMessage {

            /** LocationMessage degreesLatitude */
            degreesLatitude?: (number|null);

            /** LocationMessage degreesLongitude */
            degreesLongitude?: (number|null);

            /** LocationMessage name */
            name?: (string|null);

            /** LocationMessage address */
            address?: (string|null);

            /** LocationMessage url */
            url?: (string|null);

            /** LocationMessage isLive */
            isLive?: (boolean|null);

            /** LocationMessage accuracyInMeters */
            accuracyInMeters?: (number|null);

            /** LocationMessage speedInMps */
            speedInMps?: (number|null);

            /** LocationMessage degreesClockwiseFromMagneticNorth */
            degreesClockwiseFromMagneticNorth?: (number|null);

            /** LocationMessage comment */
            comment?: (string|null);

            /** LocationMessage jpegThumbnail */
            jpegThumbnail?: (Uint8Array|null);

            /** LocationMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);
        }

        /** Represents a LocationMessage. */
        class LocationMessage implements ILocationMessage {

            /**
             * Constructs a new LocationMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ILocationMessage);

            /** LocationMessage degreesLatitude. */
            public degreesLatitude: number;

            /** LocationMessage degreesLongitude. */
            public degreesLongitude: number;

            /** LocationMessage name. */
            public name: string;

            /** LocationMessage address. */
            public address: string;

            /** LocationMessage url. */
            public url: string;

            /** LocationMessage isLive. */
            public isLive: boolean;

            /** LocationMessage accuracyInMeters. */
            public accuracyInMeters: number;

            /** LocationMessage speedInMps. */
            public speedInMps: number;

            /** LocationMessage degreesClockwiseFromMagneticNorth. */
            public degreesClockwiseFromMagneticNorth: number;

            /** LocationMessage comment. */
            public comment: string;

            /** LocationMessage jpegThumbnail. */
            public jpegThumbnail: Uint8Array;

            /** LocationMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /**
             * Creates a new LocationMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns LocationMessage instance
             */
            public static create(properties?: E2E.Message.ILocationMessage): E2E.Message.LocationMessage;

            /**
             * Encodes the specified LocationMessage message. Does not implicitly {@link E2E.Message.LocationMessage.verify|verify} messages.
             * @param message LocationMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ILocationMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified LocationMessage message, length delimited. Does not implicitly {@link E2E.Message.LocationMessage.verify|verify} messages.
             * @param message LocationMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ILocationMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a LocationMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns LocationMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.LocationMessage;

            /**
             * Decodes a LocationMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns LocationMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.LocationMessage;

            /**
             * Verifies a LocationMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a LocationMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns LocationMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.LocationMessage;

            /**
             * Creates a plain object from a LocationMessage message. Also converts values to other types if specified.
             * @param message LocationMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.LocationMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this LocationMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for LocationMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a MMSThumbnailMetadata. */
        interface IMMSThumbnailMetadata {

            /** MMSThumbnailMetadata thumbnailDirectPath */
            thumbnailDirectPath?: (string|null);

            /** MMSThumbnailMetadata thumbnailSha256 */
            thumbnailSha256?: (Uint8Array|null);

            /** MMSThumbnailMetadata thumbnailEncSha256 */
            thumbnailEncSha256?: (Uint8Array|null);

            /** MMSThumbnailMetadata mediaKey */
            mediaKey?: (Uint8Array|null);

            /** MMSThumbnailMetadata mediaKeyTimestamp */
            mediaKeyTimestamp?: (number|Long|null);

            /** MMSThumbnailMetadata thumbnailHeight */
            thumbnailHeight?: (number|null);

            /** MMSThumbnailMetadata thumbnailWidth */
            thumbnailWidth?: (number|null);

            /** MMSThumbnailMetadata mediaKeyDomain */
            mediaKeyDomain?: (E2E.Message.MediaKeyDomain|null);
        }

        /** Represents a MMSThumbnailMetadata. */
        class MMSThumbnailMetadata implements IMMSThumbnailMetadata {

            /**
             * Constructs a new MMSThumbnailMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IMMSThumbnailMetadata);

            /** MMSThumbnailMetadata thumbnailDirectPath. */
            public thumbnailDirectPath: string;

            /** MMSThumbnailMetadata thumbnailSha256. */
            public thumbnailSha256: Uint8Array;

            /** MMSThumbnailMetadata thumbnailEncSha256. */
            public thumbnailEncSha256: Uint8Array;

            /** MMSThumbnailMetadata mediaKey. */
            public mediaKey: Uint8Array;

            /** MMSThumbnailMetadata mediaKeyTimestamp. */
            public mediaKeyTimestamp: (number|Long);

            /** MMSThumbnailMetadata thumbnailHeight. */
            public thumbnailHeight: number;

            /** MMSThumbnailMetadata thumbnailWidth. */
            public thumbnailWidth: number;

            /** MMSThumbnailMetadata mediaKeyDomain. */
            public mediaKeyDomain: E2E.Message.MediaKeyDomain;

            /**
             * Creates a new MMSThumbnailMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MMSThumbnailMetadata instance
             */
            public static create(properties?: E2E.Message.IMMSThumbnailMetadata): E2E.Message.MMSThumbnailMetadata;

            /**
             * Encodes the specified MMSThumbnailMetadata message. Does not implicitly {@link E2E.Message.MMSThumbnailMetadata.verify|verify} messages.
             * @param message MMSThumbnailMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IMMSThumbnailMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MMSThumbnailMetadata message, length delimited. Does not implicitly {@link E2E.Message.MMSThumbnailMetadata.verify|verify} messages.
             * @param message MMSThumbnailMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IMMSThumbnailMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MMSThumbnailMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MMSThumbnailMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.MMSThumbnailMetadata;

            /**
             * Decodes a MMSThumbnailMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MMSThumbnailMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.MMSThumbnailMetadata;

            /**
             * Verifies a MMSThumbnailMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MMSThumbnailMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MMSThumbnailMetadata
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.MMSThumbnailMetadata;

            /**
             * Creates a plain object from a MMSThumbnailMetadata message. Also converts values to other types if specified.
             * @param message MMSThumbnailMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.MMSThumbnailMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MMSThumbnailMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MMSThumbnailMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** MediaKeyDomain enum. */
        enum MediaKeyDomain {
            UNSET = 0,
            E2EE_CHAT = 1,
            STATUS = 2,
            CAPI = 3,
            BOT = 4
        }

        /** Properties of a MessageHistoryBundle. */
        interface IMessageHistoryBundle {

            /** MessageHistoryBundle mimetype */
            mimetype?: (string|null);

            /** MessageHistoryBundle fileSha256 */
            fileSha256?: (Uint8Array|null);

            /** MessageHistoryBundle mediaKey */
            mediaKey?: (Uint8Array|null);

            /** MessageHistoryBundle fileEncSha256 */
            fileEncSha256?: (Uint8Array|null);

            /** MessageHistoryBundle directPath */
            directPath?: (string|null);

            /** MessageHistoryBundle mediaKeyTimestamp */
            mediaKeyTimestamp?: (number|Long|null);

            /** MessageHistoryBundle contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** MessageHistoryBundle messageHistoryMetadata */
            messageHistoryMetadata?: (E2E.Message.IMessageHistoryMetadata|null);
        }

        /** Represents a MessageHistoryBundle. */
        class MessageHistoryBundle implements IMessageHistoryBundle {

            /**
             * Constructs a new MessageHistoryBundle.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IMessageHistoryBundle);

            /** MessageHistoryBundle mimetype. */
            public mimetype: string;

            /** MessageHistoryBundle fileSha256. */
            public fileSha256: Uint8Array;

            /** MessageHistoryBundle mediaKey. */
            public mediaKey: Uint8Array;

            /** MessageHistoryBundle fileEncSha256. */
            public fileEncSha256: Uint8Array;

            /** MessageHistoryBundle directPath. */
            public directPath: string;

            /** MessageHistoryBundle mediaKeyTimestamp. */
            public mediaKeyTimestamp: (number|Long);

            /** MessageHistoryBundle contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** MessageHistoryBundle messageHistoryMetadata. */
            public messageHistoryMetadata?: (E2E.Message.IMessageHistoryMetadata|null);

            /**
             * Creates a new MessageHistoryBundle instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MessageHistoryBundle instance
             */
            public static create(properties?: E2E.Message.IMessageHistoryBundle): E2E.Message.MessageHistoryBundle;

            /**
             * Encodes the specified MessageHistoryBundle message. Does not implicitly {@link E2E.Message.MessageHistoryBundle.verify|verify} messages.
             * @param message MessageHistoryBundle message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IMessageHistoryBundle, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MessageHistoryBundle message, length delimited. Does not implicitly {@link E2E.Message.MessageHistoryBundle.verify|verify} messages.
             * @param message MessageHistoryBundle message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IMessageHistoryBundle, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MessageHistoryBundle message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MessageHistoryBundle
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.MessageHistoryBundle;

            /**
             * Decodes a MessageHistoryBundle message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MessageHistoryBundle
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.MessageHistoryBundle;

            /**
             * Verifies a MessageHistoryBundle message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MessageHistoryBundle message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MessageHistoryBundle
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.MessageHistoryBundle;

            /**
             * Creates a plain object from a MessageHistoryBundle message. Also converts values to other types if specified.
             * @param message MessageHistoryBundle
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.MessageHistoryBundle, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MessageHistoryBundle to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MessageHistoryBundle
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a MessageHistoryMetadata. */
        interface IMessageHistoryMetadata {

            /** MessageHistoryMetadata historyReceivers */
            historyReceivers?: (string[]|null);

            /** MessageHistoryMetadata oldestMessageTimestamp */
            oldestMessageTimestamp?: (number|Long|null);

            /** MessageHistoryMetadata messageCount */
            messageCount?: (number|Long|null);
        }

        /** Represents a MessageHistoryMetadata. */
        class MessageHistoryMetadata implements IMessageHistoryMetadata {

            /**
             * Constructs a new MessageHistoryMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IMessageHistoryMetadata);

            /** MessageHistoryMetadata historyReceivers. */
            public historyReceivers: string[];

            /** MessageHistoryMetadata oldestMessageTimestamp. */
            public oldestMessageTimestamp: (number|Long);

            /** MessageHistoryMetadata messageCount. */
            public messageCount: (number|Long);

            /**
             * Creates a new MessageHistoryMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MessageHistoryMetadata instance
             */
            public static create(properties?: E2E.Message.IMessageHistoryMetadata): E2E.Message.MessageHistoryMetadata;

            /**
             * Encodes the specified MessageHistoryMetadata message. Does not implicitly {@link E2E.Message.MessageHistoryMetadata.verify|verify} messages.
             * @param message MessageHistoryMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IMessageHistoryMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MessageHistoryMetadata message, length delimited. Does not implicitly {@link E2E.Message.MessageHistoryMetadata.verify|verify} messages.
             * @param message MessageHistoryMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IMessageHistoryMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MessageHistoryMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MessageHistoryMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.MessageHistoryMetadata;

            /**
             * Decodes a MessageHistoryMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MessageHistoryMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.MessageHistoryMetadata;

            /**
             * Verifies a MessageHistoryMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MessageHistoryMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MessageHistoryMetadata
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.MessageHistoryMetadata;

            /**
             * Creates a plain object from a MessageHistoryMetadata message. Also converts values to other types if specified.
             * @param message MessageHistoryMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.MessageHistoryMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MessageHistoryMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MessageHistoryMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a MessageHistoryNotice. */
        interface IMessageHistoryNotice {

            /** MessageHistoryNotice contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** MessageHistoryNotice messageHistoryMetadata */
            messageHistoryMetadata?: (E2E.Message.IMessageHistoryMetadata|null);
        }

        /** Represents a MessageHistoryNotice. */
        class MessageHistoryNotice implements IMessageHistoryNotice {

            /**
             * Constructs a new MessageHistoryNotice.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IMessageHistoryNotice);

            /** MessageHistoryNotice contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** MessageHistoryNotice messageHistoryMetadata. */
            public messageHistoryMetadata?: (E2E.Message.IMessageHistoryMetadata|null);

            /**
             * Creates a new MessageHistoryNotice instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MessageHistoryNotice instance
             */
            public static create(properties?: E2E.Message.IMessageHistoryNotice): E2E.Message.MessageHistoryNotice;

            /**
             * Encodes the specified MessageHistoryNotice message. Does not implicitly {@link E2E.Message.MessageHistoryNotice.verify|verify} messages.
             * @param message MessageHistoryNotice message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IMessageHistoryNotice, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MessageHistoryNotice message, length delimited. Does not implicitly {@link E2E.Message.MessageHistoryNotice.verify|verify} messages.
             * @param message MessageHistoryNotice message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IMessageHistoryNotice, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MessageHistoryNotice message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MessageHistoryNotice
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.MessageHistoryNotice;

            /**
             * Decodes a MessageHistoryNotice message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MessageHistoryNotice
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.MessageHistoryNotice;

            /**
             * Verifies a MessageHistoryNotice message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MessageHistoryNotice message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MessageHistoryNotice
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.MessageHistoryNotice;

            /**
             * Creates a plain object from a MessageHistoryNotice message. Also converts values to other types if specified.
             * @param message MessageHistoryNotice
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.MessageHistoryNotice, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MessageHistoryNotice to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MessageHistoryNotice
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a NewsletterAdminInviteMessage. */
        interface INewsletterAdminInviteMessage {

            /** NewsletterAdminInviteMessage newsletterJid */
            newsletterJid?: (string|null);

            /** NewsletterAdminInviteMessage newsletterName */
            newsletterName?: (string|null);

            /** NewsletterAdminInviteMessage jpegThumbnail */
            jpegThumbnail?: (Uint8Array|null);

            /** NewsletterAdminInviteMessage caption */
            caption?: (string|null);

            /** NewsletterAdminInviteMessage inviteExpiration */
            inviteExpiration?: (number|Long|null);

            /** NewsletterAdminInviteMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);
        }

        /** Represents a NewsletterAdminInviteMessage. */
        class NewsletterAdminInviteMessage implements INewsletterAdminInviteMessage {

            /**
             * Constructs a new NewsletterAdminInviteMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.INewsletterAdminInviteMessage);

            /** NewsletterAdminInviteMessage newsletterJid. */
            public newsletterJid: string;

            /** NewsletterAdminInviteMessage newsletterName. */
            public newsletterName: string;

            /** NewsletterAdminInviteMessage jpegThumbnail. */
            public jpegThumbnail: Uint8Array;

            /** NewsletterAdminInviteMessage caption. */
            public caption: string;

            /** NewsletterAdminInviteMessage inviteExpiration. */
            public inviteExpiration: (number|Long);

            /** NewsletterAdminInviteMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /**
             * Creates a new NewsletterAdminInviteMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns NewsletterAdminInviteMessage instance
             */
            public static create(properties?: E2E.Message.INewsletterAdminInviteMessage): E2E.Message.NewsletterAdminInviteMessage;

            /**
             * Encodes the specified NewsletterAdminInviteMessage message. Does not implicitly {@link E2E.Message.NewsletterAdminInviteMessage.verify|verify} messages.
             * @param message NewsletterAdminInviteMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.INewsletterAdminInviteMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified NewsletterAdminInviteMessage message, length delimited. Does not implicitly {@link E2E.Message.NewsletterAdminInviteMessage.verify|verify} messages.
             * @param message NewsletterAdminInviteMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.INewsletterAdminInviteMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a NewsletterAdminInviteMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns NewsletterAdminInviteMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.NewsletterAdminInviteMessage;

            /**
             * Decodes a NewsletterAdminInviteMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns NewsletterAdminInviteMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.NewsletterAdminInviteMessage;

            /**
             * Verifies a NewsletterAdminInviteMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a NewsletterAdminInviteMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns NewsletterAdminInviteMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.NewsletterAdminInviteMessage;

            /**
             * Creates a plain object from a NewsletterAdminInviteMessage message. Also converts values to other types if specified.
             * @param message NewsletterAdminInviteMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.NewsletterAdminInviteMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this NewsletterAdminInviteMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for NewsletterAdminInviteMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a NewsletterFollowerInviteMessage. */
        interface INewsletterFollowerInviteMessage {

            /** NewsletterFollowerInviteMessage newsletterJid */
            newsletterJid?: (string|null);

            /** NewsletterFollowerInviteMessage newsletterName */
            newsletterName?: (string|null);

            /** NewsletterFollowerInviteMessage jpegThumbnail */
            jpegThumbnail?: (Uint8Array|null);

            /** NewsletterFollowerInviteMessage caption */
            caption?: (string|null);

            /** NewsletterFollowerInviteMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);
        }

        /** Represents a NewsletterFollowerInviteMessage. */
        class NewsletterFollowerInviteMessage implements INewsletterFollowerInviteMessage {

            /**
             * Constructs a new NewsletterFollowerInviteMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.INewsletterFollowerInviteMessage);

            /** NewsletterFollowerInviteMessage newsletterJid. */
            public newsletterJid: string;

            /** NewsletterFollowerInviteMessage newsletterName. */
            public newsletterName: string;

            /** NewsletterFollowerInviteMessage jpegThumbnail. */
            public jpegThumbnail: Uint8Array;

            /** NewsletterFollowerInviteMessage caption. */
            public caption: string;

            /** NewsletterFollowerInviteMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /**
             * Creates a new NewsletterFollowerInviteMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns NewsletterFollowerInviteMessage instance
             */
            public static create(properties?: E2E.Message.INewsletterFollowerInviteMessage): E2E.Message.NewsletterFollowerInviteMessage;

            /**
             * Encodes the specified NewsletterFollowerInviteMessage message. Does not implicitly {@link E2E.Message.NewsletterFollowerInviteMessage.verify|verify} messages.
             * @param message NewsletterFollowerInviteMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.INewsletterFollowerInviteMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified NewsletterFollowerInviteMessage message, length delimited. Does not implicitly {@link E2E.Message.NewsletterFollowerInviteMessage.verify|verify} messages.
             * @param message NewsletterFollowerInviteMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.INewsletterFollowerInviteMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a NewsletterFollowerInviteMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns NewsletterFollowerInviteMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.NewsletterFollowerInviteMessage;

            /**
             * Decodes a NewsletterFollowerInviteMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns NewsletterFollowerInviteMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.NewsletterFollowerInviteMessage;

            /**
             * Verifies a NewsletterFollowerInviteMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a NewsletterFollowerInviteMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns NewsletterFollowerInviteMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.NewsletterFollowerInviteMessage;

            /**
             * Creates a plain object from a NewsletterFollowerInviteMessage message. Also converts values to other types if specified.
             * @param message NewsletterFollowerInviteMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.NewsletterFollowerInviteMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this NewsletterFollowerInviteMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for NewsletterFollowerInviteMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an OrderMessage. */
        interface IOrderMessage {

            /** OrderMessage orderId */
            orderId?: (string|null);

            /** OrderMessage thumbnail */
            thumbnail?: (Uint8Array|null);

            /** OrderMessage itemCount */
            itemCount?: (number|null);

            /** OrderMessage status */
            status?: (E2E.Message.OrderMessage.OrderStatus|null);

            /** OrderMessage surface */
            surface?: (E2E.Message.OrderMessage.OrderSurface|null);

            /** OrderMessage message */
            message?: (string|null);

            /** OrderMessage orderTitle */
            orderTitle?: (string|null);

            /** OrderMessage sellerJid */
            sellerJid?: (string|null);

            /** OrderMessage token */
            token?: (string|null);

            /** OrderMessage totalAmount1000 */
            totalAmount1000?: (number|Long|null);

            /** OrderMessage totalCurrencyCode */
            totalCurrencyCode?: (string|null);

            /** OrderMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** OrderMessage messageVersion */
            messageVersion?: (number|null);

            /** OrderMessage orderRequestMessageId */
            orderRequestMessageId?: (Protocol.IMessageKey|null);

            /** OrderMessage catalogType */
            catalogType?: (string|null);
        }

        /** Represents an OrderMessage. */
        class OrderMessage implements IOrderMessage {

            /**
             * Constructs a new OrderMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IOrderMessage);

            /** OrderMessage orderId. */
            public orderId: string;

            /** OrderMessage thumbnail. */
            public thumbnail: Uint8Array;

            /** OrderMessage itemCount. */
            public itemCount: number;

            /** OrderMessage status. */
            public status: E2E.Message.OrderMessage.OrderStatus;

            /** OrderMessage surface. */
            public surface: E2E.Message.OrderMessage.OrderSurface;

            /** OrderMessage message. */
            public message: string;

            /** OrderMessage orderTitle. */
            public orderTitle: string;

            /** OrderMessage sellerJid. */
            public sellerJid: string;

            /** OrderMessage token. */
            public token: string;

            /** OrderMessage totalAmount1000. */
            public totalAmount1000: (number|Long);

            /** OrderMessage totalCurrencyCode. */
            public totalCurrencyCode: string;

            /** OrderMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** OrderMessage messageVersion. */
            public messageVersion: number;

            /** OrderMessage orderRequestMessageId. */
            public orderRequestMessageId?: (Protocol.IMessageKey|null);

            /** OrderMessage catalogType. */
            public catalogType: string;

            /**
             * Creates a new OrderMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns OrderMessage instance
             */
            public static create(properties?: E2E.Message.IOrderMessage): E2E.Message.OrderMessage;

            /**
             * Encodes the specified OrderMessage message. Does not implicitly {@link E2E.Message.OrderMessage.verify|verify} messages.
             * @param message OrderMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IOrderMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified OrderMessage message, length delimited. Does not implicitly {@link E2E.Message.OrderMessage.verify|verify} messages.
             * @param message OrderMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IOrderMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an OrderMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns OrderMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.OrderMessage;

            /**
             * Decodes an OrderMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns OrderMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.OrderMessage;

            /**
             * Verifies an OrderMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an OrderMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns OrderMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.OrderMessage;

            /**
             * Creates a plain object from an OrderMessage message. Also converts values to other types if specified.
             * @param message OrderMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.OrderMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this OrderMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for OrderMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace OrderMessage {

            /** OrderStatus enum. */
            enum OrderStatus {
                INQUIRY = 1,
                ACCEPTED = 2,
                DECLINED = 3
            }

            /** OrderSurface enum. */
            enum OrderSurface {
                CATALOG = 1
            }
        }

        /** Properties of a PaymentInviteMessage. */
        interface IPaymentInviteMessage {

            /** PaymentInviteMessage serviceType */
            serviceType?: (E2E.Message.PaymentInviteMessage.ServiceType|null);

            /** PaymentInviteMessage expiryTimestamp */
            expiryTimestamp?: (number|Long|null);
        }

        /** Represents a PaymentInviteMessage. */
        class PaymentInviteMessage implements IPaymentInviteMessage {

            /**
             * Constructs a new PaymentInviteMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPaymentInviteMessage);

            /** PaymentInviteMessage serviceType. */
            public serviceType: E2E.Message.PaymentInviteMessage.ServiceType;

            /** PaymentInviteMessage expiryTimestamp. */
            public expiryTimestamp: (number|Long);

            /**
             * Creates a new PaymentInviteMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PaymentInviteMessage instance
             */
            public static create(properties?: E2E.Message.IPaymentInviteMessage): E2E.Message.PaymentInviteMessage;

            /**
             * Encodes the specified PaymentInviteMessage message. Does not implicitly {@link E2E.Message.PaymentInviteMessage.verify|verify} messages.
             * @param message PaymentInviteMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPaymentInviteMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PaymentInviteMessage message, length delimited. Does not implicitly {@link E2E.Message.PaymentInviteMessage.verify|verify} messages.
             * @param message PaymentInviteMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPaymentInviteMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PaymentInviteMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PaymentInviteMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PaymentInviteMessage;

            /**
             * Decodes a PaymentInviteMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PaymentInviteMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PaymentInviteMessage;

            /**
             * Verifies a PaymentInviteMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PaymentInviteMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PaymentInviteMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PaymentInviteMessage;

            /**
             * Creates a plain object from a PaymentInviteMessage message. Also converts values to other types if specified.
             * @param message PaymentInviteMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PaymentInviteMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PaymentInviteMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PaymentInviteMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace PaymentInviteMessage {

            /** ServiceType enum. */
            enum ServiceType {
                UNKNOWN = 0,
                FBPAY = 1,
                NOVI = 2,
                UPI = 3
            }
        }

        /** Properties of a PaymentLinkMetadata. */
        interface IPaymentLinkMetadata {

            /** PaymentLinkMetadata button */
            button?: (E2E.Message.PaymentLinkMetadata.IPaymentLinkButton|null);

            /** PaymentLinkMetadata header */
            header?: (E2E.Message.PaymentLinkMetadata.IPaymentLinkHeader|null);

            /** PaymentLinkMetadata provider */
            provider?: (E2E.Message.PaymentLinkMetadata.IPaymentLinkProvider|null);
        }

        /** Represents a PaymentLinkMetadata. */
        class PaymentLinkMetadata implements IPaymentLinkMetadata {

            /**
             * Constructs a new PaymentLinkMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPaymentLinkMetadata);

            /** PaymentLinkMetadata button. */
            public button?: (E2E.Message.PaymentLinkMetadata.IPaymentLinkButton|null);

            /** PaymentLinkMetadata header. */
            public header?: (E2E.Message.PaymentLinkMetadata.IPaymentLinkHeader|null);

            /** PaymentLinkMetadata provider. */
            public provider?: (E2E.Message.PaymentLinkMetadata.IPaymentLinkProvider|null);

            /**
             * Creates a new PaymentLinkMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PaymentLinkMetadata instance
             */
            public static create(properties?: E2E.Message.IPaymentLinkMetadata): E2E.Message.PaymentLinkMetadata;

            /**
             * Encodes the specified PaymentLinkMetadata message. Does not implicitly {@link E2E.Message.PaymentLinkMetadata.verify|verify} messages.
             * @param message PaymentLinkMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPaymentLinkMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PaymentLinkMetadata message, length delimited. Does not implicitly {@link E2E.Message.PaymentLinkMetadata.verify|verify} messages.
             * @param message PaymentLinkMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPaymentLinkMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PaymentLinkMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PaymentLinkMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PaymentLinkMetadata;

            /**
             * Decodes a PaymentLinkMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PaymentLinkMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PaymentLinkMetadata;

            /**
             * Verifies a PaymentLinkMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PaymentLinkMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PaymentLinkMetadata
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PaymentLinkMetadata;

            /**
             * Creates a plain object from a PaymentLinkMetadata message. Also converts values to other types if specified.
             * @param message PaymentLinkMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PaymentLinkMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PaymentLinkMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PaymentLinkMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace PaymentLinkMetadata {

            /** Properties of a PaymentLinkButton. */
            interface IPaymentLinkButton {

                /** PaymentLinkButton displayText */
                displayText?: (string|null);
            }

            /** Represents a PaymentLinkButton. */
            class PaymentLinkButton implements IPaymentLinkButton {

                /**
                 * Constructs a new PaymentLinkButton.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PaymentLinkMetadata.IPaymentLinkButton);

                /** PaymentLinkButton displayText. */
                public displayText: string;

                /**
                 * Creates a new PaymentLinkButton instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns PaymentLinkButton instance
                 */
                public static create(properties?: E2E.Message.PaymentLinkMetadata.IPaymentLinkButton): E2E.Message.PaymentLinkMetadata.PaymentLinkButton;

                /**
                 * Encodes the specified PaymentLinkButton message. Does not implicitly {@link E2E.Message.PaymentLinkMetadata.PaymentLinkButton.verify|verify} messages.
                 * @param message PaymentLinkButton message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PaymentLinkMetadata.IPaymentLinkButton, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified PaymentLinkButton message, length delimited. Does not implicitly {@link E2E.Message.PaymentLinkMetadata.PaymentLinkButton.verify|verify} messages.
                 * @param message PaymentLinkButton message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PaymentLinkMetadata.IPaymentLinkButton, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a PaymentLinkButton message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns PaymentLinkButton
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PaymentLinkMetadata.PaymentLinkButton;

                /**
                 * Decodes a PaymentLinkButton message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns PaymentLinkButton
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PaymentLinkMetadata.PaymentLinkButton;

                /**
                 * Verifies a PaymentLinkButton message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a PaymentLinkButton message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns PaymentLinkButton
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PaymentLinkMetadata.PaymentLinkButton;

                /**
                 * Creates a plain object from a PaymentLinkButton message. Also converts values to other types if specified.
                 * @param message PaymentLinkButton
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PaymentLinkMetadata.PaymentLinkButton, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this PaymentLinkButton to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for PaymentLinkButton
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a PaymentLinkHeader. */
            interface IPaymentLinkHeader {

                /** PaymentLinkHeader headerType */
                headerType?: (E2E.Message.PaymentLinkMetadata.PaymentLinkHeader.PaymentLinkHeaderType|null);
            }

            /** Represents a PaymentLinkHeader. */
            class PaymentLinkHeader implements IPaymentLinkHeader {

                /**
                 * Constructs a new PaymentLinkHeader.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PaymentLinkMetadata.IPaymentLinkHeader);

                /** PaymentLinkHeader headerType. */
                public headerType: E2E.Message.PaymentLinkMetadata.PaymentLinkHeader.PaymentLinkHeaderType;

                /**
                 * Creates a new PaymentLinkHeader instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns PaymentLinkHeader instance
                 */
                public static create(properties?: E2E.Message.PaymentLinkMetadata.IPaymentLinkHeader): E2E.Message.PaymentLinkMetadata.PaymentLinkHeader;

                /**
                 * Encodes the specified PaymentLinkHeader message. Does not implicitly {@link E2E.Message.PaymentLinkMetadata.PaymentLinkHeader.verify|verify} messages.
                 * @param message PaymentLinkHeader message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PaymentLinkMetadata.IPaymentLinkHeader, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified PaymentLinkHeader message, length delimited. Does not implicitly {@link E2E.Message.PaymentLinkMetadata.PaymentLinkHeader.verify|verify} messages.
                 * @param message PaymentLinkHeader message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PaymentLinkMetadata.IPaymentLinkHeader, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a PaymentLinkHeader message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns PaymentLinkHeader
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PaymentLinkMetadata.PaymentLinkHeader;

                /**
                 * Decodes a PaymentLinkHeader message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns PaymentLinkHeader
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PaymentLinkMetadata.PaymentLinkHeader;

                /**
                 * Verifies a PaymentLinkHeader message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a PaymentLinkHeader message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns PaymentLinkHeader
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PaymentLinkMetadata.PaymentLinkHeader;

                /**
                 * Creates a plain object from a PaymentLinkHeader message. Also converts values to other types if specified.
                 * @param message PaymentLinkHeader
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PaymentLinkMetadata.PaymentLinkHeader, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this PaymentLinkHeader to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for PaymentLinkHeader
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace PaymentLinkHeader {

                /** PaymentLinkHeaderType enum. */
                enum PaymentLinkHeaderType {
                    LINK_PREVIEW = 0,
                    ORDER = 1
                }
            }

            /** Properties of a PaymentLinkProvider. */
            interface IPaymentLinkProvider {

                /** PaymentLinkProvider paramsJson */
                paramsJson?: (string|null);
            }

            /** Represents a PaymentLinkProvider. */
            class PaymentLinkProvider implements IPaymentLinkProvider {

                /**
                 * Constructs a new PaymentLinkProvider.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PaymentLinkMetadata.IPaymentLinkProvider);

                /** PaymentLinkProvider paramsJson. */
                public paramsJson: string;

                /**
                 * Creates a new PaymentLinkProvider instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns PaymentLinkProvider instance
                 */
                public static create(properties?: E2E.Message.PaymentLinkMetadata.IPaymentLinkProvider): E2E.Message.PaymentLinkMetadata.PaymentLinkProvider;

                /**
                 * Encodes the specified PaymentLinkProvider message. Does not implicitly {@link E2E.Message.PaymentLinkMetadata.PaymentLinkProvider.verify|verify} messages.
                 * @param message PaymentLinkProvider message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PaymentLinkMetadata.IPaymentLinkProvider, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified PaymentLinkProvider message, length delimited. Does not implicitly {@link E2E.Message.PaymentLinkMetadata.PaymentLinkProvider.verify|verify} messages.
                 * @param message PaymentLinkProvider message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PaymentLinkMetadata.IPaymentLinkProvider, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a PaymentLinkProvider message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns PaymentLinkProvider
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PaymentLinkMetadata.PaymentLinkProvider;

                /**
                 * Decodes a PaymentLinkProvider message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns PaymentLinkProvider
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PaymentLinkMetadata.PaymentLinkProvider;

                /**
                 * Verifies a PaymentLinkProvider message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a PaymentLinkProvider message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns PaymentLinkProvider
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PaymentLinkMetadata.PaymentLinkProvider;

                /**
                 * Creates a plain object from a PaymentLinkProvider message. Also converts values to other types if specified.
                 * @param message PaymentLinkProvider
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PaymentLinkMetadata.PaymentLinkProvider, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this PaymentLinkProvider to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for PaymentLinkProvider
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a PeerDataOperationRequestMessage. */
        interface IPeerDataOperationRequestMessage {

            /** PeerDataOperationRequestMessage peerDataOperationRequestType */
            peerDataOperationRequestType?: (E2E.Message.PeerDataOperationRequestType|null);

            /** PeerDataOperationRequestMessage requestStickerReupload */
            requestStickerReupload?: (E2E.Message.PeerDataOperationRequestMessage.IRequestStickerReupload[]|null);

            /** PeerDataOperationRequestMessage requestUrlPreview */
            requestUrlPreview?: (E2E.Message.PeerDataOperationRequestMessage.IRequestUrlPreview[]|null);

            /** PeerDataOperationRequestMessage historySyncOnDemandRequest */
            historySyncOnDemandRequest?: (E2E.Message.PeerDataOperationRequestMessage.IHistorySyncOnDemandRequest|null);

            /** PeerDataOperationRequestMessage placeholderMessageResendRequest */
            placeholderMessageResendRequest?: (E2E.Message.PeerDataOperationRequestMessage.IPlaceholderMessageResendRequest[]|null);

            /** PeerDataOperationRequestMessage fullHistorySyncOnDemandRequest */
            fullHistorySyncOnDemandRequest?: (E2E.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest|null);

            /** PeerDataOperationRequestMessage syncdCollectionFatalRecoveryRequest */
            syncdCollectionFatalRecoveryRequest?: (E2E.Message.PeerDataOperationRequestMessage.ISyncDCollectionFatalRecoveryRequest|null);

            /** PeerDataOperationRequestMessage historySyncChunkRetryRequest */
            historySyncChunkRetryRequest?: (E2E.Message.PeerDataOperationRequestMessage.IHistorySyncChunkRetryRequest|null);
        }

        /** Represents a PeerDataOperationRequestMessage. */
        class PeerDataOperationRequestMessage implements IPeerDataOperationRequestMessage {

            /**
             * Constructs a new PeerDataOperationRequestMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPeerDataOperationRequestMessage);

            /** PeerDataOperationRequestMessage peerDataOperationRequestType. */
            public peerDataOperationRequestType: E2E.Message.PeerDataOperationRequestType;

            /** PeerDataOperationRequestMessage requestStickerReupload. */
            public requestStickerReupload: E2E.Message.PeerDataOperationRequestMessage.IRequestStickerReupload[];

            /** PeerDataOperationRequestMessage requestUrlPreview. */
            public requestUrlPreview: E2E.Message.PeerDataOperationRequestMessage.IRequestUrlPreview[];

            /** PeerDataOperationRequestMessage historySyncOnDemandRequest. */
            public historySyncOnDemandRequest?: (E2E.Message.PeerDataOperationRequestMessage.IHistorySyncOnDemandRequest|null);

            /** PeerDataOperationRequestMessage placeholderMessageResendRequest. */
            public placeholderMessageResendRequest: E2E.Message.PeerDataOperationRequestMessage.IPlaceholderMessageResendRequest[];

            /** PeerDataOperationRequestMessage fullHistorySyncOnDemandRequest. */
            public fullHistorySyncOnDemandRequest?: (E2E.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest|null);

            /** PeerDataOperationRequestMessage syncdCollectionFatalRecoveryRequest. */
            public syncdCollectionFatalRecoveryRequest?: (E2E.Message.PeerDataOperationRequestMessage.ISyncDCollectionFatalRecoveryRequest|null);

            /** PeerDataOperationRequestMessage historySyncChunkRetryRequest. */
            public historySyncChunkRetryRequest?: (E2E.Message.PeerDataOperationRequestMessage.IHistorySyncChunkRetryRequest|null);

            /**
             * Creates a new PeerDataOperationRequestMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PeerDataOperationRequestMessage instance
             */
            public static create(properties?: E2E.Message.IPeerDataOperationRequestMessage): E2E.Message.PeerDataOperationRequestMessage;

            /**
             * Encodes the specified PeerDataOperationRequestMessage message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.verify|verify} messages.
             * @param message PeerDataOperationRequestMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPeerDataOperationRequestMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PeerDataOperationRequestMessage message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.verify|verify} messages.
             * @param message PeerDataOperationRequestMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPeerDataOperationRequestMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PeerDataOperationRequestMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PeerDataOperationRequestMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestMessage;

            /**
             * Decodes a PeerDataOperationRequestMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PeerDataOperationRequestMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestMessage;

            /**
             * Verifies a PeerDataOperationRequestMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PeerDataOperationRequestMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PeerDataOperationRequestMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestMessage;

            /**
             * Creates a plain object from a PeerDataOperationRequestMessage message. Also converts values to other types if specified.
             * @param message PeerDataOperationRequestMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PeerDataOperationRequestMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PeerDataOperationRequestMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PeerDataOperationRequestMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace PeerDataOperationRequestMessage {

            /** Properties of a FullHistorySyncOnDemandRequest. */
            interface IFullHistorySyncOnDemandRequest {

                /** FullHistorySyncOnDemandRequest requestMetadata */
                requestMetadata?: (E2E.Message.IFullHistorySyncOnDemandRequestMetadata|null);

                /** FullHistorySyncOnDemandRequest historySyncConfig */
                historySyncConfig?: (CompanionReg.DeviceProps.IHistorySyncConfig|null);
            }

            /** Represents a FullHistorySyncOnDemandRequest. */
            class FullHistorySyncOnDemandRequest implements IFullHistorySyncOnDemandRequest {

                /**
                 * Constructs a new FullHistorySyncOnDemandRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest);

                /** FullHistorySyncOnDemandRequest requestMetadata. */
                public requestMetadata?: (E2E.Message.IFullHistorySyncOnDemandRequestMetadata|null);

                /** FullHistorySyncOnDemandRequest historySyncConfig. */
                public historySyncConfig?: (CompanionReg.DeviceProps.IHistorySyncConfig|null);

                /**
                 * Creates a new FullHistorySyncOnDemandRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns FullHistorySyncOnDemandRequest instance
                 */
                public static create(properties?: E2E.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest): E2E.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest;

                /**
                 * Encodes the specified FullHistorySyncOnDemandRequest message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.verify|verify} messages.
                 * @param message FullHistorySyncOnDemandRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified FullHistorySyncOnDemandRequest message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.verify|verify} messages.
                 * @param message FullHistorySyncOnDemandRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a FullHistorySyncOnDemandRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns FullHistorySyncOnDemandRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest;

                /**
                 * Decodes a FullHistorySyncOnDemandRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns FullHistorySyncOnDemandRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest;

                /**
                 * Verifies a FullHistorySyncOnDemandRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a FullHistorySyncOnDemandRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns FullHistorySyncOnDemandRequest
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest;

                /**
                 * Creates a plain object from a FullHistorySyncOnDemandRequest message. Also converts values to other types if specified.
                 * @param message FullHistorySyncOnDemandRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this FullHistorySyncOnDemandRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for FullHistorySyncOnDemandRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a HistorySyncChunkRetryRequest. */
            interface IHistorySyncChunkRetryRequest {

                /** HistorySyncChunkRetryRequest syncType */
                syncType?: (E2E.Message.HistorySyncType|null);

                /** HistorySyncChunkRetryRequest chunkOrder */
                chunkOrder?: (number|null);

                /** HistorySyncChunkRetryRequest chunkNotificationId */
                chunkNotificationId?: (string|null);

                /** HistorySyncChunkRetryRequest regenerateChunk */
                regenerateChunk?: (boolean|null);
            }

            /** Represents a HistorySyncChunkRetryRequest. */
            class HistorySyncChunkRetryRequest implements IHistorySyncChunkRetryRequest {

                /**
                 * Constructs a new HistorySyncChunkRetryRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PeerDataOperationRequestMessage.IHistorySyncChunkRetryRequest);

                /** HistorySyncChunkRetryRequest syncType. */
                public syncType: E2E.Message.HistorySyncType;

                /** HistorySyncChunkRetryRequest chunkOrder. */
                public chunkOrder: number;

                /** HistorySyncChunkRetryRequest chunkNotificationId. */
                public chunkNotificationId: string;

                /** HistorySyncChunkRetryRequest regenerateChunk. */
                public regenerateChunk: boolean;

                /**
                 * Creates a new HistorySyncChunkRetryRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns HistorySyncChunkRetryRequest instance
                 */
                public static create(properties?: E2E.Message.PeerDataOperationRequestMessage.IHistorySyncChunkRetryRequest): E2E.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest;

                /**
                 * Encodes the specified HistorySyncChunkRetryRequest message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest.verify|verify} messages.
                 * @param message HistorySyncChunkRetryRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PeerDataOperationRequestMessage.IHistorySyncChunkRetryRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified HistorySyncChunkRetryRequest message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest.verify|verify} messages.
                 * @param message HistorySyncChunkRetryRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestMessage.IHistorySyncChunkRetryRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a HistorySyncChunkRetryRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns HistorySyncChunkRetryRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest;

                /**
                 * Decodes a HistorySyncChunkRetryRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns HistorySyncChunkRetryRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest;

                /**
                 * Verifies a HistorySyncChunkRetryRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a HistorySyncChunkRetryRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns HistorySyncChunkRetryRequest
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest;

                /**
                 * Creates a plain object from a HistorySyncChunkRetryRequest message. Also converts values to other types if specified.
                 * @param message HistorySyncChunkRetryRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this HistorySyncChunkRetryRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for HistorySyncChunkRetryRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a HistorySyncOnDemandRequest. */
            interface IHistorySyncOnDemandRequest {

                /** HistorySyncOnDemandRequest chatJid */
                chatJid?: (string|null);

                /** HistorySyncOnDemandRequest oldestMsgId */
                oldestMsgId?: (string|null);

                /** HistorySyncOnDemandRequest oldestMsgFromMe */
                oldestMsgFromMe?: (boolean|null);

                /** HistorySyncOnDemandRequest onDemandMsgCount */
                onDemandMsgCount?: (number|null);

                /** HistorySyncOnDemandRequest oldestMsgTimestampMs */
                oldestMsgTimestampMs?: (number|Long|null);

                /** HistorySyncOnDemandRequest accountLid */
                accountLid?: (string|null);
            }

            /** Represents a HistorySyncOnDemandRequest. */
            class HistorySyncOnDemandRequest implements IHistorySyncOnDemandRequest {

                /**
                 * Constructs a new HistorySyncOnDemandRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PeerDataOperationRequestMessage.IHistorySyncOnDemandRequest);

                /** HistorySyncOnDemandRequest chatJid. */
                public chatJid: string;

                /** HistorySyncOnDemandRequest oldestMsgId. */
                public oldestMsgId: string;

                /** HistorySyncOnDemandRequest oldestMsgFromMe. */
                public oldestMsgFromMe: boolean;

                /** HistorySyncOnDemandRequest onDemandMsgCount. */
                public onDemandMsgCount: number;

                /** HistorySyncOnDemandRequest oldestMsgTimestampMs. */
                public oldestMsgTimestampMs: (number|Long);

                /** HistorySyncOnDemandRequest accountLid. */
                public accountLid: string;

                /**
                 * Creates a new HistorySyncOnDemandRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns HistorySyncOnDemandRequest instance
                 */
                public static create(properties?: E2E.Message.PeerDataOperationRequestMessage.IHistorySyncOnDemandRequest): E2E.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest;

                /**
                 * Encodes the specified HistorySyncOnDemandRequest message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest.verify|verify} messages.
                 * @param message HistorySyncOnDemandRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PeerDataOperationRequestMessage.IHistorySyncOnDemandRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified HistorySyncOnDemandRequest message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest.verify|verify} messages.
                 * @param message HistorySyncOnDemandRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestMessage.IHistorySyncOnDemandRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a HistorySyncOnDemandRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns HistorySyncOnDemandRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest;

                /**
                 * Decodes a HistorySyncOnDemandRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns HistorySyncOnDemandRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest;

                /**
                 * Verifies a HistorySyncOnDemandRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a HistorySyncOnDemandRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns HistorySyncOnDemandRequest
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest;

                /**
                 * Creates a plain object from a HistorySyncOnDemandRequest message. Also converts values to other types if specified.
                 * @param message HistorySyncOnDemandRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this HistorySyncOnDemandRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for HistorySyncOnDemandRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a PlaceholderMessageResendRequest. */
            interface IPlaceholderMessageResendRequest {

                /** PlaceholderMessageResendRequest messageKey */
                messageKey?: (Protocol.IMessageKey|null);
            }

            /** Represents a PlaceholderMessageResendRequest. */
            class PlaceholderMessageResendRequest implements IPlaceholderMessageResendRequest {

                /**
                 * Constructs a new PlaceholderMessageResendRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PeerDataOperationRequestMessage.IPlaceholderMessageResendRequest);

                /** PlaceholderMessageResendRequest messageKey. */
                public messageKey?: (Protocol.IMessageKey|null);

                /**
                 * Creates a new PlaceholderMessageResendRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns PlaceholderMessageResendRequest instance
                 */
                public static create(properties?: E2E.Message.PeerDataOperationRequestMessage.IPlaceholderMessageResendRequest): E2E.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest;

                /**
                 * Encodes the specified PlaceholderMessageResendRequest message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest.verify|verify} messages.
                 * @param message PlaceholderMessageResendRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PeerDataOperationRequestMessage.IPlaceholderMessageResendRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified PlaceholderMessageResendRequest message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest.verify|verify} messages.
                 * @param message PlaceholderMessageResendRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestMessage.IPlaceholderMessageResendRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a PlaceholderMessageResendRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns PlaceholderMessageResendRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest;

                /**
                 * Decodes a PlaceholderMessageResendRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns PlaceholderMessageResendRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest;

                /**
                 * Verifies a PlaceholderMessageResendRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a PlaceholderMessageResendRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns PlaceholderMessageResendRequest
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest;

                /**
                 * Creates a plain object from a PlaceholderMessageResendRequest message. Also converts values to other types if specified.
                 * @param message PlaceholderMessageResendRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this PlaceholderMessageResendRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for PlaceholderMessageResendRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a RequestStickerReupload. */
            interface IRequestStickerReupload {

                /** RequestStickerReupload fileSha256 */
                fileSha256?: (string|null);
            }

            /** Represents a RequestStickerReupload. */
            class RequestStickerReupload implements IRequestStickerReupload {

                /**
                 * Constructs a new RequestStickerReupload.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PeerDataOperationRequestMessage.IRequestStickerReupload);

                /** RequestStickerReupload fileSha256. */
                public fileSha256: string;

                /**
                 * Creates a new RequestStickerReupload instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns RequestStickerReupload instance
                 */
                public static create(properties?: E2E.Message.PeerDataOperationRequestMessage.IRequestStickerReupload): E2E.Message.PeerDataOperationRequestMessage.RequestStickerReupload;

                /**
                 * Encodes the specified RequestStickerReupload message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.RequestStickerReupload.verify|verify} messages.
                 * @param message RequestStickerReupload message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PeerDataOperationRequestMessage.IRequestStickerReupload, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified RequestStickerReupload message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.RequestStickerReupload.verify|verify} messages.
                 * @param message RequestStickerReupload message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestMessage.IRequestStickerReupload, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a RequestStickerReupload message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns RequestStickerReupload
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestMessage.RequestStickerReupload;

                /**
                 * Decodes a RequestStickerReupload message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns RequestStickerReupload
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestMessage.RequestStickerReupload;

                /**
                 * Verifies a RequestStickerReupload message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a RequestStickerReupload message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns RequestStickerReupload
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestMessage.RequestStickerReupload;

                /**
                 * Creates a plain object from a RequestStickerReupload message. Also converts values to other types if specified.
                 * @param message RequestStickerReupload
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PeerDataOperationRequestMessage.RequestStickerReupload, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this RequestStickerReupload to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for RequestStickerReupload
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a RequestUrlPreview. */
            interface IRequestUrlPreview {

                /** RequestUrlPreview url */
                url?: (string|null);

                /** RequestUrlPreview includeHqThumbnail */
                includeHqThumbnail?: (boolean|null);
            }

            /** Represents a RequestUrlPreview. */
            class RequestUrlPreview implements IRequestUrlPreview {

                /**
                 * Constructs a new RequestUrlPreview.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PeerDataOperationRequestMessage.IRequestUrlPreview);

                /** RequestUrlPreview url. */
                public url: string;

                /** RequestUrlPreview includeHqThumbnail. */
                public includeHqThumbnail: boolean;

                /**
                 * Creates a new RequestUrlPreview instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns RequestUrlPreview instance
                 */
                public static create(properties?: E2E.Message.PeerDataOperationRequestMessage.IRequestUrlPreview): E2E.Message.PeerDataOperationRequestMessage.RequestUrlPreview;

                /**
                 * Encodes the specified RequestUrlPreview message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.RequestUrlPreview.verify|verify} messages.
                 * @param message RequestUrlPreview message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PeerDataOperationRequestMessage.IRequestUrlPreview, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified RequestUrlPreview message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.RequestUrlPreview.verify|verify} messages.
                 * @param message RequestUrlPreview message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestMessage.IRequestUrlPreview, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a RequestUrlPreview message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns RequestUrlPreview
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestMessage.RequestUrlPreview;

                /**
                 * Decodes a RequestUrlPreview message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns RequestUrlPreview
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestMessage.RequestUrlPreview;

                /**
                 * Verifies a RequestUrlPreview message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a RequestUrlPreview message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns RequestUrlPreview
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestMessage.RequestUrlPreview;

                /**
                 * Creates a plain object from a RequestUrlPreview message. Also converts values to other types if specified.
                 * @param message RequestUrlPreview
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PeerDataOperationRequestMessage.RequestUrlPreview, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this RequestUrlPreview to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for RequestUrlPreview
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a SyncDCollectionFatalRecoveryRequest. */
            interface ISyncDCollectionFatalRecoveryRequest {

                /** SyncDCollectionFatalRecoveryRequest collectionName */
                collectionName?: (string|null);

                /** SyncDCollectionFatalRecoveryRequest timestamp */
                timestamp?: (number|Long|null);
            }

            /** Represents a SyncDCollectionFatalRecoveryRequest. */
            class SyncDCollectionFatalRecoveryRequest implements ISyncDCollectionFatalRecoveryRequest {

                /**
                 * Constructs a new SyncDCollectionFatalRecoveryRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PeerDataOperationRequestMessage.ISyncDCollectionFatalRecoveryRequest);

                /** SyncDCollectionFatalRecoveryRequest collectionName. */
                public collectionName: string;

                /** SyncDCollectionFatalRecoveryRequest timestamp. */
                public timestamp: (number|Long);

                /**
                 * Creates a new SyncDCollectionFatalRecoveryRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns SyncDCollectionFatalRecoveryRequest instance
                 */
                public static create(properties?: E2E.Message.PeerDataOperationRequestMessage.ISyncDCollectionFatalRecoveryRequest): E2E.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest;

                /**
                 * Encodes the specified SyncDCollectionFatalRecoveryRequest message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest.verify|verify} messages.
                 * @param message SyncDCollectionFatalRecoveryRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PeerDataOperationRequestMessage.ISyncDCollectionFatalRecoveryRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified SyncDCollectionFatalRecoveryRequest message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest.verify|verify} messages.
                 * @param message SyncDCollectionFatalRecoveryRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestMessage.ISyncDCollectionFatalRecoveryRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a SyncDCollectionFatalRecoveryRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns SyncDCollectionFatalRecoveryRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest;

                /**
                 * Decodes a SyncDCollectionFatalRecoveryRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns SyncDCollectionFatalRecoveryRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest;

                /**
                 * Verifies a SyncDCollectionFatalRecoveryRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a SyncDCollectionFatalRecoveryRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns SyncDCollectionFatalRecoveryRequest
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest;

                /**
                 * Creates a plain object from a SyncDCollectionFatalRecoveryRequest message. Also converts values to other types if specified.
                 * @param message SyncDCollectionFatalRecoveryRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this SyncDCollectionFatalRecoveryRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for SyncDCollectionFatalRecoveryRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a PeerDataOperationRequestResponseMessage. */
        interface IPeerDataOperationRequestResponseMessage {

            /** PeerDataOperationRequestResponseMessage peerDataOperationRequestType */
            peerDataOperationRequestType?: (E2E.Message.PeerDataOperationRequestType|null);

            /** PeerDataOperationRequestResponseMessage stanzaId */
            stanzaId?: (string|null);

            /** PeerDataOperationRequestResponseMessage peerDataOperationResult */
            peerDataOperationResult?: (E2E.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult[]|null);
        }

        /** Represents a PeerDataOperationRequestResponseMessage. */
        class PeerDataOperationRequestResponseMessage implements IPeerDataOperationRequestResponseMessage {

            /**
             * Constructs a new PeerDataOperationRequestResponseMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPeerDataOperationRequestResponseMessage);

            /** PeerDataOperationRequestResponseMessage peerDataOperationRequestType. */
            public peerDataOperationRequestType: E2E.Message.PeerDataOperationRequestType;

            /** PeerDataOperationRequestResponseMessage stanzaId. */
            public stanzaId: string;

            /** PeerDataOperationRequestResponseMessage peerDataOperationResult. */
            public peerDataOperationResult: E2E.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult[];

            /**
             * Creates a new PeerDataOperationRequestResponseMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PeerDataOperationRequestResponseMessage instance
             */
            public static create(properties?: E2E.Message.IPeerDataOperationRequestResponseMessage): E2E.Message.PeerDataOperationRequestResponseMessage;

            /**
             * Encodes the specified PeerDataOperationRequestResponseMessage message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.verify|verify} messages.
             * @param message PeerDataOperationRequestResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPeerDataOperationRequestResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PeerDataOperationRequestResponseMessage message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.verify|verify} messages.
             * @param message PeerDataOperationRequestResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPeerDataOperationRequestResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PeerDataOperationRequestResponseMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PeerDataOperationRequestResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage;

            /**
             * Decodes a PeerDataOperationRequestResponseMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PeerDataOperationRequestResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage;

            /**
             * Verifies a PeerDataOperationRequestResponseMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PeerDataOperationRequestResponseMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PeerDataOperationRequestResponseMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage;

            /**
             * Creates a plain object from a PeerDataOperationRequestResponseMessage message. Also converts values to other types if specified.
             * @param message PeerDataOperationRequestResponseMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PeerDataOperationRequestResponseMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PeerDataOperationRequestResponseMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace PeerDataOperationRequestResponseMessage {

            /** Properties of a PeerDataOperationResult. */
            interface IPeerDataOperationResult {

                /** PeerDataOperationResult mediaUploadResult */
                mediaUploadResult?: (MmsRetry.MediaRetryNotification.ResultType|null);

                /** PeerDataOperationResult stickerMessage */
                stickerMessage?: (E2E.Message.IStickerMessage|null);

                /** PeerDataOperationResult linkPreviewResponse */
                linkPreviewResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ILinkPreviewResponse|null);

                /** PeerDataOperationResult placeholderMessageResendResponse */
                placeholderMessageResendResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IPlaceholderMessageResendResponse|null);

                /** PeerDataOperationResult waffleNonceFetchRequestResponse */
                waffleNonceFetchRequestResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IWaffleNonceFetchResponse|null);

                /** PeerDataOperationResult fullHistorySyncOnDemandRequestResponse */
                fullHistorySyncOnDemandRequestResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFullHistorySyncOnDemandRequestResponse|null);

                /** PeerDataOperationResult companionMetaNonceFetchRequestResponse */
                companionMetaNonceFetchRequestResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionMetaNonceFetchResponse|null);

                /** PeerDataOperationResult syncdSnapshotFatalRecoveryResponse */
                syncdSnapshotFatalRecoveryResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse|null);

                /** PeerDataOperationResult companionCanonicalUserNonceFetchRequestResponse */
                companionCanonicalUserNonceFetchRequestResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse|null);

                /** PeerDataOperationResult historySyncChunkRetryResponse */
                historySyncChunkRetryResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse|null);
            }

            /** Represents a PeerDataOperationResult. */
            class PeerDataOperationResult implements IPeerDataOperationResult {

                /**
                 * Constructs a new PeerDataOperationResult.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult);

                /** PeerDataOperationResult mediaUploadResult. */
                public mediaUploadResult: MmsRetry.MediaRetryNotification.ResultType;

                /** PeerDataOperationResult stickerMessage. */
                public stickerMessage?: (E2E.Message.IStickerMessage|null);

                /** PeerDataOperationResult linkPreviewResponse. */
                public linkPreviewResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ILinkPreviewResponse|null);

                /** PeerDataOperationResult placeholderMessageResendResponse. */
                public placeholderMessageResendResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IPlaceholderMessageResendResponse|null);

                /** PeerDataOperationResult waffleNonceFetchRequestResponse. */
                public waffleNonceFetchRequestResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IWaffleNonceFetchResponse|null);

                /** PeerDataOperationResult fullHistorySyncOnDemandRequestResponse. */
                public fullHistorySyncOnDemandRequestResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFullHistorySyncOnDemandRequestResponse|null);

                /** PeerDataOperationResult companionMetaNonceFetchRequestResponse. */
                public companionMetaNonceFetchRequestResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionMetaNonceFetchResponse|null);

                /** PeerDataOperationResult syncdSnapshotFatalRecoveryResponse. */
                public syncdSnapshotFatalRecoveryResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse|null);

                /** PeerDataOperationResult companionCanonicalUserNonceFetchRequestResponse. */
                public companionCanonicalUserNonceFetchRequestResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse|null);

                /** PeerDataOperationResult historySyncChunkRetryResponse. */
                public historySyncChunkRetryResponse?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse|null);

                /**
                 * Creates a new PeerDataOperationResult instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns PeerDataOperationResult instance
                 */
                public static create(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult;

                /**
                 * Encodes the specified PeerDataOperationResult message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.verify|verify} messages.
                 * @param message PeerDataOperationResult message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified PeerDataOperationResult message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.verify|verify} messages.
                 * @param message PeerDataOperationResult message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a PeerDataOperationResult message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns PeerDataOperationResult
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult;

                /**
                 * Decodes a PeerDataOperationResult message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns PeerDataOperationResult
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult;

                /**
                 * Verifies a PeerDataOperationResult message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a PeerDataOperationResult message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns PeerDataOperationResult
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult;

                /**
                 * Creates a plain object from a PeerDataOperationResult message. Also converts values to other types if specified.
                 * @param message PeerDataOperationResult
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this PeerDataOperationResult to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for PeerDataOperationResult
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace PeerDataOperationResult {

                /** Properties of a CompanionCanonicalUserNonceFetchResponse. */
                interface ICompanionCanonicalUserNonceFetchResponse {

                    /** CompanionCanonicalUserNonceFetchResponse nonce */
                    nonce?: (string|null);

                    /** CompanionCanonicalUserNonceFetchResponse waFbid */
                    waFbid?: (string|null);

                    /** CompanionCanonicalUserNonceFetchResponse forceRefresh */
                    forceRefresh?: (boolean|null);
                }

                /** Represents a CompanionCanonicalUserNonceFetchResponse. */
                class CompanionCanonicalUserNonceFetchResponse implements ICompanionCanonicalUserNonceFetchResponse {

                    /**
                     * Constructs a new CompanionCanonicalUserNonceFetchResponse.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse);

                    /** CompanionCanonicalUserNonceFetchResponse nonce. */
                    public nonce: string;

                    /** CompanionCanonicalUserNonceFetchResponse waFbid. */
                    public waFbid: string;

                    /** CompanionCanonicalUserNonceFetchResponse forceRefresh. */
                    public forceRefresh: boolean;

                    /**
                     * Creates a new CompanionCanonicalUserNonceFetchResponse instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns CompanionCanonicalUserNonceFetchResponse instance
                     */
                    public static create(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse;

                    /**
                     * Encodes the specified CompanionCanonicalUserNonceFetchResponse message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse.verify|verify} messages.
                     * @param message CompanionCanonicalUserNonceFetchResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified CompanionCanonicalUserNonceFetchResponse message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse.verify|verify} messages.
                     * @param message CompanionCanonicalUserNonceFetchResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a CompanionCanonicalUserNonceFetchResponse message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns CompanionCanonicalUserNonceFetchResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse;

                    /**
                     * Decodes a CompanionCanonicalUserNonceFetchResponse message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns CompanionCanonicalUserNonceFetchResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse;

                    /**
                     * Verifies a CompanionCanonicalUserNonceFetchResponse message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a CompanionCanonicalUserNonceFetchResponse message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns CompanionCanonicalUserNonceFetchResponse
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse;

                    /**
                     * Creates a plain object from a CompanionCanonicalUserNonceFetchResponse message. Also converts values to other types if specified.
                     * @param message CompanionCanonicalUserNonceFetchResponse
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this CompanionCanonicalUserNonceFetchResponse to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for CompanionCanonicalUserNonceFetchResponse
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a CompanionMetaNonceFetchResponse. */
                interface ICompanionMetaNonceFetchResponse {

                    /** CompanionMetaNonceFetchResponse nonce */
                    nonce?: (string|null);
                }

                /** Represents a CompanionMetaNonceFetchResponse. */
                class CompanionMetaNonceFetchResponse implements ICompanionMetaNonceFetchResponse {

                    /**
                     * Constructs a new CompanionMetaNonceFetchResponse.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionMetaNonceFetchResponse);

                    /** CompanionMetaNonceFetchResponse nonce. */
                    public nonce: string;

                    /**
                     * Creates a new CompanionMetaNonceFetchResponse instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns CompanionMetaNonceFetchResponse instance
                     */
                    public static create(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionMetaNonceFetchResponse): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse;

                    /**
                     * Encodes the specified CompanionMetaNonceFetchResponse message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse.verify|verify} messages.
                     * @param message CompanionMetaNonceFetchResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionMetaNonceFetchResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified CompanionMetaNonceFetchResponse message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse.verify|verify} messages.
                     * @param message CompanionMetaNonceFetchResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionMetaNonceFetchResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a CompanionMetaNonceFetchResponse message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns CompanionMetaNonceFetchResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse;

                    /**
                     * Decodes a CompanionMetaNonceFetchResponse message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns CompanionMetaNonceFetchResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse;

                    /**
                     * Verifies a CompanionMetaNonceFetchResponse message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a CompanionMetaNonceFetchResponse message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns CompanionMetaNonceFetchResponse
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse;

                    /**
                     * Creates a plain object from a CompanionMetaNonceFetchResponse message. Also converts values to other types if specified.
                     * @param message CompanionMetaNonceFetchResponse
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this CompanionMetaNonceFetchResponse to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for CompanionMetaNonceFetchResponse
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a FullHistorySyncOnDemandRequestResponse. */
                interface IFullHistorySyncOnDemandRequestResponse {

                    /** FullHistorySyncOnDemandRequestResponse requestMetadata */
                    requestMetadata?: (E2E.Message.IFullHistorySyncOnDemandRequestMetadata|null);

                    /** FullHistorySyncOnDemandRequestResponse responseCode */
                    responseCode?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode|null);
                }

                /** Represents a FullHistorySyncOnDemandRequestResponse. */
                class FullHistorySyncOnDemandRequestResponse implements IFullHistorySyncOnDemandRequestResponse {

                    /**
                     * Constructs a new FullHistorySyncOnDemandRequestResponse.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFullHistorySyncOnDemandRequestResponse);

                    /** FullHistorySyncOnDemandRequestResponse requestMetadata. */
                    public requestMetadata?: (E2E.Message.IFullHistorySyncOnDemandRequestMetadata|null);

                    /** FullHistorySyncOnDemandRequestResponse responseCode. */
                    public responseCode: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode;

                    /**
                     * Creates a new FullHistorySyncOnDemandRequestResponse instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns FullHistorySyncOnDemandRequestResponse instance
                     */
                    public static create(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFullHistorySyncOnDemandRequestResponse): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse;

                    /**
                     * Encodes the specified FullHistorySyncOnDemandRequestResponse message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse.verify|verify} messages.
                     * @param message FullHistorySyncOnDemandRequestResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFullHistorySyncOnDemandRequestResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified FullHistorySyncOnDemandRequestResponse message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse.verify|verify} messages.
                     * @param message FullHistorySyncOnDemandRequestResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFullHistorySyncOnDemandRequestResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a FullHistorySyncOnDemandRequestResponse message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns FullHistorySyncOnDemandRequestResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse;

                    /**
                     * Decodes a FullHistorySyncOnDemandRequestResponse message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns FullHistorySyncOnDemandRequestResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse;

                    /**
                     * Verifies a FullHistorySyncOnDemandRequestResponse message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a FullHistorySyncOnDemandRequestResponse message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns FullHistorySyncOnDemandRequestResponse
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse;

                    /**
                     * Creates a plain object from a FullHistorySyncOnDemandRequestResponse message. Also converts values to other types if specified.
                     * @param message FullHistorySyncOnDemandRequestResponse
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this FullHistorySyncOnDemandRequestResponse to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for FullHistorySyncOnDemandRequestResponse
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** FullHistorySyncOnDemandResponseCode enum. */
                enum FullHistorySyncOnDemandResponseCode {
                    REQUEST_SUCCESS = 0,
                    REQUEST_TIME_EXPIRED = 1,
                    DECLINED_SHARING_HISTORY = 2,
                    GENERIC_ERROR = 3,
                    ERROR_REQUEST_ON_NON_SMB_PRIMARY = 4,
                    ERROR_HOSTED_DEVICE_NOT_CONNECTED = 5,
                    ERROR_HOSTED_DEVICE_LOGIN_TIME_NOT_SET = 6
                }

                /** Properties of a HistorySyncChunkRetryResponse. */
                interface IHistorySyncChunkRetryResponse {

                    /** HistorySyncChunkRetryResponse syncType */
                    syncType?: (E2E.Message.HistorySyncType|null);

                    /** HistorySyncChunkRetryResponse chunkOrder */
                    chunkOrder?: (number|null);

                    /** HistorySyncChunkRetryResponse requestId */
                    requestId?: (string|null);

                    /** HistorySyncChunkRetryResponse responseCode */
                    responseCode?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponseCode|null);

                    /** HistorySyncChunkRetryResponse canRecover */
                    canRecover?: (boolean|null);
                }

                /** Represents a HistorySyncChunkRetryResponse. */
                class HistorySyncChunkRetryResponse implements IHistorySyncChunkRetryResponse {

                    /**
                     * Constructs a new HistorySyncChunkRetryResponse.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse);

                    /** HistorySyncChunkRetryResponse syncType. */
                    public syncType: E2E.Message.HistorySyncType;

                    /** HistorySyncChunkRetryResponse chunkOrder. */
                    public chunkOrder: number;

                    /** HistorySyncChunkRetryResponse requestId. */
                    public requestId: string;

                    /** HistorySyncChunkRetryResponse responseCode. */
                    public responseCode: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponseCode;

                    /** HistorySyncChunkRetryResponse canRecover. */
                    public canRecover: boolean;

                    /**
                     * Creates a new HistorySyncChunkRetryResponse instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns HistorySyncChunkRetryResponse instance
                     */
                    public static create(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse;

                    /**
                     * Encodes the specified HistorySyncChunkRetryResponse message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse.verify|verify} messages.
                     * @param message HistorySyncChunkRetryResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified HistorySyncChunkRetryResponse message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse.verify|verify} messages.
                     * @param message HistorySyncChunkRetryResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a HistorySyncChunkRetryResponse message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns HistorySyncChunkRetryResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse;

                    /**
                     * Decodes a HistorySyncChunkRetryResponse message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns HistorySyncChunkRetryResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse;

                    /**
                     * Verifies a HistorySyncChunkRetryResponse message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a HistorySyncChunkRetryResponse message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns HistorySyncChunkRetryResponse
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse;

                    /**
                     * Creates a plain object from a HistorySyncChunkRetryResponse message. Also converts values to other types if specified.
                     * @param message HistorySyncChunkRetryResponse
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this HistorySyncChunkRetryResponse to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for HistorySyncChunkRetryResponse
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** HistorySyncChunkRetryResponseCode enum. */
                enum HistorySyncChunkRetryResponseCode {
                    GENERATION_ERROR = 1,
                    CHUNK_CONSUMED = 2,
                    TIMEOUT = 3,
                    SESSION_EXHAUSTED = 4,
                    CHUNK_EXHAUSTED = 5,
                    DUPLICATED_REQUEST = 6
                }

                /** Properties of a LinkPreviewResponse. */
                interface ILinkPreviewResponse {

                    /** LinkPreviewResponse url */
                    url?: (string|null);

                    /** LinkPreviewResponse title */
                    title?: (string|null);

                    /** LinkPreviewResponse description */
                    description?: (string|null);

                    /** LinkPreviewResponse thumbData */
                    thumbData?: (Uint8Array|null);

                    /** LinkPreviewResponse matchText */
                    matchText?: (string|null);

                    /** LinkPreviewResponse previewType */
                    previewType?: (string|null);

                    /** LinkPreviewResponse hqThumbnail */
                    hqThumbnail?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.ILinkPreviewHighQualityThumbnail|null);

                    /** LinkPreviewResponse previewMetadata */
                    previewMetadata?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.IPaymentLinkPreviewMetadata|null);
                }

                /** Represents a LinkPreviewResponse. */
                class LinkPreviewResponse implements ILinkPreviewResponse {

                    /**
                     * Constructs a new LinkPreviewResponse.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ILinkPreviewResponse);

                    /** LinkPreviewResponse url. */
                    public url: string;

                    /** LinkPreviewResponse title. */
                    public title: string;

                    /** LinkPreviewResponse description. */
                    public description: string;

                    /** LinkPreviewResponse thumbData. */
                    public thumbData: Uint8Array;

                    /** LinkPreviewResponse matchText. */
                    public matchText: string;

                    /** LinkPreviewResponse previewType. */
                    public previewType: string;

                    /** LinkPreviewResponse hqThumbnail. */
                    public hqThumbnail?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.ILinkPreviewHighQualityThumbnail|null);

                    /** LinkPreviewResponse previewMetadata. */
                    public previewMetadata?: (E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.IPaymentLinkPreviewMetadata|null);

                    /**
                     * Creates a new LinkPreviewResponse instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns LinkPreviewResponse instance
                     */
                    public static create(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ILinkPreviewResponse): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse;

                    /**
                     * Encodes the specified LinkPreviewResponse message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.verify|verify} messages.
                     * @param message LinkPreviewResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ILinkPreviewResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified LinkPreviewResponse message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.verify|verify} messages.
                     * @param message LinkPreviewResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ILinkPreviewResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a LinkPreviewResponse message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns LinkPreviewResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse;

                    /**
                     * Decodes a LinkPreviewResponse message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns LinkPreviewResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse;

                    /**
                     * Verifies a LinkPreviewResponse message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a LinkPreviewResponse message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns LinkPreviewResponse
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse;

                    /**
                     * Creates a plain object from a LinkPreviewResponse message. Also converts values to other types if specified.
                     * @param message LinkPreviewResponse
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this LinkPreviewResponse to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for LinkPreviewResponse
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                namespace LinkPreviewResponse {

                    /** Properties of a LinkPreviewHighQualityThumbnail. */
                    interface ILinkPreviewHighQualityThumbnail {

                        /** LinkPreviewHighQualityThumbnail directPath */
                        directPath?: (string|null);

                        /** LinkPreviewHighQualityThumbnail thumbHash */
                        thumbHash?: (string|null);

                        /** LinkPreviewHighQualityThumbnail encThumbHash */
                        encThumbHash?: (string|null);

                        /** LinkPreviewHighQualityThumbnail mediaKey */
                        mediaKey?: (Uint8Array|null);

                        /** LinkPreviewHighQualityThumbnail mediaKeyTimestampMs */
                        mediaKeyTimestampMs?: (number|Long|null);

                        /** LinkPreviewHighQualityThumbnail thumbWidth */
                        thumbWidth?: (number|null);

                        /** LinkPreviewHighQualityThumbnail thumbHeight */
                        thumbHeight?: (number|null);
                    }

                    /** Represents a LinkPreviewHighQualityThumbnail. */
                    class LinkPreviewHighQualityThumbnail implements ILinkPreviewHighQualityThumbnail {

                        /**
                         * Constructs a new LinkPreviewHighQualityThumbnail.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.ILinkPreviewHighQualityThumbnail);

                        /** LinkPreviewHighQualityThumbnail directPath. */
                        public directPath: string;

                        /** LinkPreviewHighQualityThumbnail thumbHash. */
                        public thumbHash: string;

                        /** LinkPreviewHighQualityThumbnail encThumbHash. */
                        public encThumbHash: string;

                        /** LinkPreviewHighQualityThumbnail mediaKey. */
                        public mediaKey: Uint8Array;

                        /** LinkPreviewHighQualityThumbnail mediaKeyTimestampMs. */
                        public mediaKeyTimestampMs: (number|Long);

                        /** LinkPreviewHighQualityThumbnail thumbWidth. */
                        public thumbWidth: number;

                        /** LinkPreviewHighQualityThumbnail thumbHeight. */
                        public thumbHeight: number;

                        /**
                         * Creates a new LinkPreviewHighQualityThumbnail instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns LinkPreviewHighQualityThumbnail instance
                         */
                        public static create(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.ILinkPreviewHighQualityThumbnail): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail;

                        /**
                         * Encodes the specified LinkPreviewHighQualityThumbnail message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail.verify|verify} messages.
                         * @param message LinkPreviewHighQualityThumbnail message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.ILinkPreviewHighQualityThumbnail, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified LinkPreviewHighQualityThumbnail message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail.verify|verify} messages.
                         * @param message LinkPreviewHighQualityThumbnail message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.ILinkPreviewHighQualityThumbnail, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a LinkPreviewHighQualityThumbnail message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns LinkPreviewHighQualityThumbnail
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail;

                        /**
                         * Decodes a LinkPreviewHighQualityThumbnail message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns LinkPreviewHighQualityThumbnail
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail;

                        /**
                         * Verifies a LinkPreviewHighQualityThumbnail message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a LinkPreviewHighQualityThumbnail message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns LinkPreviewHighQualityThumbnail
                         */
                        public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail;

                        /**
                         * Creates a plain object from a LinkPreviewHighQualityThumbnail message. Also converts values to other types if specified.
                         * @param message LinkPreviewHighQualityThumbnail
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this LinkPreviewHighQualityThumbnail to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for LinkPreviewHighQualityThumbnail
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }

                    /** Properties of a PaymentLinkPreviewMetadata. */
                    interface IPaymentLinkPreviewMetadata {

                        /** PaymentLinkPreviewMetadata isBusinessVerified */
                        isBusinessVerified?: (boolean|null);

                        /** PaymentLinkPreviewMetadata providerName */
                        providerName?: (string|null);
                    }

                    /** Represents a PaymentLinkPreviewMetadata. */
                    class PaymentLinkPreviewMetadata implements IPaymentLinkPreviewMetadata {

                        /**
                         * Constructs a new PaymentLinkPreviewMetadata.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.IPaymentLinkPreviewMetadata);

                        /** PaymentLinkPreviewMetadata isBusinessVerified. */
                        public isBusinessVerified: boolean;

                        /** PaymentLinkPreviewMetadata providerName. */
                        public providerName: string;

                        /**
                         * Creates a new PaymentLinkPreviewMetadata instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns PaymentLinkPreviewMetadata instance
                         */
                        public static create(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.IPaymentLinkPreviewMetadata): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata;

                        /**
                         * Encodes the specified PaymentLinkPreviewMetadata message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata.verify|verify} messages.
                         * @param message PaymentLinkPreviewMetadata message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.IPaymentLinkPreviewMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified PaymentLinkPreviewMetadata message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata.verify|verify} messages.
                         * @param message PaymentLinkPreviewMetadata message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.IPaymentLinkPreviewMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a PaymentLinkPreviewMetadata message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns PaymentLinkPreviewMetadata
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata;

                        /**
                         * Decodes a PaymentLinkPreviewMetadata message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns PaymentLinkPreviewMetadata
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata;

                        /**
                         * Verifies a PaymentLinkPreviewMetadata message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a PaymentLinkPreviewMetadata message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns PaymentLinkPreviewMetadata
                         */
                        public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata;

                        /**
                         * Creates a plain object from a PaymentLinkPreviewMetadata message. Also converts values to other types if specified.
                         * @param message PaymentLinkPreviewMetadata
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this PaymentLinkPreviewMetadata to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for PaymentLinkPreviewMetadata
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }
                }

                /** Properties of a PlaceholderMessageResendResponse. */
                interface IPlaceholderMessageResendResponse {

                    /** PlaceholderMessageResendResponse webMessageInfoBytes */
                    webMessageInfoBytes?: (Uint8Array|null);
                }

                /** Represents a PlaceholderMessageResendResponse. */
                class PlaceholderMessageResendResponse implements IPlaceholderMessageResendResponse {

                    /**
                     * Constructs a new PlaceholderMessageResendResponse.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IPlaceholderMessageResendResponse);

                    /** PlaceholderMessageResendResponse webMessageInfoBytes. */
                    public webMessageInfoBytes: Uint8Array;

                    /**
                     * Creates a new PlaceholderMessageResendResponse instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns PlaceholderMessageResendResponse instance
                     */
                    public static create(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IPlaceholderMessageResendResponse): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse;

                    /**
                     * Encodes the specified PlaceholderMessageResendResponse message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse.verify|verify} messages.
                     * @param message PlaceholderMessageResendResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IPlaceholderMessageResendResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified PlaceholderMessageResendResponse message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse.verify|verify} messages.
                     * @param message PlaceholderMessageResendResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IPlaceholderMessageResendResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a PlaceholderMessageResendResponse message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns PlaceholderMessageResendResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse;

                    /**
                     * Decodes a PlaceholderMessageResendResponse message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns PlaceholderMessageResendResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse;

                    /**
                     * Verifies a PlaceholderMessageResendResponse message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a PlaceholderMessageResendResponse message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns PlaceholderMessageResendResponse
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse;

                    /**
                     * Creates a plain object from a PlaceholderMessageResendResponse message. Also converts values to other types if specified.
                     * @param message PlaceholderMessageResendResponse
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this PlaceholderMessageResendResponse to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for PlaceholderMessageResendResponse
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a SyncDSnapshotFatalRecoveryResponse. */
                interface ISyncDSnapshotFatalRecoveryResponse {

                    /** SyncDSnapshotFatalRecoveryResponse collectionSnapshot */
                    collectionSnapshot?: (Uint8Array|null);

                    /** SyncDSnapshotFatalRecoveryResponse isCompressed */
                    isCompressed?: (boolean|null);
                }

                /** Represents a SyncDSnapshotFatalRecoveryResponse. */
                class SyncDSnapshotFatalRecoveryResponse implements ISyncDSnapshotFatalRecoveryResponse {

                    /**
                     * Constructs a new SyncDSnapshotFatalRecoveryResponse.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse);

                    /** SyncDSnapshotFatalRecoveryResponse collectionSnapshot. */
                    public collectionSnapshot: Uint8Array;

                    /** SyncDSnapshotFatalRecoveryResponse isCompressed. */
                    public isCompressed: boolean;

                    /**
                     * Creates a new SyncDSnapshotFatalRecoveryResponse instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns SyncDSnapshotFatalRecoveryResponse instance
                     */
                    public static create(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse;

                    /**
                     * Encodes the specified SyncDSnapshotFatalRecoveryResponse message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse.verify|verify} messages.
                     * @param message SyncDSnapshotFatalRecoveryResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified SyncDSnapshotFatalRecoveryResponse message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse.verify|verify} messages.
                     * @param message SyncDSnapshotFatalRecoveryResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a SyncDSnapshotFatalRecoveryResponse message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns SyncDSnapshotFatalRecoveryResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse;

                    /**
                     * Decodes a SyncDSnapshotFatalRecoveryResponse message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns SyncDSnapshotFatalRecoveryResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse;

                    /**
                     * Verifies a SyncDSnapshotFatalRecoveryResponse message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a SyncDSnapshotFatalRecoveryResponse message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns SyncDSnapshotFatalRecoveryResponse
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse;

                    /**
                     * Creates a plain object from a SyncDSnapshotFatalRecoveryResponse message. Also converts values to other types if specified.
                     * @param message SyncDSnapshotFatalRecoveryResponse
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this SyncDSnapshotFatalRecoveryResponse to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for SyncDSnapshotFatalRecoveryResponse
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a WaffleNonceFetchResponse. */
                interface IWaffleNonceFetchResponse {

                    /** WaffleNonceFetchResponse nonce */
                    nonce?: (string|null);

                    /** WaffleNonceFetchResponse waEntFbid */
                    waEntFbid?: (string|null);
                }

                /** Represents a WaffleNonceFetchResponse. */
                class WaffleNonceFetchResponse implements IWaffleNonceFetchResponse {

                    /**
                     * Constructs a new WaffleNonceFetchResponse.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IWaffleNonceFetchResponse);

                    /** WaffleNonceFetchResponse nonce. */
                    public nonce: string;

                    /** WaffleNonceFetchResponse waEntFbid. */
                    public waEntFbid: string;

                    /**
                     * Creates a new WaffleNonceFetchResponse instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns WaffleNonceFetchResponse instance
                     */
                    public static create(properties?: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IWaffleNonceFetchResponse): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse;

                    /**
                     * Encodes the specified WaffleNonceFetchResponse message. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse.verify|verify} messages.
                     * @param message WaffleNonceFetchResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IWaffleNonceFetchResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified WaffleNonceFetchResponse message, length delimited. Does not implicitly {@link E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse.verify|verify} messages.
                     * @param message WaffleNonceFetchResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IWaffleNonceFetchResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a WaffleNonceFetchResponse message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns WaffleNonceFetchResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse;

                    /**
                     * Decodes a WaffleNonceFetchResponse message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns WaffleNonceFetchResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse;

                    /**
                     * Verifies a WaffleNonceFetchResponse message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a WaffleNonceFetchResponse message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns WaffleNonceFetchResponse
                     */
                    public static fromObject(object: { [k: string]: any }): E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse;

                    /**
                     * Creates a plain object from a WaffleNonceFetchResponse message. Also converts values to other types if specified.
                     * @param message WaffleNonceFetchResponse
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: E2E.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this WaffleNonceFetchResponse to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for WaffleNonceFetchResponse
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }
            }
        }

        /** PeerDataOperationRequestType enum. */
        enum PeerDataOperationRequestType {
            UPLOAD_STICKER = 0,
            SEND_RECENT_STICKER_BOOTSTRAP = 1,
            GENERATE_LINK_PREVIEW = 2,
            HISTORY_SYNC_ON_DEMAND = 3,
            PLACEHOLDER_MESSAGE_RESEND = 4,
            WAFFLE_LINKING_NONCE_FETCH = 5,
            FULL_HISTORY_SYNC_ON_DEMAND = 6,
            COMPANION_META_NONCE_FETCH = 7,
            COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY = 8,
            COMPANION_CANONICAL_USER_NONCE_FETCH = 9,
            HISTORY_SYNC_CHUNK_RETRY = 10
        }

        /** Properties of a PinInChatMessage. */
        interface IPinInChatMessage {

            /** PinInChatMessage key */
            key?: (Protocol.IMessageKey|null);

            /** PinInChatMessage type */
            type?: (E2E.Message.PinInChatMessage.Type|null);

            /** PinInChatMessage senderTimestampMs */
            senderTimestampMs?: (number|Long|null);
        }

        /** Represents a PinInChatMessage. */
        class PinInChatMessage implements IPinInChatMessage {

            /**
             * Constructs a new PinInChatMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPinInChatMessage);

            /** PinInChatMessage key. */
            public key?: (Protocol.IMessageKey|null);

            /** PinInChatMessage type. */
            public type: E2E.Message.PinInChatMessage.Type;

            /** PinInChatMessage senderTimestampMs. */
            public senderTimestampMs: (number|Long);

            /**
             * Creates a new PinInChatMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PinInChatMessage instance
             */
            public static create(properties?: E2E.Message.IPinInChatMessage): E2E.Message.PinInChatMessage;

            /**
             * Encodes the specified PinInChatMessage message. Does not implicitly {@link E2E.Message.PinInChatMessage.verify|verify} messages.
             * @param message PinInChatMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPinInChatMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PinInChatMessage message, length delimited. Does not implicitly {@link E2E.Message.PinInChatMessage.verify|verify} messages.
             * @param message PinInChatMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPinInChatMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PinInChatMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PinInChatMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PinInChatMessage;

            /**
             * Decodes a PinInChatMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PinInChatMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PinInChatMessage;

            /**
             * Verifies a PinInChatMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PinInChatMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PinInChatMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PinInChatMessage;

            /**
             * Creates a plain object from a PinInChatMessage message. Also converts values to other types if specified.
             * @param message PinInChatMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PinInChatMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PinInChatMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PinInChatMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace PinInChatMessage {

            /** Type enum. */
            enum Type {
                UNKNOWN_TYPE = 0,
                PIN_FOR_ALL = 1,
                UNPIN_FOR_ALL = 2
            }
        }

        /** Properties of a PlaceholderMessage. */
        interface IPlaceholderMessage {

            /** PlaceholderMessage type */
            type?: (E2E.Message.PlaceholderMessage.PlaceholderType|null);
        }

        /** Represents a PlaceholderMessage. */
        class PlaceholderMessage implements IPlaceholderMessage {

            /**
             * Constructs a new PlaceholderMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPlaceholderMessage);

            /** PlaceholderMessage type. */
            public type: E2E.Message.PlaceholderMessage.PlaceholderType;

            /**
             * Creates a new PlaceholderMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PlaceholderMessage instance
             */
            public static create(properties?: E2E.Message.IPlaceholderMessage): E2E.Message.PlaceholderMessage;

            /**
             * Encodes the specified PlaceholderMessage message. Does not implicitly {@link E2E.Message.PlaceholderMessage.verify|verify} messages.
             * @param message PlaceholderMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPlaceholderMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PlaceholderMessage message, length delimited. Does not implicitly {@link E2E.Message.PlaceholderMessage.verify|verify} messages.
             * @param message PlaceholderMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPlaceholderMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PlaceholderMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PlaceholderMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PlaceholderMessage;

            /**
             * Decodes a PlaceholderMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PlaceholderMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PlaceholderMessage;

            /**
             * Verifies a PlaceholderMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PlaceholderMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PlaceholderMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PlaceholderMessage;

            /**
             * Creates a plain object from a PlaceholderMessage message. Also converts values to other types if specified.
             * @param message PlaceholderMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PlaceholderMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PlaceholderMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PlaceholderMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace PlaceholderMessage {

            /** PlaceholderType enum. */
            enum PlaceholderType {
                MASK_LINKED_DEVICES = 0
            }
        }

        /** PollContentType enum. */
        enum PollContentType {
            UNKNOWN = 0,
            TEXT = 1,
            IMAGE = 2
        }

        /** Properties of a PollCreationMessage. */
        interface IPollCreationMessage {

            /** PollCreationMessage encKey */
            encKey?: (Uint8Array|null);

            /** PollCreationMessage name */
            name?: (string|null);

            /** PollCreationMessage options */
            options?: (E2E.Message.PollCreationMessage.IOption[]|null);

            /** PollCreationMessage selectableOptionsCount */
            selectableOptionsCount?: (number|null);

            /** PollCreationMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** PollCreationMessage pollContentType */
            pollContentType?: (E2E.Message.PollContentType|null);

            /** PollCreationMessage pollType */
            pollType?: (E2E.Message.PollCreationMessage.PollType|null);

            /** PollCreationMessage correctAnswer */
            correctAnswer?: (E2E.Message.PollCreationMessage.IOption|null);
        }

        /** Represents a PollCreationMessage. */
        class PollCreationMessage implements IPollCreationMessage {

            /**
             * Constructs a new PollCreationMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPollCreationMessage);

            /** PollCreationMessage encKey. */
            public encKey: Uint8Array;

            /** PollCreationMessage name. */
            public name: string;

            /** PollCreationMessage options. */
            public options: E2E.Message.PollCreationMessage.IOption[];

            /** PollCreationMessage selectableOptionsCount. */
            public selectableOptionsCount: number;

            /** PollCreationMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** PollCreationMessage pollContentType. */
            public pollContentType: E2E.Message.PollContentType;

            /** PollCreationMessage pollType. */
            public pollType: E2E.Message.PollCreationMessage.PollType;

            /** PollCreationMessage correctAnswer. */
            public correctAnswer?: (E2E.Message.PollCreationMessage.IOption|null);

            /**
             * Creates a new PollCreationMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PollCreationMessage instance
             */
            public static create(properties?: E2E.Message.IPollCreationMessage): E2E.Message.PollCreationMessage;

            /**
             * Encodes the specified PollCreationMessage message. Does not implicitly {@link E2E.Message.PollCreationMessage.verify|verify} messages.
             * @param message PollCreationMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPollCreationMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PollCreationMessage message, length delimited. Does not implicitly {@link E2E.Message.PollCreationMessage.verify|verify} messages.
             * @param message PollCreationMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPollCreationMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PollCreationMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PollCreationMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PollCreationMessage;

            /**
             * Decodes a PollCreationMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PollCreationMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PollCreationMessage;

            /**
             * Verifies a PollCreationMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PollCreationMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PollCreationMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PollCreationMessage;

            /**
             * Creates a plain object from a PollCreationMessage message. Also converts values to other types if specified.
             * @param message PollCreationMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PollCreationMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PollCreationMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PollCreationMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace PollCreationMessage {

            /** Properties of an Option. */
            interface IOption {

                /** Option optionName */
                optionName?: (string|null);

                /** Option optionHash */
                optionHash?: (string|null);
            }

            /** Represents an Option. */
            class Option implements IOption {

                /**
                 * Constructs a new Option.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PollCreationMessage.IOption);

                /** Option optionName. */
                public optionName: string;

                /** Option optionHash. */
                public optionHash: string;

                /**
                 * Creates a new Option instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Option instance
                 */
                public static create(properties?: E2E.Message.PollCreationMessage.IOption): E2E.Message.PollCreationMessage.Option;

                /**
                 * Encodes the specified Option message. Does not implicitly {@link E2E.Message.PollCreationMessage.Option.verify|verify} messages.
                 * @param message Option message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PollCreationMessage.IOption, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Option message, length delimited. Does not implicitly {@link E2E.Message.PollCreationMessage.Option.verify|verify} messages.
                 * @param message Option message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PollCreationMessage.IOption, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an Option message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Option
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PollCreationMessage.Option;

                /**
                 * Decodes an Option message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Option
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PollCreationMessage.Option;

                /**
                 * Verifies an Option message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an Option message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Option
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PollCreationMessage.Option;

                /**
                 * Creates a plain object from an Option message. Also converts values to other types if specified.
                 * @param message Option
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PollCreationMessage.Option, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Option to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Option
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** PollType enum. */
            enum PollType {
                POLL = 0,
                QUIZ = 1
            }
        }

        /** Properties of a PollEncValue. */
        interface IPollEncValue {

            /** PollEncValue encPayload */
            encPayload?: (Uint8Array|null);

            /** PollEncValue encIv */
            encIv?: (Uint8Array|null);
        }

        /** Represents a PollEncValue. */
        class PollEncValue implements IPollEncValue {

            /**
             * Constructs a new PollEncValue.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPollEncValue);

            /** PollEncValue encPayload. */
            public encPayload: Uint8Array;

            /** PollEncValue encIv. */
            public encIv: Uint8Array;

            /**
             * Creates a new PollEncValue instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PollEncValue instance
             */
            public static create(properties?: E2E.Message.IPollEncValue): E2E.Message.PollEncValue;

            /**
             * Encodes the specified PollEncValue message. Does not implicitly {@link E2E.Message.PollEncValue.verify|verify} messages.
             * @param message PollEncValue message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPollEncValue, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PollEncValue message, length delimited. Does not implicitly {@link E2E.Message.PollEncValue.verify|verify} messages.
             * @param message PollEncValue message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPollEncValue, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PollEncValue message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PollEncValue
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PollEncValue;

            /**
             * Decodes a PollEncValue message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PollEncValue
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PollEncValue;

            /**
             * Verifies a PollEncValue message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PollEncValue message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PollEncValue
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PollEncValue;

            /**
             * Creates a plain object from a PollEncValue message. Also converts values to other types if specified.
             * @param message PollEncValue
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PollEncValue, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PollEncValue to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PollEncValue
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PollResultSnapshotMessage. */
        interface IPollResultSnapshotMessage {

            /** PollResultSnapshotMessage name */
            name?: (string|null);

            /** PollResultSnapshotMessage pollVotes */
            pollVotes?: (E2E.Message.PollResultSnapshotMessage.IPollVote[]|null);

            /** PollResultSnapshotMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);
        }

        /** Represents a PollResultSnapshotMessage. */
        class PollResultSnapshotMessage implements IPollResultSnapshotMessage {

            /**
             * Constructs a new PollResultSnapshotMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPollResultSnapshotMessage);

            /** PollResultSnapshotMessage name. */
            public name: string;

            /** PollResultSnapshotMessage pollVotes. */
            public pollVotes: E2E.Message.PollResultSnapshotMessage.IPollVote[];

            /** PollResultSnapshotMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /**
             * Creates a new PollResultSnapshotMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PollResultSnapshotMessage instance
             */
            public static create(properties?: E2E.Message.IPollResultSnapshotMessage): E2E.Message.PollResultSnapshotMessage;

            /**
             * Encodes the specified PollResultSnapshotMessage message. Does not implicitly {@link E2E.Message.PollResultSnapshotMessage.verify|verify} messages.
             * @param message PollResultSnapshotMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPollResultSnapshotMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PollResultSnapshotMessage message, length delimited. Does not implicitly {@link E2E.Message.PollResultSnapshotMessage.verify|verify} messages.
             * @param message PollResultSnapshotMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPollResultSnapshotMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PollResultSnapshotMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PollResultSnapshotMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PollResultSnapshotMessage;

            /**
             * Decodes a PollResultSnapshotMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PollResultSnapshotMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PollResultSnapshotMessage;

            /**
             * Verifies a PollResultSnapshotMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PollResultSnapshotMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PollResultSnapshotMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PollResultSnapshotMessage;

            /**
             * Creates a plain object from a PollResultSnapshotMessage message. Also converts values to other types if specified.
             * @param message PollResultSnapshotMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PollResultSnapshotMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PollResultSnapshotMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PollResultSnapshotMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace PollResultSnapshotMessage {

            /** Properties of a PollVote. */
            interface IPollVote {

                /** PollVote optionName */
                optionName?: (string|null);

                /** PollVote optionVoteCount */
                optionVoteCount?: (number|Long|null);
            }

            /** Represents a PollVote. */
            class PollVote implements IPollVote {

                /**
                 * Constructs a new PollVote.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.PollResultSnapshotMessage.IPollVote);

                /** PollVote optionName. */
                public optionName: string;

                /** PollVote optionVoteCount. */
                public optionVoteCount: (number|Long);

                /**
                 * Creates a new PollVote instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns PollVote instance
                 */
                public static create(properties?: E2E.Message.PollResultSnapshotMessage.IPollVote): E2E.Message.PollResultSnapshotMessage.PollVote;

                /**
                 * Encodes the specified PollVote message. Does not implicitly {@link E2E.Message.PollResultSnapshotMessage.PollVote.verify|verify} messages.
                 * @param message PollVote message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.PollResultSnapshotMessage.IPollVote, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified PollVote message, length delimited. Does not implicitly {@link E2E.Message.PollResultSnapshotMessage.PollVote.verify|verify} messages.
                 * @param message PollVote message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.PollResultSnapshotMessage.IPollVote, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a PollVote message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns PollVote
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PollResultSnapshotMessage.PollVote;

                /**
                 * Decodes a PollVote message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns PollVote
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PollResultSnapshotMessage.PollVote;

                /**
                 * Verifies a PollVote message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a PollVote message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns PollVote
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.PollResultSnapshotMessage.PollVote;

                /**
                 * Creates a plain object from a PollVote message. Also converts values to other types if specified.
                 * @param message PollVote
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.PollResultSnapshotMessage.PollVote, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this PollVote to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for PollVote
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a PollUpdateMessage. */
        interface IPollUpdateMessage {

            /** PollUpdateMessage pollCreationMessageKey */
            pollCreationMessageKey?: (Protocol.IMessageKey|null);

            /** PollUpdateMessage vote */
            vote?: (E2E.Message.IPollEncValue|null);

            /** PollUpdateMessage metadata */
            metadata?: (E2E.Message.IPollUpdateMessageMetadata|null);

            /** PollUpdateMessage senderTimestampMs */
            senderTimestampMs?: (number|Long|null);
        }

        /** Represents a PollUpdateMessage. */
        class PollUpdateMessage implements IPollUpdateMessage {

            /**
             * Constructs a new PollUpdateMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPollUpdateMessage);

            /** PollUpdateMessage pollCreationMessageKey. */
            public pollCreationMessageKey?: (Protocol.IMessageKey|null);

            /** PollUpdateMessage vote. */
            public vote?: (E2E.Message.IPollEncValue|null);

            /** PollUpdateMessage metadata. */
            public metadata?: (E2E.Message.IPollUpdateMessageMetadata|null);

            /** PollUpdateMessage senderTimestampMs. */
            public senderTimestampMs: (number|Long);

            /**
             * Creates a new PollUpdateMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PollUpdateMessage instance
             */
            public static create(properties?: E2E.Message.IPollUpdateMessage): E2E.Message.PollUpdateMessage;

            /**
             * Encodes the specified PollUpdateMessage message. Does not implicitly {@link E2E.Message.PollUpdateMessage.verify|verify} messages.
             * @param message PollUpdateMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPollUpdateMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PollUpdateMessage message, length delimited. Does not implicitly {@link E2E.Message.PollUpdateMessage.verify|verify} messages.
             * @param message PollUpdateMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPollUpdateMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PollUpdateMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PollUpdateMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PollUpdateMessage;

            /**
             * Decodes a PollUpdateMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PollUpdateMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PollUpdateMessage;

            /**
             * Verifies a PollUpdateMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PollUpdateMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PollUpdateMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PollUpdateMessage;

            /**
             * Creates a plain object from a PollUpdateMessage message. Also converts values to other types if specified.
             * @param message PollUpdateMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PollUpdateMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PollUpdateMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PollUpdateMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PollUpdateMessageMetadata. */
        interface IPollUpdateMessageMetadata {
        }

        /** Represents a PollUpdateMessageMetadata. */
        class PollUpdateMessageMetadata implements IPollUpdateMessageMetadata {

            /**
             * Constructs a new PollUpdateMessageMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPollUpdateMessageMetadata);

            /**
             * Creates a new PollUpdateMessageMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PollUpdateMessageMetadata instance
             */
            public static create(properties?: E2E.Message.IPollUpdateMessageMetadata): E2E.Message.PollUpdateMessageMetadata;

            /**
             * Encodes the specified PollUpdateMessageMetadata message. Does not implicitly {@link E2E.Message.PollUpdateMessageMetadata.verify|verify} messages.
             * @param message PollUpdateMessageMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPollUpdateMessageMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PollUpdateMessageMetadata message, length delimited. Does not implicitly {@link E2E.Message.PollUpdateMessageMetadata.verify|verify} messages.
             * @param message PollUpdateMessageMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPollUpdateMessageMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PollUpdateMessageMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PollUpdateMessageMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PollUpdateMessageMetadata;

            /**
             * Decodes a PollUpdateMessageMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PollUpdateMessageMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PollUpdateMessageMetadata;

            /**
             * Verifies a PollUpdateMessageMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PollUpdateMessageMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PollUpdateMessageMetadata
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PollUpdateMessageMetadata;

            /**
             * Creates a plain object from a PollUpdateMessageMetadata message. Also converts values to other types if specified.
             * @param message PollUpdateMessageMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PollUpdateMessageMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PollUpdateMessageMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PollUpdateMessageMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PollVoteMessage. */
        interface IPollVoteMessage {

            /** PollVoteMessage selectedOptions */
            selectedOptions?: (Uint8Array[]|null);
        }

        /** Represents a PollVoteMessage. */
        class PollVoteMessage implements IPollVoteMessage {

            /**
             * Constructs a new PollVoteMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IPollVoteMessage);

            /** PollVoteMessage selectedOptions. */
            public selectedOptions: Uint8Array[];

            /**
             * Creates a new PollVoteMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PollVoteMessage instance
             */
            public static create(properties?: E2E.Message.IPollVoteMessage): E2E.Message.PollVoteMessage;

            /**
             * Encodes the specified PollVoteMessage message. Does not implicitly {@link E2E.Message.PollVoteMessage.verify|verify} messages.
             * @param message PollVoteMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IPollVoteMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PollVoteMessage message, length delimited. Does not implicitly {@link E2E.Message.PollVoteMessage.verify|verify} messages.
             * @param message PollVoteMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IPollVoteMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PollVoteMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PollVoteMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.PollVoteMessage;

            /**
             * Decodes a PollVoteMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PollVoteMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.PollVoteMessage;

            /**
             * Verifies a PollVoteMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PollVoteMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PollVoteMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.PollVoteMessage;

            /**
             * Creates a plain object from a PollVoteMessage message. Also converts values to other types if specified.
             * @param message PollVoteMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.PollVoteMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PollVoteMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PollVoteMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ProductMessage. */
        interface IProductMessage {

            /** ProductMessage product */
            product?: (E2E.Message.ProductMessage.IProductSnapshot|null);

            /** ProductMessage businessOwnerJid */
            businessOwnerJid?: (string|null);

            /** ProductMessage catalog */
            catalog?: (E2E.Message.ProductMessage.ICatalogSnapshot|null);

            /** ProductMessage body */
            body?: (string|null);

            /** ProductMessage footer */
            footer?: (string|null);

            /** ProductMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);
        }

        /** Represents a ProductMessage. */
        class ProductMessage implements IProductMessage {

            /**
             * Constructs a new ProductMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IProductMessage);

            /** ProductMessage product. */
            public product?: (E2E.Message.ProductMessage.IProductSnapshot|null);

            /** ProductMessage businessOwnerJid. */
            public businessOwnerJid: string;

            /** ProductMessage catalog. */
            public catalog?: (E2E.Message.ProductMessage.ICatalogSnapshot|null);

            /** ProductMessage body. */
            public body: string;

            /** ProductMessage footer. */
            public footer: string;

            /** ProductMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /**
             * Creates a new ProductMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ProductMessage instance
             */
            public static create(properties?: E2E.Message.IProductMessage): E2E.Message.ProductMessage;

            /**
             * Encodes the specified ProductMessage message. Does not implicitly {@link E2E.Message.ProductMessage.verify|verify} messages.
             * @param message ProductMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IProductMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ProductMessage message, length delimited. Does not implicitly {@link E2E.Message.ProductMessage.verify|verify} messages.
             * @param message ProductMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IProductMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ProductMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ProductMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ProductMessage;

            /**
             * Decodes a ProductMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ProductMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ProductMessage;

            /**
             * Verifies a ProductMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ProductMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ProductMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ProductMessage;

            /**
             * Creates a plain object from a ProductMessage message. Also converts values to other types if specified.
             * @param message ProductMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ProductMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ProductMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ProductMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ProductMessage {

            /** Properties of a CatalogSnapshot. */
            interface ICatalogSnapshot {

                /** CatalogSnapshot catalogImage */
                catalogImage?: (E2E.Message.IImageMessage|null);

                /** CatalogSnapshot title */
                title?: (string|null);

                /** CatalogSnapshot description */
                description?: (string|null);
            }

            /** Represents a CatalogSnapshot. */
            class CatalogSnapshot implements ICatalogSnapshot {

                /**
                 * Constructs a new CatalogSnapshot.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.ProductMessage.ICatalogSnapshot);

                /** CatalogSnapshot catalogImage. */
                public catalogImage?: (E2E.Message.IImageMessage|null);

                /** CatalogSnapshot title. */
                public title: string;

                /** CatalogSnapshot description. */
                public description: string;

                /**
                 * Creates a new CatalogSnapshot instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns CatalogSnapshot instance
                 */
                public static create(properties?: E2E.Message.ProductMessage.ICatalogSnapshot): E2E.Message.ProductMessage.CatalogSnapshot;

                /**
                 * Encodes the specified CatalogSnapshot message. Does not implicitly {@link E2E.Message.ProductMessage.CatalogSnapshot.verify|verify} messages.
                 * @param message CatalogSnapshot message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.ProductMessage.ICatalogSnapshot, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified CatalogSnapshot message, length delimited. Does not implicitly {@link E2E.Message.ProductMessage.CatalogSnapshot.verify|verify} messages.
                 * @param message CatalogSnapshot message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.ProductMessage.ICatalogSnapshot, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a CatalogSnapshot message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns CatalogSnapshot
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ProductMessage.CatalogSnapshot;

                /**
                 * Decodes a CatalogSnapshot message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns CatalogSnapshot
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ProductMessage.CatalogSnapshot;

                /**
                 * Verifies a CatalogSnapshot message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a CatalogSnapshot message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns CatalogSnapshot
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.ProductMessage.CatalogSnapshot;

                /**
                 * Creates a plain object from a CatalogSnapshot message. Also converts values to other types if specified.
                 * @param message CatalogSnapshot
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.ProductMessage.CatalogSnapshot, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this CatalogSnapshot to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for CatalogSnapshot
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ProductSnapshot. */
            interface IProductSnapshot {

                /** ProductSnapshot productImage */
                productImage?: (E2E.Message.IImageMessage|null);

                /** ProductSnapshot productId */
                productId?: (string|null);

                /** ProductSnapshot title */
                title?: (string|null);

                /** ProductSnapshot description */
                description?: (string|null);

                /** ProductSnapshot currencyCode */
                currencyCode?: (string|null);

                /** ProductSnapshot priceAmount1000 */
                priceAmount1000?: (number|Long|null);

                /** ProductSnapshot retailerId */
                retailerId?: (string|null);

                /** ProductSnapshot url */
                url?: (string|null);

                /** ProductSnapshot productImageCount */
                productImageCount?: (number|null);

                /** ProductSnapshot firstImageId */
                firstImageId?: (string|null);

                /** ProductSnapshot salePriceAmount1000 */
                salePriceAmount1000?: (number|Long|null);

                /** ProductSnapshot signedUrl */
                signedUrl?: (string|null);
            }

            /** Represents a ProductSnapshot. */
            class ProductSnapshot implements IProductSnapshot {

                /**
                 * Constructs a new ProductSnapshot.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.ProductMessage.IProductSnapshot);

                /** ProductSnapshot productImage. */
                public productImage?: (E2E.Message.IImageMessage|null);

                /** ProductSnapshot productId. */
                public productId: string;

                /** ProductSnapshot title. */
                public title: string;

                /** ProductSnapshot description. */
                public description: string;

                /** ProductSnapshot currencyCode. */
                public currencyCode: string;

                /** ProductSnapshot priceAmount1000. */
                public priceAmount1000: (number|Long);

                /** ProductSnapshot retailerId. */
                public retailerId: string;

                /** ProductSnapshot url. */
                public url: string;

                /** ProductSnapshot productImageCount. */
                public productImageCount: number;

                /** ProductSnapshot firstImageId. */
                public firstImageId: string;

                /** ProductSnapshot salePriceAmount1000. */
                public salePriceAmount1000: (number|Long);

                /** ProductSnapshot signedUrl. */
                public signedUrl: string;

                /**
                 * Creates a new ProductSnapshot instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ProductSnapshot instance
                 */
                public static create(properties?: E2E.Message.ProductMessage.IProductSnapshot): E2E.Message.ProductMessage.ProductSnapshot;

                /**
                 * Encodes the specified ProductSnapshot message. Does not implicitly {@link E2E.Message.ProductMessage.ProductSnapshot.verify|verify} messages.
                 * @param message ProductSnapshot message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.ProductMessage.IProductSnapshot, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ProductSnapshot message, length delimited. Does not implicitly {@link E2E.Message.ProductMessage.ProductSnapshot.verify|verify} messages.
                 * @param message ProductSnapshot message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.ProductMessage.IProductSnapshot, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ProductSnapshot message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ProductSnapshot
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ProductMessage.ProductSnapshot;

                /**
                 * Decodes a ProductSnapshot message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ProductSnapshot
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ProductMessage.ProductSnapshot;

                /**
                 * Verifies a ProductSnapshot message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ProductSnapshot message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ProductSnapshot
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.ProductMessage.ProductSnapshot;

                /**
                 * Creates a plain object from a ProductSnapshot message. Also converts values to other types if specified.
                 * @param message ProductSnapshot
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.ProductMessage.ProductSnapshot, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ProductSnapshot to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ProductSnapshot
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a ProtocolMessage. */
        interface IProtocolMessage {

            /** ProtocolMessage key */
            key?: (Protocol.IMessageKey|null);

            /** ProtocolMessage type */
            type?: (E2E.Message.ProtocolMessage.Type|null);

            /** ProtocolMessage ephemeralExpiration */
            ephemeralExpiration?: (number|null);

            /** ProtocolMessage ephemeralSettingTimestamp */
            ephemeralSettingTimestamp?: (number|Long|null);

            /** ProtocolMessage historySyncNotification */
            historySyncNotification?: (E2E.Message.IHistorySyncNotification|null);

            /** ProtocolMessage appStateSyncKeyShare */
            appStateSyncKeyShare?: (E2E.Message.IAppStateSyncKeyShare|null);

            /** ProtocolMessage appStateSyncKeyRequest */
            appStateSyncKeyRequest?: (E2E.Message.IAppStateSyncKeyRequest|null);

            /** ProtocolMessage initialSecurityNotificationSettingSync */
            initialSecurityNotificationSettingSync?: (E2E.Message.IInitialSecurityNotificationSettingSync|null);

            /** ProtocolMessage appStateFatalExceptionNotification */
            appStateFatalExceptionNotification?: (E2E.Message.IAppStateFatalExceptionNotification|null);

            /** ProtocolMessage disappearingMode */
            disappearingMode?: (E2E.IDisappearingMode|null);

            /** ProtocolMessage editedMessage */
            editedMessage?: (E2E.IMessage|null);

            /** ProtocolMessage timestampMs */
            timestampMs?: (number|Long|null);

            /** ProtocolMessage peerDataOperationRequestMessage */
            peerDataOperationRequestMessage?: (E2E.Message.IPeerDataOperationRequestMessage|null);

            /** ProtocolMessage peerDataOperationRequestResponseMessage */
            peerDataOperationRequestResponseMessage?: (E2E.Message.IPeerDataOperationRequestResponseMessage|null);

            /** ProtocolMessage botFeedbackMessage */
            botFeedbackMessage?: (AICommon.IBotFeedbackMessage|null);

            /** ProtocolMessage invokerJid */
            invokerJid?: (string|null);

            /** ProtocolMessage requestWelcomeMessageMetadata */
            requestWelcomeMessageMetadata?: (E2E.Message.IRequestWelcomeMessageMetadata|null);

            /** ProtocolMessage mediaNotifyMessage */
            mediaNotifyMessage?: (E2E.IMediaNotifyMessage|null);

            /** ProtocolMessage cloudApiThreadControlNotification */
            cloudApiThreadControlNotification?: (E2E.Message.ICloudAPIThreadControlNotification|null);

            /** ProtocolMessage lidMigrationMappingSyncMessage */
            lidMigrationMappingSyncMessage?: (E2E.ILIDMigrationMappingSyncMessage|null);

            /** ProtocolMessage limitSharing */
            limitSharing?: (Protocol.ILimitSharing|null);

            /** ProtocolMessage aiPsiMetadata */
            aiPsiMetadata?: (Uint8Array|null);

            /** ProtocolMessage aiQueryFanout */
            aiQueryFanout?: (E2E.IAIQueryFanout|null);

            /** ProtocolMessage memberLabel */
            memberLabel?: (E2E.IMemberLabel|null);
        }

        /** Represents a ProtocolMessage. */
        class ProtocolMessage implements IProtocolMessage {

            /**
             * Constructs a new ProtocolMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IProtocolMessage);

            /** ProtocolMessage key. */
            public key?: (Protocol.IMessageKey|null);

            /** ProtocolMessage type. */
            public type: E2E.Message.ProtocolMessage.Type;

            /** ProtocolMessage ephemeralExpiration. */
            public ephemeralExpiration: number;

            /** ProtocolMessage ephemeralSettingTimestamp. */
            public ephemeralSettingTimestamp: (number|Long);

            /** ProtocolMessage historySyncNotification. */
            public historySyncNotification?: (E2E.Message.IHistorySyncNotification|null);

            /** ProtocolMessage appStateSyncKeyShare. */
            public appStateSyncKeyShare?: (E2E.Message.IAppStateSyncKeyShare|null);

            /** ProtocolMessage appStateSyncKeyRequest. */
            public appStateSyncKeyRequest?: (E2E.Message.IAppStateSyncKeyRequest|null);

            /** ProtocolMessage initialSecurityNotificationSettingSync. */
            public initialSecurityNotificationSettingSync?: (E2E.Message.IInitialSecurityNotificationSettingSync|null);

            /** ProtocolMessage appStateFatalExceptionNotification. */
            public appStateFatalExceptionNotification?: (E2E.Message.IAppStateFatalExceptionNotification|null);

            /** ProtocolMessage disappearingMode. */
            public disappearingMode?: (E2E.IDisappearingMode|null);

            /** ProtocolMessage editedMessage. */
            public editedMessage?: (E2E.IMessage|null);

            /** ProtocolMessage timestampMs. */
            public timestampMs: (number|Long);

            /** ProtocolMessage peerDataOperationRequestMessage. */
            public peerDataOperationRequestMessage?: (E2E.Message.IPeerDataOperationRequestMessage|null);

            /** ProtocolMessage peerDataOperationRequestResponseMessage. */
            public peerDataOperationRequestResponseMessage?: (E2E.Message.IPeerDataOperationRequestResponseMessage|null);

            /** ProtocolMessage botFeedbackMessage. */
            public botFeedbackMessage?: (AICommon.IBotFeedbackMessage|null);

            /** ProtocolMessage invokerJid. */
            public invokerJid: string;

            /** ProtocolMessage requestWelcomeMessageMetadata. */
            public requestWelcomeMessageMetadata?: (E2E.Message.IRequestWelcomeMessageMetadata|null);

            /** ProtocolMessage mediaNotifyMessage. */
            public mediaNotifyMessage?: (E2E.IMediaNotifyMessage|null);

            /** ProtocolMessage cloudApiThreadControlNotification. */
            public cloudApiThreadControlNotification?: (E2E.Message.ICloudAPIThreadControlNotification|null);

            /** ProtocolMessage lidMigrationMappingSyncMessage. */
            public lidMigrationMappingSyncMessage?: (E2E.ILIDMigrationMappingSyncMessage|null);

            /** ProtocolMessage limitSharing. */
            public limitSharing?: (Protocol.ILimitSharing|null);

            /** ProtocolMessage aiPsiMetadata. */
            public aiPsiMetadata: Uint8Array;

            /** ProtocolMessage aiQueryFanout. */
            public aiQueryFanout?: (E2E.IAIQueryFanout|null);

            /** ProtocolMessage memberLabel. */
            public memberLabel?: (E2E.IMemberLabel|null);

            /**
             * Creates a new ProtocolMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ProtocolMessage instance
             */
            public static create(properties?: E2E.Message.IProtocolMessage): E2E.Message.ProtocolMessage;

            /**
             * Encodes the specified ProtocolMessage message. Does not implicitly {@link E2E.Message.ProtocolMessage.verify|verify} messages.
             * @param message ProtocolMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IProtocolMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ProtocolMessage message, length delimited. Does not implicitly {@link E2E.Message.ProtocolMessage.verify|verify} messages.
             * @param message ProtocolMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IProtocolMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ProtocolMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ProtocolMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ProtocolMessage;

            /**
             * Decodes a ProtocolMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ProtocolMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ProtocolMessage;

            /**
             * Verifies a ProtocolMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ProtocolMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ProtocolMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ProtocolMessage;

            /**
             * Creates a plain object from a ProtocolMessage message. Also converts values to other types if specified.
             * @param message ProtocolMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ProtocolMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ProtocolMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ProtocolMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ProtocolMessage {

            /** Type enum. */
            enum Type {
                REVOKE = 0,
                EPHEMERAL_SETTING = 3,
                EPHEMERAL_SYNC_RESPONSE = 4,
                HISTORY_SYNC_NOTIFICATION = 5,
                APP_STATE_SYNC_KEY_SHARE = 6,
                APP_STATE_SYNC_KEY_REQUEST = 7,
                MSG_FANOUT_BACKFILL_REQUEST = 8,
                INITIAL_SECURITY_NOTIFICATION_SETTING_SYNC = 9,
                APP_STATE_FATAL_EXCEPTION_NOTIFICATION = 10,
                SHARE_PHONE_NUMBER = 11,
                MESSAGE_EDIT = 14,
                PEER_DATA_OPERATION_REQUEST_MESSAGE = 16,
                PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE = 17,
                REQUEST_WELCOME_MESSAGE = 18,
                BOT_FEEDBACK_MESSAGE = 19,
                MEDIA_NOTIFY_MESSAGE = 20,
                CLOUD_API_THREAD_CONTROL_NOTIFICATION = 21,
                LID_MIGRATION_MAPPING_SYNC = 22,
                REMINDER_MESSAGE = 23,
                BOT_MEMU_ONBOARDING_MESSAGE = 24,
                STATUS_MENTION_MESSAGE = 25,
                STOP_GENERATION_MESSAGE = 26,
                LIMIT_SHARING = 27,
                AI_PSI_METADATA = 28,
                AI_QUERY_FANOUT = 29,
                GROUP_MEMBER_LABEL_CHANGE = 30
            }
        }

        /** Properties of a QuestionResponseMessage. */
        interface IQuestionResponseMessage {

            /** QuestionResponseMessage key */
            key?: (Protocol.IMessageKey|null);

            /** QuestionResponseMessage text */
            text?: (string|null);
        }

        /** Represents a QuestionResponseMessage. */
        class QuestionResponseMessage implements IQuestionResponseMessage {

            /**
             * Constructs a new QuestionResponseMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IQuestionResponseMessage);

            /** QuestionResponseMessage key. */
            public key?: (Protocol.IMessageKey|null);

            /** QuestionResponseMessage text. */
            public text: string;

            /**
             * Creates a new QuestionResponseMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns QuestionResponseMessage instance
             */
            public static create(properties?: E2E.Message.IQuestionResponseMessage): E2E.Message.QuestionResponseMessage;

            /**
             * Encodes the specified QuestionResponseMessage message. Does not implicitly {@link E2E.Message.QuestionResponseMessage.verify|verify} messages.
             * @param message QuestionResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IQuestionResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified QuestionResponseMessage message, length delimited. Does not implicitly {@link E2E.Message.QuestionResponseMessage.verify|verify} messages.
             * @param message QuestionResponseMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IQuestionResponseMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a QuestionResponseMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns QuestionResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.QuestionResponseMessage;

            /**
             * Decodes a QuestionResponseMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns QuestionResponseMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.QuestionResponseMessage;

            /**
             * Verifies a QuestionResponseMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a QuestionResponseMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns QuestionResponseMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.QuestionResponseMessage;

            /**
             * Creates a plain object from a QuestionResponseMessage message. Also converts values to other types if specified.
             * @param message QuestionResponseMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.QuestionResponseMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this QuestionResponseMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for QuestionResponseMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ReactionMessage. */
        interface IReactionMessage {

            /** ReactionMessage key */
            key?: (Protocol.IMessageKey|null);

            /** ReactionMessage text */
            text?: (string|null);

            /** ReactionMessage groupingKey */
            groupingKey?: (string|null);

            /** ReactionMessage senderTimestampMs */
            senderTimestampMs?: (number|Long|null);
        }

        /** Represents a ReactionMessage. */
        class ReactionMessage implements IReactionMessage {

            /**
             * Constructs a new ReactionMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IReactionMessage);

            /** ReactionMessage key. */
            public key?: (Protocol.IMessageKey|null);

            /** ReactionMessage text. */
            public text: string;

            /** ReactionMessage groupingKey. */
            public groupingKey: string;

            /** ReactionMessage senderTimestampMs. */
            public senderTimestampMs: (number|Long);

            /**
             * Creates a new ReactionMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ReactionMessage instance
             */
            public static create(properties?: E2E.Message.IReactionMessage): E2E.Message.ReactionMessage;

            /**
             * Encodes the specified ReactionMessage message. Does not implicitly {@link E2E.Message.ReactionMessage.verify|verify} messages.
             * @param message ReactionMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IReactionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ReactionMessage message, length delimited. Does not implicitly {@link E2E.Message.ReactionMessage.verify|verify} messages.
             * @param message ReactionMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IReactionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ReactionMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ReactionMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ReactionMessage;

            /**
             * Decodes a ReactionMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ReactionMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ReactionMessage;

            /**
             * Verifies a ReactionMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ReactionMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ReactionMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ReactionMessage;

            /**
             * Creates a plain object from a ReactionMessage message. Also converts values to other types if specified.
             * @param message ReactionMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ReactionMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ReactionMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ReactionMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a RequestPaymentMessage. */
        interface IRequestPaymentMessage {

            /** RequestPaymentMessage noteMessage */
            noteMessage?: (E2E.IMessage|null);

            /** RequestPaymentMessage currencyCodeIso4217 */
            currencyCodeIso4217?: (string|null);

            /** RequestPaymentMessage amount1000 */
            amount1000?: (number|Long|null);

            /** RequestPaymentMessage requestFrom */
            requestFrom?: (string|null);

            /** RequestPaymentMessage expiryTimestamp */
            expiryTimestamp?: (number|Long|null);

            /** RequestPaymentMessage amount */
            amount?: (E2E.IMoney|null);

            /** RequestPaymentMessage background */
            background?: (E2E.IPaymentBackground|null);
        }

        /** Represents a RequestPaymentMessage. */
        class RequestPaymentMessage implements IRequestPaymentMessage {

            /**
             * Constructs a new RequestPaymentMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IRequestPaymentMessage);

            /** RequestPaymentMessage noteMessage. */
            public noteMessage?: (E2E.IMessage|null);

            /** RequestPaymentMessage currencyCodeIso4217. */
            public currencyCodeIso4217: string;

            /** RequestPaymentMessage amount1000. */
            public amount1000: (number|Long);

            /** RequestPaymentMessage requestFrom. */
            public requestFrom: string;

            /** RequestPaymentMessage expiryTimestamp. */
            public expiryTimestamp: (number|Long);

            /** RequestPaymentMessage amount. */
            public amount?: (E2E.IMoney|null);

            /** RequestPaymentMessage background. */
            public background?: (E2E.IPaymentBackground|null);

            /**
             * Creates a new RequestPaymentMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns RequestPaymentMessage instance
             */
            public static create(properties?: E2E.Message.IRequestPaymentMessage): E2E.Message.RequestPaymentMessage;

            /**
             * Encodes the specified RequestPaymentMessage message. Does not implicitly {@link E2E.Message.RequestPaymentMessage.verify|verify} messages.
             * @param message RequestPaymentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IRequestPaymentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified RequestPaymentMessage message, length delimited. Does not implicitly {@link E2E.Message.RequestPaymentMessage.verify|verify} messages.
             * @param message RequestPaymentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IRequestPaymentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a RequestPaymentMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns RequestPaymentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.RequestPaymentMessage;

            /**
             * Decodes a RequestPaymentMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns RequestPaymentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.RequestPaymentMessage;

            /**
             * Verifies a RequestPaymentMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a RequestPaymentMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns RequestPaymentMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.RequestPaymentMessage;

            /**
             * Creates a plain object from a RequestPaymentMessage message. Also converts values to other types if specified.
             * @param message RequestPaymentMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.RequestPaymentMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this RequestPaymentMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for RequestPaymentMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a RequestPhoneNumberMessage. */
        interface IRequestPhoneNumberMessage {

            /** RequestPhoneNumberMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);
        }

        /** Represents a RequestPhoneNumberMessage. */
        class RequestPhoneNumberMessage implements IRequestPhoneNumberMessage {

            /**
             * Constructs a new RequestPhoneNumberMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IRequestPhoneNumberMessage);

            /** RequestPhoneNumberMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /**
             * Creates a new RequestPhoneNumberMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns RequestPhoneNumberMessage instance
             */
            public static create(properties?: E2E.Message.IRequestPhoneNumberMessage): E2E.Message.RequestPhoneNumberMessage;

            /**
             * Encodes the specified RequestPhoneNumberMessage message. Does not implicitly {@link E2E.Message.RequestPhoneNumberMessage.verify|verify} messages.
             * @param message RequestPhoneNumberMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IRequestPhoneNumberMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified RequestPhoneNumberMessage message, length delimited. Does not implicitly {@link E2E.Message.RequestPhoneNumberMessage.verify|verify} messages.
             * @param message RequestPhoneNumberMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IRequestPhoneNumberMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a RequestPhoneNumberMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns RequestPhoneNumberMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.RequestPhoneNumberMessage;

            /**
             * Decodes a RequestPhoneNumberMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns RequestPhoneNumberMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.RequestPhoneNumberMessage;

            /**
             * Verifies a RequestPhoneNumberMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a RequestPhoneNumberMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns RequestPhoneNumberMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.RequestPhoneNumberMessage;

            /**
             * Creates a plain object from a RequestPhoneNumberMessage message. Also converts values to other types if specified.
             * @param message RequestPhoneNumberMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.RequestPhoneNumberMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this RequestPhoneNumberMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for RequestPhoneNumberMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a RequestWelcomeMessageMetadata. */
        interface IRequestWelcomeMessageMetadata {

            /** RequestWelcomeMessageMetadata localChatState */
            localChatState?: (E2E.Message.RequestWelcomeMessageMetadata.LocalChatState|null);
        }

        /** Represents a RequestWelcomeMessageMetadata. */
        class RequestWelcomeMessageMetadata implements IRequestWelcomeMessageMetadata {

            /**
             * Constructs a new RequestWelcomeMessageMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IRequestWelcomeMessageMetadata);

            /** RequestWelcomeMessageMetadata localChatState. */
            public localChatState: E2E.Message.RequestWelcomeMessageMetadata.LocalChatState;

            /**
             * Creates a new RequestWelcomeMessageMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns RequestWelcomeMessageMetadata instance
             */
            public static create(properties?: E2E.Message.IRequestWelcomeMessageMetadata): E2E.Message.RequestWelcomeMessageMetadata;

            /**
             * Encodes the specified RequestWelcomeMessageMetadata message. Does not implicitly {@link E2E.Message.RequestWelcomeMessageMetadata.verify|verify} messages.
             * @param message RequestWelcomeMessageMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IRequestWelcomeMessageMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified RequestWelcomeMessageMetadata message, length delimited. Does not implicitly {@link E2E.Message.RequestWelcomeMessageMetadata.verify|verify} messages.
             * @param message RequestWelcomeMessageMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IRequestWelcomeMessageMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a RequestWelcomeMessageMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns RequestWelcomeMessageMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.RequestWelcomeMessageMetadata;

            /**
             * Decodes a RequestWelcomeMessageMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns RequestWelcomeMessageMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.RequestWelcomeMessageMetadata;

            /**
             * Verifies a RequestWelcomeMessageMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a RequestWelcomeMessageMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns RequestWelcomeMessageMetadata
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.RequestWelcomeMessageMetadata;

            /**
             * Creates a plain object from a RequestWelcomeMessageMetadata message. Also converts values to other types if specified.
             * @param message RequestWelcomeMessageMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.RequestWelcomeMessageMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this RequestWelcomeMessageMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for RequestWelcomeMessageMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace RequestWelcomeMessageMetadata {

            /** LocalChatState enum. */
            enum LocalChatState {
                EMPTY = 0,
                NON_EMPTY = 1
            }
        }

        /** Properties of a ScheduledCallCreationMessage. */
        interface IScheduledCallCreationMessage {

            /** ScheduledCallCreationMessage scheduledTimestampMs */
            scheduledTimestampMs?: (number|Long|null);

            /** ScheduledCallCreationMessage callType */
            callType?: (E2E.Message.ScheduledCallCreationMessage.CallType|null);

            /** ScheduledCallCreationMessage title */
            title?: (string|null);
        }

        /** Represents a ScheduledCallCreationMessage. */
        class ScheduledCallCreationMessage implements IScheduledCallCreationMessage {

            /**
             * Constructs a new ScheduledCallCreationMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IScheduledCallCreationMessage);

            /** ScheduledCallCreationMessage scheduledTimestampMs. */
            public scheduledTimestampMs: (number|Long);

            /** ScheduledCallCreationMessage callType. */
            public callType: E2E.Message.ScheduledCallCreationMessage.CallType;

            /** ScheduledCallCreationMessage title. */
            public title: string;

            /**
             * Creates a new ScheduledCallCreationMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ScheduledCallCreationMessage instance
             */
            public static create(properties?: E2E.Message.IScheduledCallCreationMessage): E2E.Message.ScheduledCallCreationMessage;

            /**
             * Encodes the specified ScheduledCallCreationMessage message. Does not implicitly {@link E2E.Message.ScheduledCallCreationMessage.verify|verify} messages.
             * @param message ScheduledCallCreationMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IScheduledCallCreationMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ScheduledCallCreationMessage message, length delimited. Does not implicitly {@link E2E.Message.ScheduledCallCreationMessage.verify|verify} messages.
             * @param message ScheduledCallCreationMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IScheduledCallCreationMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ScheduledCallCreationMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ScheduledCallCreationMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ScheduledCallCreationMessage;

            /**
             * Decodes a ScheduledCallCreationMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ScheduledCallCreationMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ScheduledCallCreationMessage;

            /**
             * Verifies a ScheduledCallCreationMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ScheduledCallCreationMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ScheduledCallCreationMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ScheduledCallCreationMessage;

            /**
             * Creates a plain object from a ScheduledCallCreationMessage message. Also converts values to other types if specified.
             * @param message ScheduledCallCreationMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ScheduledCallCreationMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ScheduledCallCreationMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ScheduledCallCreationMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ScheduledCallCreationMessage {

            /** CallType enum. */
            enum CallType {
                UNKNOWN = 0,
                VOICE = 1,
                VIDEO = 2
            }
        }

        /** Properties of a ScheduledCallEditMessage. */
        interface IScheduledCallEditMessage {

            /** ScheduledCallEditMessage key */
            key?: (Protocol.IMessageKey|null);

            /** ScheduledCallEditMessage editType */
            editType?: (E2E.Message.ScheduledCallEditMessage.EditType|null);
        }

        /** Represents a ScheduledCallEditMessage. */
        class ScheduledCallEditMessage implements IScheduledCallEditMessage {

            /**
             * Constructs a new ScheduledCallEditMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IScheduledCallEditMessage);

            /** ScheduledCallEditMessage key. */
            public key?: (Protocol.IMessageKey|null);

            /** ScheduledCallEditMessage editType. */
            public editType: E2E.Message.ScheduledCallEditMessage.EditType;

            /**
             * Creates a new ScheduledCallEditMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ScheduledCallEditMessage instance
             */
            public static create(properties?: E2E.Message.IScheduledCallEditMessage): E2E.Message.ScheduledCallEditMessage;

            /**
             * Encodes the specified ScheduledCallEditMessage message. Does not implicitly {@link E2E.Message.ScheduledCallEditMessage.verify|verify} messages.
             * @param message ScheduledCallEditMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IScheduledCallEditMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ScheduledCallEditMessage message, length delimited. Does not implicitly {@link E2E.Message.ScheduledCallEditMessage.verify|verify} messages.
             * @param message ScheduledCallEditMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IScheduledCallEditMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ScheduledCallEditMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ScheduledCallEditMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.ScheduledCallEditMessage;

            /**
             * Decodes a ScheduledCallEditMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ScheduledCallEditMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.ScheduledCallEditMessage;

            /**
             * Verifies a ScheduledCallEditMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ScheduledCallEditMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ScheduledCallEditMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.ScheduledCallEditMessage;

            /**
             * Creates a plain object from a ScheduledCallEditMessage message. Also converts values to other types if specified.
             * @param message ScheduledCallEditMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.ScheduledCallEditMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ScheduledCallEditMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ScheduledCallEditMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ScheduledCallEditMessage {

            /** EditType enum. */
            enum EditType {
                UNKNOWN = 0,
                CANCEL = 1
            }
        }

        /** Properties of a SecretEncryptedMessage. */
        interface ISecretEncryptedMessage {

            /** SecretEncryptedMessage targetMessageKey */
            targetMessageKey?: (Protocol.IMessageKey|null);

            /** SecretEncryptedMessage encPayload */
            encPayload?: (Uint8Array|null);

            /** SecretEncryptedMessage encIv */
            encIv?: (Uint8Array|null);

            /** SecretEncryptedMessage secretEncType */
            secretEncType?: (E2E.Message.SecretEncryptedMessage.SecretEncType|null);
        }

        /** Represents a SecretEncryptedMessage. */
        class SecretEncryptedMessage implements ISecretEncryptedMessage {

            /**
             * Constructs a new SecretEncryptedMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ISecretEncryptedMessage);

            /** SecretEncryptedMessage targetMessageKey. */
            public targetMessageKey?: (Protocol.IMessageKey|null);

            /** SecretEncryptedMessage encPayload. */
            public encPayload: Uint8Array;

            /** SecretEncryptedMessage encIv. */
            public encIv: Uint8Array;

            /** SecretEncryptedMessage secretEncType. */
            public secretEncType: E2E.Message.SecretEncryptedMessage.SecretEncType;

            /**
             * Creates a new SecretEncryptedMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns SecretEncryptedMessage instance
             */
            public static create(properties?: E2E.Message.ISecretEncryptedMessage): E2E.Message.SecretEncryptedMessage;

            /**
             * Encodes the specified SecretEncryptedMessage message. Does not implicitly {@link E2E.Message.SecretEncryptedMessage.verify|verify} messages.
             * @param message SecretEncryptedMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ISecretEncryptedMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified SecretEncryptedMessage message, length delimited. Does not implicitly {@link E2E.Message.SecretEncryptedMessage.verify|verify} messages.
             * @param message SecretEncryptedMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ISecretEncryptedMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a SecretEncryptedMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns SecretEncryptedMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.SecretEncryptedMessage;

            /**
             * Decodes a SecretEncryptedMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns SecretEncryptedMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.SecretEncryptedMessage;

            /**
             * Verifies a SecretEncryptedMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a SecretEncryptedMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns SecretEncryptedMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.SecretEncryptedMessage;

            /**
             * Creates a plain object from a SecretEncryptedMessage message. Also converts values to other types if specified.
             * @param message SecretEncryptedMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.SecretEncryptedMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this SecretEncryptedMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for SecretEncryptedMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace SecretEncryptedMessage {

            /** SecretEncType enum. */
            enum SecretEncType {
                UNKNOWN = 0,
                EVENT_EDIT = 1,
                MESSAGE_EDIT = 2
            }
        }

        /** Properties of a SendPaymentMessage. */
        interface ISendPaymentMessage {

            /** SendPaymentMessage noteMessage */
            noteMessage?: (E2E.IMessage|null);

            /** SendPaymentMessage requestMessageKey */
            requestMessageKey?: (Protocol.IMessageKey|null);

            /** SendPaymentMessage background */
            background?: (E2E.IPaymentBackground|null);

            /** SendPaymentMessage transactionData */
            transactionData?: (string|null);
        }

        /** Represents a SendPaymentMessage. */
        class SendPaymentMessage implements ISendPaymentMessage {

            /**
             * Constructs a new SendPaymentMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ISendPaymentMessage);

            /** SendPaymentMessage noteMessage. */
            public noteMessage?: (E2E.IMessage|null);

            /** SendPaymentMessage requestMessageKey. */
            public requestMessageKey?: (Protocol.IMessageKey|null);

            /** SendPaymentMessage background. */
            public background?: (E2E.IPaymentBackground|null);

            /** SendPaymentMessage transactionData. */
            public transactionData: string;

            /**
             * Creates a new SendPaymentMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns SendPaymentMessage instance
             */
            public static create(properties?: E2E.Message.ISendPaymentMessage): E2E.Message.SendPaymentMessage;

            /**
             * Encodes the specified SendPaymentMessage message. Does not implicitly {@link E2E.Message.SendPaymentMessage.verify|verify} messages.
             * @param message SendPaymentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ISendPaymentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified SendPaymentMessage message, length delimited. Does not implicitly {@link E2E.Message.SendPaymentMessage.verify|verify} messages.
             * @param message SendPaymentMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ISendPaymentMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a SendPaymentMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns SendPaymentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.SendPaymentMessage;

            /**
             * Decodes a SendPaymentMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns SendPaymentMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.SendPaymentMessage;

            /**
             * Verifies a SendPaymentMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a SendPaymentMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns SendPaymentMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.SendPaymentMessage;

            /**
             * Creates a plain object from a SendPaymentMessage message. Also converts values to other types if specified.
             * @param message SendPaymentMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.SendPaymentMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this SendPaymentMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for SendPaymentMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a SenderKeyDistributionMessage. */
        interface ISenderKeyDistributionMessage {

            /** SenderKeyDistributionMessage groupId */
            groupId?: (string|null);

            /** SenderKeyDistributionMessage axolotlSenderKeyDistributionMessage */
            axolotlSenderKeyDistributionMessage?: (Uint8Array|null);
        }

        /** Represents a SenderKeyDistributionMessage. */
        class SenderKeyDistributionMessage implements ISenderKeyDistributionMessage {

            /**
             * Constructs a new SenderKeyDistributionMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ISenderKeyDistributionMessage);

            /** SenderKeyDistributionMessage groupId. */
            public groupId: string;

            /** SenderKeyDistributionMessage axolotlSenderKeyDistributionMessage. */
            public axolotlSenderKeyDistributionMessage: Uint8Array;

            /**
             * Creates a new SenderKeyDistributionMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns SenderKeyDistributionMessage instance
             */
            public static create(properties?: E2E.Message.ISenderKeyDistributionMessage): E2E.Message.SenderKeyDistributionMessage;

            /**
             * Encodes the specified SenderKeyDistributionMessage message. Does not implicitly {@link E2E.Message.SenderKeyDistributionMessage.verify|verify} messages.
             * @param message SenderKeyDistributionMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ISenderKeyDistributionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified SenderKeyDistributionMessage message, length delimited. Does not implicitly {@link E2E.Message.SenderKeyDistributionMessage.verify|verify} messages.
             * @param message SenderKeyDistributionMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ISenderKeyDistributionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a SenderKeyDistributionMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns SenderKeyDistributionMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.SenderKeyDistributionMessage;

            /**
             * Decodes a SenderKeyDistributionMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns SenderKeyDistributionMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.SenderKeyDistributionMessage;

            /**
             * Verifies a SenderKeyDistributionMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a SenderKeyDistributionMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns SenderKeyDistributionMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.SenderKeyDistributionMessage;

            /**
             * Creates a plain object from a SenderKeyDistributionMessage message. Also converts values to other types if specified.
             * @param message SenderKeyDistributionMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.SenderKeyDistributionMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this SenderKeyDistributionMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for SenderKeyDistributionMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a StatusNotificationMessage. */
        interface IStatusNotificationMessage {

            /** StatusNotificationMessage responseMessageKey */
            responseMessageKey?: (Protocol.IMessageKey|null);

            /** StatusNotificationMessage originalMessageKey */
            originalMessageKey?: (Protocol.IMessageKey|null);

            /** StatusNotificationMessage type */
            type?: (E2E.Message.StatusNotificationMessage.StatusNotificationType|null);
        }

        /** Represents a StatusNotificationMessage. */
        class StatusNotificationMessage implements IStatusNotificationMessage {

            /**
             * Constructs a new StatusNotificationMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IStatusNotificationMessage);

            /** StatusNotificationMessage responseMessageKey. */
            public responseMessageKey?: (Protocol.IMessageKey|null);

            /** StatusNotificationMessage originalMessageKey. */
            public originalMessageKey?: (Protocol.IMessageKey|null);

            /** StatusNotificationMessage type. */
            public type: E2E.Message.StatusNotificationMessage.StatusNotificationType;

            /**
             * Creates a new StatusNotificationMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StatusNotificationMessage instance
             */
            public static create(properties?: E2E.Message.IStatusNotificationMessage): E2E.Message.StatusNotificationMessage;

            /**
             * Encodes the specified StatusNotificationMessage message. Does not implicitly {@link E2E.Message.StatusNotificationMessage.verify|verify} messages.
             * @param message StatusNotificationMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IStatusNotificationMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StatusNotificationMessage message, length delimited. Does not implicitly {@link E2E.Message.StatusNotificationMessage.verify|verify} messages.
             * @param message StatusNotificationMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IStatusNotificationMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StatusNotificationMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StatusNotificationMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.StatusNotificationMessage;

            /**
             * Decodes a StatusNotificationMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StatusNotificationMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.StatusNotificationMessage;

            /**
             * Verifies a StatusNotificationMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StatusNotificationMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StatusNotificationMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.StatusNotificationMessage;

            /**
             * Creates a plain object from a StatusNotificationMessage message. Also converts values to other types if specified.
             * @param message StatusNotificationMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.StatusNotificationMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StatusNotificationMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StatusNotificationMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace StatusNotificationMessage {

            /** StatusNotificationType enum. */
            enum StatusNotificationType {
                UNKNOWN = 0,
                STATUS_ADD_YOURS = 1,
                STATUS_RESHARE = 2,
                STATUS_QUESTION_ANSWER_RESHARE = 3
            }
        }

        /** Properties of a StatusQuestionAnswerMessage. */
        interface IStatusQuestionAnswerMessage {

            /** StatusQuestionAnswerMessage key */
            key?: (Protocol.IMessageKey|null);

            /** StatusQuestionAnswerMessage text */
            text?: (string|null);
        }

        /** Represents a StatusQuestionAnswerMessage. */
        class StatusQuestionAnswerMessage implements IStatusQuestionAnswerMessage {

            /**
             * Constructs a new StatusQuestionAnswerMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IStatusQuestionAnswerMessage);

            /** StatusQuestionAnswerMessage key. */
            public key?: (Protocol.IMessageKey|null);

            /** StatusQuestionAnswerMessage text. */
            public text: string;

            /**
             * Creates a new StatusQuestionAnswerMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StatusQuestionAnswerMessage instance
             */
            public static create(properties?: E2E.Message.IStatusQuestionAnswerMessage): E2E.Message.StatusQuestionAnswerMessage;

            /**
             * Encodes the specified StatusQuestionAnswerMessage message. Does not implicitly {@link E2E.Message.StatusQuestionAnswerMessage.verify|verify} messages.
             * @param message StatusQuestionAnswerMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IStatusQuestionAnswerMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StatusQuestionAnswerMessage message, length delimited. Does not implicitly {@link E2E.Message.StatusQuestionAnswerMessage.verify|verify} messages.
             * @param message StatusQuestionAnswerMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IStatusQuestionAnswerMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StatusQuestionAnswerMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StatusQuestionAnswerMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.StatusQuestionAnswerMessage;

            /**
             * Decodes a StatusQuestionAnswerMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StatusQuestionAnswerMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.StatusQuestionAnswerMessage;

            /**
             * Verifies a StatusQuestionAnswerMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StatusQuestionAnswerMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StatusQuestionAnswerMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.StatusQuestionAnswerMessage;

            /**
             * Creates a plain object from a StatusQuestionAnswerMessage message. Also converts values to other types if specified.
             * @param message StatusQuestionAnswerMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.StatusQuestionAnswerMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StatusQuestionAnswerMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StatusQuestionAnswerMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a StatusQuotedMessage. */
        interface IStatusQuotedMessage {

            /** StatusQuotedMessage type */
            type?: (E2E.Message.StatusQuotedMessage.StatusQuotedMessageType|null);

            /** StatusQuotedMessage text */
            text?: (string|null);

            /** StatusQuotedMessage thumbnail */
            thumbnail?: (Uint8Array|null);

            /** StatusQuotedMessage originalStatusId */
            originalStatusId?: (Protocol.IMessageKey|null);
        }

        /** Represents a StatusQuotedMessage. */
        class StatusQuotedMessage implements IStatusQuotedMessage {

            /**
             * Constructs a new StatusQuotedMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IStatusQuotedMessage);

            /** StatusQuotedMessage type. */
            public type: E2E.Message.StatusQuotedMessage.StatusQuotedMessageType;

            /** StatusQuotedMessage text. */
            public text: string;

            /** StatusQuotedMessage thumbnail. */
            public thumbnail: Uint8Array;

            /** StatusQuotedMessage originalStatusId. */
            public originalStatusId?: (Protocol.IMessageKey|null);

            /**
             * Creates a new StatusQuotedMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StatusQuotedMessage instance
             */
            public static create(properties?: E2E.Message.IStatusQuotedMessage): E2E.Message.StatusQuotedMessage;

            /**
             * Encodes the specified StatusQuotedMessage message. Does not implicitly {@link E2E.Message.StatusQuotedMessage.verify|verify} messages.
             * @param message StatusQuotedMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IStatusQuotedMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StatusQuotedMessage message, length delimited. Does not implicitly {@link E2E.Message.StatusQuotedMessage.verify|verify} messages.
             * @param message StatusQuotedMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IStatusQuotedMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StatusQuotedMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StatusQuotedMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.StatusQuotedMessage;

            /**
             * Decodes a StatusQuotedMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StatusQuotedMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.StatusQuotedMessage;

            /**
             * Verifies a StatusQuotedMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StatusQuotedMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StatusQuotedMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.StatusQuotedMessage;

            /**
             * Creates a plain object from a StatusQuotedMessage message. Also converts values to other types if specified.
             * @param message StatusQuotedMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.StatusQuotedMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StatusQuotedMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StatusQuotedMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace StatusQuotedMessage {

            /** StatusQuotedMessageType enum. */
            enum StatusQuotedMessageType {
                QUESTION_ANSWER = 1
            }
        }

        /** Properties of a StickerMessage. */
        interface IStickerMessage {

            /** StickerMessage url */
            url?: (string|null);

            /** StickerMessage fileSha256 */
            fileSha256?: (Uint8Array|null);

            /** StickerMessage fileEncSha256 */
            fileEncSha256?: (Uint8Array|null);

            /** StickerMessage mediaKey */
            mediaKey?: (Uint8Array|null);

            /** StickerMessage mimetype */
            mimetype?: (string|null);

            /** StickerMessage height */
            height?: (number|null);

            /** StickerMessage width */
            width?: (number|null);

            /** StickerMessage directPath */
            directPath?: (string|null);

            /** StickerMessage fileLength */
            fileLength?: (number|Long|null);

            /** StickerMessage mediaKeyTimestamp */
            mediaKeyTimestamp?: (number|Long|null);

            /** StickerMessage firstFrameLength */
            firstFrameLength?: (number|null);

            /** StickerMessage firstFrameSidecar */
            firstFrameSidecar?: (Uint8Array|null);

            /** StickerMessage isAnimated */
            isAnimated?: (boolean|null);

            /** StickerMessage pngThumbnail */
            pngThumbnail?: (Uint8Array|null);

            /** StickerMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** StickerMessage stickerSentTs */
            stickerSentTs?: (number|Long|null);

            /** StickerMessage isAvatar */
            isAvatar?: (boolean|null);

            /** StickerMessage isAiSticker */
            isAiSticker?: (boolean|null);

            /** StickerMessage isLottie */
            isLottie?: (boolean|null);

            /** StickerMessage accessibilityLabel */
            accessibilityLabel?: (string|null);

            /** StickerMessage mediaKeyDomain */
            mediaKeyDomain?: (E2E.Message.MediaKeyDomain|null);
        }

        /** Represents a StickerMessage. */
        class StickerMessage implements IStickerMessage {

            /**
             * Constructs a new StickerMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IStickerMessage);

            /** StickerMessage url. */
            public url: string;

            /** StickerMessage fileSha256. */
            public fileSha256: Uint8Array;

            /** StickerMessage fileEncSha256. */
            public fileEncSha256: Uint8Array;

            /** StickerMessage mediaKey. */
            public mediaKey: Uint8Array;

            /** StickerMessage mimetype. */
            public mimetype: string;

            /** StickerMessage height. */
            public height: number;

            /** StickerMessage width. */
            public width: number;

            /** StickerMessage directPath. */
            public directPath: string;

            /** StickerMessage fileLength. */
            public fileLength: (number|Long);

            /** StickerMessage mediaKeyTimestamp. */
            public mediaKeyTimestamp: (number|Long);

            /** StickerMessage firstFrameLength. */
            public firstFrameLength: number;

            /** StickerMessage firstFrameSidecar. */
            public firstFrameSidecar: Uint8Array;

            /** StickerMessage isAnimated. */
            public isAnimated: boolean;

            /** StickerMessage pngThumbnail. */
            public pngThumbnail: Uint8Array;

            /** StickerMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** StickerMessage stickerSentTs. */
            public stickerSentTs: (number|Long);

            /** StickerMessage isAvatar. */
            public isAvatar: boolean;

            /** StickerMessage isAiSticker. */
            public isAiSticker: boolean;

            /** StickerMessage isLottie. */
            public isLottie: boolean;

            /** StickerMessage accessibilityLabel. */
            public accessibilityLabel: string;

            /** StickerMessage mediaKeyDomain. */
            public mediaKeyDomain: E2E.Message.MediaKeyDomain;

            /**
             * Creates a new StickerMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StickerMessage instance
             */
            public static create(properties?: E2E.Message.IStickerMessage): E2E.Message.StickerMessage;

            /**
             * Encodes the specified StickerMessage message. Does not implicitly {@link E2E.Message.StickerMessage.verify|verify} messages.
             * @param message StickerMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IStickerMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StickerMessage message, length delimited. Does not implicitly {@link E2E.Message.StickerMessage.verify|verify} messages.
             * @param message StickerMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IStickerMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StickerMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StickerMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.StickerMessage;

            /**
             * Decodes a StickerMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StickerMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.StickerMessage;

            /**
             * Verifies a StickerMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StickerMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StickerMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.StickerMessage;

            /**
             * Creates a plain object from a StickerMessage message. Also converts values to other types if specified.
             * @param message StickerMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.StickerMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StickerMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StickerMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a StickerPackMessage. */
        interface IStickerPackMessage {

            /** StickerPackMessage stickerPackId */
            stickerPackId?: (string|null);

            /** StickerPackMessage name */
            name?: (string|null);

            /** StickerPackMessage publisher */
            publisher?: (string|null);

            /** StickerPackMessage stickers */
            stickers?: (E2E.Message.StickerPackMessage.ISticker[]|null);

            /** StickerPackMessage fileLength */
            fileLength?: (number|Long|null);

            /** StickerPackMessage fileSha256 */
            fileSha256?: (Uint8Array|null);

            /** StickerPackMessage fileEncSha256 */
            fileEncSha256?: (Uint8Array|null);

            /** StickerPackMessage mediaKey */
            mediaKey?: (Uint8Array|null);

            /** StickerPackMessage directPath */
            directPath?: (string|null);

            /** StickerPackMessage caption */
            caption?: (string|null);

            /** StickerPackMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** StickerPackMessage packDescription */
            packDescription?: (string|null);

            /** StickerPackMessage mediaKeyTimestamp */
            mediaKeyTimestamp?: (number|Long|null);

            /** StickerPackMessage trayIconFileName */
            trayIconFileName?: (string|null);

            /** StickerPackMessage thumbnailDirectPath */
            thumbnailDirectPath?: (string|null);

            /** StickerPackMessage thumbnailSha256 */
            thumbnailSha256?: (Uint8Array|null);

            /** StickerPackMessage thumbnailEncSha256 */
            thumbnailEncSha256?: (Uint8Array|null);

            /** StickerPackMessage thumbnailHeight */
            thumbnailHeight?: (number|null);

            /** StickerPackMessage thumbnailWidth */
            thumbnailWidth?: (number|null);

            /** StickerPackMessage imageDataHash */
            imageDataHash?: (string|null);

            /** StickerPackMessage stickerPackSize */
            stickerPackSize?: (number|Long|null);

            /** StickerPackMessage stickerPackOrigin */
            stickerPackOrigin?: (E2E.Message.StickerPackMessage.StickerPackOrigin|null);
        }

        /** Represents a StickerPackMessage. */
        class StickerPackMessage implements IStickerPackMessage {

            /**
             * Constructs a new StickerPackMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IStickerPackMessage);

            /** StickerPackMessage stickerPackId. */
            public stickerPackId: string;

            /** StickerPackMessage name. */
            public name: string;

            /** StickerPackMessage publisher. */
            public publisher: string;

            /** StickerPackMessage stickers. */
            public stickers: E2E.Message.StickerPackMessage.ISticker[];

            /** StickerPackMessage fileLength. */
            public fileLength: (number|Long);

            /** StickerPackMessage fileSha256. */
            public fileSha256: Uint8Array;

            /** StickerPackMessage fileEncSha256. */
            public fileEncSha256: Uint8Array;

            /** StickerPackMessage mediaKey. */
            public mediaKey: Uint8Array;

            /** StickerPackMessage directPath. */
            public directPath: string;

            /** StickerPackMessage caption. */
            public caption: string;

            /** StickerPackMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** StickerPackMessage packDescription. */
            public packDescription: string;

            /** StickerPackMessage mediaKeyTimestamp. */
            public mediaKeyTimestamp: (number|Long);

            /** StickerPackMessage trayIconFileName. */
            public trayIconFileName: string;

            /** StickerPackMessage thumbnailDirectPath. */
            public thumbnailDirectPath: string;

            /** StickerPackMessage thumbnailSha256. */
            public thumbnailSha256: Uint8Array;

            /** StickerPackMessage thumbnailEncSha256. */
            public thumbnailEncSha256: Uint8Array;

            /** StickerPackMessage thumbnailHeight. */
            public thumbnailHeight: number;

            /** StickerPackMessage thumbnailWidth. */
            public thumbnailWidth: number;

            /** StickerPackMessage imageDataHash. */
            public imageDataHash: string;

            /** StickerPackMessage stickerPackSize. */
            public stickerPackSize: (number|Long);

            /** StickerPackMessage stickerPackOrigin. */
            public stickerPackOrigin: E2E.Message.StickerPackMessage.StickerPackOrigin;

            /**
             * Creates a new StickerPackMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StickerPackMessage instance
             */
            public static create(properties?: E2E.Message.IStickerPackMessage): E2E.Message.StickerPackMessage;

            /**
             * Encodes the specified StickerPackMessage message. Does not implicitly {@link E2E.Message.StickerPackMessage.verify|verify} messages.
             * @param message StickerPackMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IStickerPackMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StickerPackMessage message, length delimited. Does not implicitly {@link E2E.Message.StickerPackMessage.verify|verify} messages.
             * @param message StickerPackMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IStickerPackMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StickerPackMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StickerPackMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.StickerPackMessage;

            /**
             * Decodes a StickerPackMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StickerPackMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.StickerPackMessage;

            /**
             * Verifies a StickerPackMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StickerPackMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StickerPackMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.StickerPackMessage;

            /**
             * Creates a plain object from a StickerPackMessage message. Also converts values to other types if specified.
             * @param message StickerPackMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.StickerPackMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StickerPackMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StickerPackMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace StickerPackMessage {

            /** Properties of a Sticker. */
            interface ISticker {

                /** Sticker fileName */
                fileName?: (string|null);

                /** Sticker isAnimated */
                isAnimated?: (boolean|null);

                /** Sticker emojis */
                emojis?: (string[]|null);

                /** Sticker accessibilityLabel */
                accessibilityLabel?: (string|null);

                /** Sticker isLottie */
                isLottie?: (boolean|null);

                /** Sticker mimetype */
                mimetype?: (string|null);
            }

            /** Represents a Sticker. */
            class Sticker implements ISticker {

                /**
                 * Constructs a new Sticker.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.StickerPackMessage.ISticker);

                /** Sticker fileName. */
                public fileName: string;

                /** Sticker isAnimated. */
                public isAnimated: boolean;

                /** Sticker emojis. */
                public emojis: string[];

                /** Sticker accessibilityLabel. */
                public accessibilityLabel: string;

                /** Sticker isLottie. */
                public isLottie: boolean;

                /** Sticker mimetype. */
                public mimetype: string;

                /**
                 * Creates a new Sticker instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Sticker instance
                 */
                public static create(properties?: E2E.Message.StickerPackMessage.ISticker): E2E.Message.StickerPackMessage.Sticker;

                /**
                 * Encodes the specified Sticker message. Does not implicitly {@link E2E.Message.StickerPackMessage.Sticker.verify|verify} messages.
                 * @param message Sticker message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.StickerPackMessage.ISticker, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Sticker message, length delimited. Does not implicitly {@link E2E.Message.StickerPackMessage.Sticker.verify|verify} messages.
                 * @param message Sticker message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.StickerPackMessage.ISticker, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Sticker message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Sticker
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.StickerPackMessage.Sticker;

                /**
                 * Decodes a Sticker message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Sticker
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.StickerPackMessage.Sticker;

                /**
                 * Verifies a Sticker message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Sticker message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Sticker
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.StickerPackMessage.Sticker;

                /**
                 * Creates a plain object from a Sticker message. Also converts values to other types if specified.
                 * @param message Sticker
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.StickerPackMessage.Sticker, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Sticker to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Sticker
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** StickerPackOrigin enum. */
            enum StickerPackOrigin {
                FIRST_PARTY = 0,
                THIRD_PARTY = 1,
                USER_CREATED = 2
            }
        }

        /** Properties of a StickerSyncRMRMessage. */
        interface IStickerSyncRMRMessage {

            /** StickerSyncRMRMessage filehash */
            filehash?: (string[]|null);

            /** StickerSyncRMRMessage rmrSource */
            rmrSource?: (string|null);

            /** StickerSyncRMRMessage requestTimestamp */
            requestTimestamp?: (number|Long|null);
        }

        /** Represents a StickerSyncRMRMessage. */
        class StickerSyncRMRMessage implements IStickerSyncRMRMessage {

            /**
             * Constructs a new StickerSyncRMRMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IStickerSyncRMRMessage);

            /** StickerSyncRMRMessage filehash. */
            public filehash: string[];

            /** StickerSyncRMRMessage rmrSource. */
            public rmrSource: string;

            /** StickerSyncRMRMessage requestTimestamp. */
            public requestTimestamp: (number|Long);

            /**
             * Creates a new StickerSyncRMRMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StickerSyncRMRMessage instance
             */
            public static create(properties?: E2E.Message.IStickerSyncRMRMessage): E2E.Message.StickerSyncRMRMessage;

            /**
             * Encodes the specified StickerSyncRMRMessage message. Does not implicitly {@link E2E.Message.StickerSyncRMRMessage.verify|verify} messages.
             * @param message StickerSyncRMRMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IStickerSyncRMRMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StickerSyncRMRMessage message, length delimited. Does not implicitly {@link E2E.Message.StickerSyncRMRMessage.verify|verify} messages.
             * @param message StickerSyncRMRMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IStickerSyncRMRMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StickerSyncRMRMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StickerSyncRMRMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.StickerSyncRMRMessage;

            /**
             * Decodes a StickerSyncRMRMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StickerSyncRMRMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.StickerSyncRMRMessage;

            /**
             * Verifies a StickerSyncRMRMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StickerSyncRMRMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StickerSyncRMRMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.StickerSyncRMRMessage;

            /**
             * Creates a plain object from a StickerSyncRMRMessage message. Also converts values to other types if specified.
             * @param message StickerSyncRMRMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.StickerSyncRMRMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StickerSyncRMRMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StickerSyncRMRMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a TemplateButtonReplyMessage. */
        interface ITemplateButtonReplyMessage {

            /** TemplateButtonReplyMessage selectedId */
            selectedId?: (string|null);

            /** TemplateButtonReplyMessage selectedDisplayText */
            selectedDisplayText?: (string|null);

            /** TemplateButtonReplyMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** TemplateButtonReplyMessage selectedIndex */
            selectedIndex?: (number|null);

            /** TemplateButtonReplyMessage selectedCarouselCardIndex */
            selectedCarouselCardIndex?: (number|null);
        }

        /** Represents a TemplateButtonReplyMessage. */
        class TemplateButtonReplyMessage implements ITemplateButtonReplyMessage {

            /**
             * Constructs a new TemplateButtonReplyMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ITemplateButtonReplyMessage);

            /** TemplateButtonReplyMessage selectedId. */
            public selectedId: string;

            /** TemplateButtonReplyMessage selectedDisplayText. */
            public selectedDisplayText: string;

            /** TemplateButtonReplyMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** TemplateButtonReplyMessage selectedIndex. */
            public selectedIndex: number;

            /** TemplateButtonReplyMessage selectedCarouselCardIndex. */
            public selectedCarouselCardIndex: number;

            /**
             * Creates a new TemplateButtonReplyMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns TemplateButtonReplyMessage instance
             */
            public static create(properties?: E2E.Message.ITemplateButtonReplyMessage): E2E.Message.TemplateButtonReplyMessage;

            /**
             * Encodes the specified TemplateButtonReplyMessage message. Does not implicitly {@link E2E.Message.TemplateButtonReplyMessage.verify|verify} messages.
             * @param message TemplateButtonReplyMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ITemplateButtonReplyMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified TemplateButtonReplyMessage message, length delimited. Does not implicitly {@link E2E.Message.TemplateButtonReplyMessage.verify|verify} messages.
             * @param message TemplateButtonReplyMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ITemplateButtonReplyMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a TemplateButtonReplyMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns TemplateButtonReplyMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.TemplateButtonReplyMessage;

            /**
             * Decodes a TemplateButtonReplyMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns TemplateButtonReplyMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.TemplateButtonReplyMessage;

            /**
             * Verifies a TemplateButtonReplyMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a TemplateButtonReplyMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns TemplateButtonReplyMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.TemplateButtonReplyMessage;

            /**
             * Creates a plain object from a TemplateButtonReplyMessage message. Also converts values to other types if specified.
             * @param message TemplateButtonReplyMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.TemplateButtonReplyMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this TemplateButtonReplyMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for TemplateButtonReplyMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a TemplateMessage. */
        interface ITemplateMessage {

            /** TemplateMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** TemplateMessage hydratedTemplate */
            hydratedTemplate?: (E2E.Message.TemplateMessage.IHydratedFourRowTemplate|null);

            /** TemplateMessage templateId */
            templateId?: (string|null);

            /** TemplateMessage fourRowTemplate */
            fourRowTemplate?: (E2E.Message.TemplateMessage.IFourRowTemplate|null);

            /** TemplateMessage hydratedFourRowTemplate */
            hydratedFourRowTemplate?: (E2E.Message.TemplateMessage.IHydratedFourRowTemplate|null);

            /** TemplateMessage interactiveMessageTemplate */
            interactiveMessageTemplate?: (E2E.Message.IInteractiveMessage|null);
        }

        /** Represents a TemplateMessage. */
        class TemplateMessage implements ITemplateMessage {

            /**
             * Constructs a new TemplateMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.ITemplateMessage);

            /** TemplateMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** TemplateMessage hydratedTemplate. */
            public hydratedTemplate?: (E2E.Message.TemplateMessage.IHydratedFourRowTemplate|null);

            /** TemplateMessage templateId. */
            public templateId: string;

            /** TemplateMessage fourRowTemplate. */
            public fourRowTemplate?: (E2E.Message.TemplateMessage.IFourRowTemplate|null);

            /** TemplateMessage hydratedFourRowTemplate. */
            public hydratedFourRowTemplate?: (E2E.Message.TemplateMessage.IHydratedFourRowTemplate|null);

            /** TemplateMessage interactiveMessageTemplate. */
            public interactiveMessageTemplate?: (E2E.Message.IInteractiveMessage|null);

            /** TemplateMessage format. */
            public format?: ("fourRowTemplate"|"hydratedFourRowTemplate"|"interactiveMessageTemplate");

            /**
             * Creates a new TemplateMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns TemplateMessage instance
             */
            public static create(properties?: E2E.Message.ITemplateMessage): E2E.Message.TemplateMessage;

            /**
             * Encodes the specified TemplateMessage message. Does not implicitly {@link E2E.Message.TemplateMessage.verify|verify} messages.
             * @param message TemplateMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.ITemplateMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified TemplateMessage message, length delimited. Does not implicitly {@link E2E.Message.TemplateMessage.verify|verify} messages.
             * @param message TemplateMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.ITemplateMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a TemplateMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns TemplateMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.TemplateMessage;

            /**
             * Decodes a TemplateMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns TemplateMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.TemplateMessage;

            /**
             * Verifies a TemplateMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a TemplateMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns TemplateMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.TemplateMessage;

            /**
             * Creates a plain object from a TemplateMessage message. Also converts values to other types if specified.
             * @param message TemplateMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.TemplateMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this TemplateMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for TemplateMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace TemplateMessage {

            /** Properties of a FourRowTemplate. */
            interface IFourRowTemplate {

                /** FourRowTemplate content */
                content?: (E2E.Message.IHighlyStructuredMessage|null);

                /** FourRowTemplate footer */
                footer?: (E2E.Message.IHighlyStructuredMessage|null);

                /** FourRowTemplate buttons */
                buttons?: (E2E.ITemplateButton[]|null);

                /** FourRowTemplate documentMessage */
                documentMessage?: (E2E.Message.IDocumentMessage|null);

                /** FourRowTemplate highlyStructuredMessage */
                highlyStructuredMessage?: (E2E.Message.IHighlyStructuredMessage|null);

                /** FourRowTemplate imageMessage */
                imageMessage?: (E2E.Message.IImageMessage|null);

                /** FourRowTemplate videoMessage */
                videoMessage?: (E2E.Message.IVideoMessage|null);

                /** FourRowTemplate locationMessage */
                locationMessage?: (E2E.Message.ILocationMessage|null);
            }

            /** Represents a FourRowTemplate. */
            class FourRowTemplate implements IFourRowTemplate {

                /**
                 * Constructs a new FourRowTemplate.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.TemplateMessage.IFourRowTemplate);

                /** FourRowTemplate content. */
                public content?: (E2E.Message.IHighlyStructuredMessage|null);

                /** FourRowTemplate footer. */
                public footer?: (E2E.Message.IHighlyStructuredMessage|null);

                /** FourRowTemplate buttons. */
                public buttons: E2E.ITemplateButton[];

                /** FourRowTemplate documentMessage. */
                public documentMessage?: (E2E.Message.IDocumentMessage|null);

                /** FourRowTemplate highlyStructuredMessage. */
                public highlyStructuredMessage?: (E2E.Message.IHighlyStructuredMessage|null);

                /** FourRowTemplate imageMessage. */
                public imageMessage?: (E2E.Message.IImageMessage|null);

                /** FourRowTemplate videoMessage. */
                public videoMessage?: (E2E.Message.IVideoMessage|null);

                /** FourRowTemplate locationMessage. */
                public locationMessage?: (E2E.Message.ILocationMessage|null);

                /** FourRowTemplate title. */
                public title?: ("documentMessage"|"highlyStructuredMessage"|"imageMessage"|"videoMessage"|"locationMessage");

                /**
                 * Creates a new FourRowTemplate instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns FourRowTemplate instance
                 */
                public static create(properties?: E2E.Message.TemplateMessage.IFourRowTemplate): E2E.Message.TemplateMessage.FourRowTemplate;

                /**
                 * Encodes the specified FourRowTemplate message. Does not implicitly {@link E2E.Message.TemplateMessage.FourRowTemplate.verify|verify} messages.
                 * @param message FourRowTemplate message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.TemplateMessage.IFourRowTemplate, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified FourRowTemplate message, length delimited. Does not implicitly {@link E2E.Message.TemplateMessage.FourRowTemplate.verify|verify} messages.
                 * @param message FourRowTemplate message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.TemplateMessage.IFourRowTemplate, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a FourRowTemplate message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns FourRowTemplate
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.TemplateMessage.FourRowTemplate;

                /**
                 * Decodes a FourRowTemplate message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns FourRowTemplate
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.TemplateMessage.FourRowTemplate;

                /**
                 * Verifies a FourRowTemplate message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a FourRowTemplate message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns FourRowTemplate
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.TemplateMessage.FourRowTemplate;

                /**
                 * Creates a plain object from a FourRowTemplate message. Also converts values to other types if specified.
                 * @param message FourRowTemplate
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.TemplateMessage.FourRowTemplate, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this FourRowTemplate to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for FourRowTemplate
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a HydratedFourRowTemplate. */
            interface IHydratedFourRowTemplate {

                /** HydratedFourRowTemplate hydratedContentText */
                hydratedContentText?: (string|null);

                /** HydratedFourRowTemplate hydratedFooterText */
                hydratedFooterText?: (string|null);

                /** HydratedFourRowTemplate hydratedButtons */
                hydratedButtons?: (E2E.IHydratedTemplateButton[]|null);

                /** HydratedFourRowTemplate templateId */
                templateId?: (string|null);

                /** HydratedFourRowTemplate maskLinkedDevices */
                maskLinkedDevices?: (boolean|null);

                /** HydratedFourRowTemplate documentMessage */
                documentMessage?: (E2E.Message.IDocumentMessage|null);

                /** HydratedFourRowTemplate hydratedTitleText */
                hydratedTitleText?: (string|null);

                /** HydratedFourRowTemplate imageMessage */
                imageMessage?: (E2E.Message.IImageMessage|null);

                /** HydratedFourRowTemplate videoMessage */
                videoMessage?: (E2E.Message.IVideoMessage|null);

                /** HydratedFourRowTemplate locationMessage */
                locationMessage?: (E2E.Message.ILocationMessage|null);
            }

            /** Represents a HydratedFourRowTemplate. */
            class HydratedFourRowTemplate implements IHydratedFourRowTemplate {

                /**
                 * Constructs a new HydratedFourRowTemplate.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: E2E.Message.TemplateMessage.IHydratedFourRowTemplate);

                /** HydratedFourRowTemplate hydratedContentText. */
                public hydratedContentText: string;

                /** HydratedFourRowTemplate hydratedFooterText. */
                public hydratedFooterText: string;

                /** HydratedFourRowTemplate hydratedButtons. */
                public hydratedButtons: E2E.IHydratedTemplateButton[];

                /** HydratedFourRowTemplate templateId. */
                public templateId: string;

                /** HydratedFourRowTemplate maskLinkedDevices. */
                public maskLinkedDevices: boolean;

                /** HydratedFourRowTemplate documentMessage. */
                public documentMessage?: (E2E.Message.IDocumentMessage|null);

                /** HydratedFourRowTemplate hydratedTitleText. */
                public hydratedTitleText?: (string|null);

                /** HydratedFourRowTemplate imageMessage. */
                public imageMessage?: (E2E.Message.IImageMessage|null);

                /** HydratedFourRowTemplate videoMessage. */
                public videoMessage?: (E2E.Message.IVideoMessage|null);

                /** HydratedFourRowTemplate locationMessage. */
                public locationMessage?: (E2E.Message.ILocationMessage|null);

                /** HydratedFourRowTemplate title. */
                public title?: ("documentMessage"|"hydratedTitleText"|"imageMessage"|"videoMessage"|"locationMessage");

                /**
                 * Creates a new HydratedFourRowTemplate instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns HydratedFourRowTemplate instance
                 */
                public static create(properties?: E2E.Message.TemplateMessage.IHydratedFourRowTemplate): E2E.Message.TemplateMessage.HydratedFourRowTemplate;

                /**
                 * Encodes the specified HydratedFourRowTemplate message. Does not implicitly {@link E2E.Message.TemplateMessage.HydratedFourRowTemplate.verify|verify} messages.
                 * @param message HydratedFourRowTemplate message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: E2E.Message.TemplateMessage.IHydratedFourRowTemplate, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified HydratedFourRowTemplate message, length delimited. Does not implicitly {@link E2E.Message.TemplateMessage.HydratedFourRowTemplate.verify|verify} messages.
                 * @param message HydratedFourRowTemplate message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: E2E.Message.TemplateMessage.IHydratedFourRowTemplate, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a HydratedFourRowTemplate message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns HydratedFourRowTemplate
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.TemplateMessage.HydratedFourRowTemplate;

                /**
                 * Decodes a HydratedFourRowTemplate message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns HydratedFourRowTemplate
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.TemplateMessage.HydratedFourRowTemplate;

                /**
                 * Verifies a HydratedFourRowTemplate message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a HydratedFourRowTemplate message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns HydratedFourRowTemplate
                 */
                public static fromObject(object: { [k: string]: any }): E2E.Message.TemplateMessage.HydratedFourRowTemplate;

                /**
                 * Creates a plain object from a HydratedFourRowTemplate message. Also converts values to other types if specified.
                 * @param message HydratedFourRowTemplate
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: E2E.Message.TemplateMessage.HydratedFourRowTemplate, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this HydratedFourRowTemplate to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for HydratedFourRowTemplate
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a URLMetadata. */
        interface IURLMetadata {

            /** URLMetadata fbExperimentId */
            fbExperimentId?: (number|null);
        }

        /** Represents a URLMetadata. */
        class URLMetadata implements IURLMetadata {

            /**
             * Constructs a new URLMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IURLMetadata);

            /** URLMetadata fbExperimentId. */
            public fbExperimentId: number;

            /**
             * Creates a new URLMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns URLMetadata instance
             */
            public static create(properties?: E2E.Message.IURLMetadata): E2E.Message.URLMetadata;

            /**
             * Encodes the specified URLMetadata message. Does not implicitly {@link E2E.Message.URLMetadata.verify|verify} messages.
             * @param message URLMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IURLMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified URLMetadata message, length delimited. Does not implicitly {@link E2E.Message.URLMetadata.verify|verify} messages.
             * @param message URLMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IURLMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a URLMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns URLMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.URLMetadata;

            /**
             * Decodes a URLMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns URLMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.URLMetadata;

            /**
             * Verifies a URLMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a URLMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns URLMetadata
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.URLMetadata;

            /**
             * Creates a plain object from a URLMetadata message. Also converts values to other types if specified.
             * @param message URLMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.URLMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this URLMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for URLMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a VideoEndCard. */
        interface IVideoEndCard {

            /** VideoEndCard username */
            username: string;

            /** VideoEndCard caption */
            caption: string;

            /** VideoEndCard thumbnailImageUrl */
            thumbnailImageUrl: string;

            /** VideoEndCard profilePictureUrl */
            profilePictureUrl: string;
        }

        /** Represents a VideoEndCard. */
        class VideoEndCard implements IVideoEndCard {

            /**
             * Constructs a new VideoEndCard.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IVideoEndCard);

            /** VideoEndCard username. */
            public username: string;

            /** VideoEndCard caption. */
            public caption: string;

            /** VideoEndCard thumbnailImageUrl. */
            public thumbnailImageUrl: string;

            /** VideoEndCard profilePictureUrl. */
            public profilePictureUrl: string;

            /**
             * Creates a new VideoEndCard instance using the specified properties.
             * @param [properties] Properties to set
             * @returns VideoEndCard instance
             */
            public static create(properties?: E2E.Message.IVideoEndCard): E2E.Message.VideoEndCard;

            /**
             * Encodes the specified VideoEndCard message. Does not implicitly {@link E2E.Message.VideoEndCard.verify|verify} messages.
             * @param message VideoEndCard message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IVideoEndCard, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified VideoEndCard message, length delimited. Does not implicitly {@link E2E.Message.VideoEndCard.verify|verify} messages.
             * @param message VideoEndCard message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IVideoEndCard, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a VideoEndCard message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns VideoEndCard
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.VideoEndCard;

            /**
             * Decodes a VideoEndCard message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns VideoEndCard
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.VideoEndCard;

            /**
             * Verifies a VideoEndCard message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a VideoEndCard message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns VideoEndCard
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.VideoEndCard;

            /**
             * Creates a plain object from a VideoEndCard message. Also converts values to other types if specified.
             * @param message VideoEndCard
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.VideoEndCard, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this VideoEndCard to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for VideoEndCard
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a VideoMessage. */
        interface IVideoMessage {

            /** VideoMessage url */
            url?: (string|null);

            /** VideoMessage mimetype */
            mimetype?: (string|null);

            /** VideoMessage fileSha256 */
            fileSha256?: (Uint8Array|null);

            /** VideoMessage fileLength */
            fileLength?: (number|Long|null);

            /** VideoMessage seconds */
            seconds?: (number|null);

            /** VideoMessage mediaKey */
            mediaKey?: (Uint8Array|null);

            /** VideoMessage caption */
            caption?: (string|null);

            /** VideoMessage gifPlayback */
            gifPlayback?: (boolean|null);

            /** VideoMessage height */
            height?: (number|null);

            /** VideoMessage width */
            width?: (number|null);

            /** VideoMessage fileEncSha256 */
            fileEncSha256?: (Uint8Array|null);

            /** VideoMessage interactiveAnnotations */
            interactiveAnnotations?: (E2E.IInteractiveAnnotation[]|null);

            /** VideoMessage directPath */
            directPath?: (string|null);

            /** VideoMessage mediaKeyTimestamp */
            mediaKeyTimestamp?: (number|Long|null);

            /** VideoMessage jpegThumbnail */
            jpegThumbnail?: (Uint8Array|null);

            /** VideoMessage contextInfo */
            contextInfo?: (E2E.IContextInfo|null);

            /** VideoMessage streamingSidecar */
            streamingSidecar?: (Uint8Array|null);

            /** VideoMessage gifAttribution */
            gifAttribution?: (E2E.Message.VideoMessage.Attribution|null);

            /** VideoMessage viewOnce */
            viewOnce?: (boolean|null);

            /** VideoMessage thumbnailDirectPath */
            thumbnailDirectPath?: (string|null);

            /** VideoMessage thumbnailSha256 */
            thumbnailSha256?: (Uint8Array|null);

            /** VideoMessage thumbnailEncSha256 */
            thumbnailEncSha256?: (Uint8Array|null);

            /** VideoMessage staticUrl */
            staticUrl?: (string|null);

            /** VideoMessage annotations */
            annotations?: (E2E.IInteractiveAnnotation[]|null);

            /** VideoMessage accessibilityLabel */
            accessibilityLabel?: (string|null);

            /** VideoMessage processedVideos */
            processedVideos?: (E2E.IProcessedVideo[]|null);

            /** VideoMessage externalShareFullVideoDurationInSeconds */
            externalShareFullVideoDurationInSeconds?: (number|null);

            /** VideoMessage motionPhotoPresentationOffsetMs */
            motionPhotoPresentationOffsetMs?: (number|Long|null);

            /** VideoMessage metadataUrl */
            metadataUrl?: (string|null);

            /** VideoMessage videoSourceType */
            videoSourceType?: (E2E.Message.VideoMessage.VideoSourceType|null);

            /** VideoMessage mediaKeyDomain */
            mediaKeyDomain?: (E2E.Message.MediaKeyDomain|null);
        }

        /** Represents a VideoMessage. */
        class VideoMessage implements IVideoMessage {

            /**
             * Constructs a new VideoMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: E2E.Message.IVideoMessage);

            /** VideoMessage url. */
            public url: string;

            /** VideoMessage mimetype. */
            public mimetype: string;

            /** VideoMessage fileSha256. */
            public fileSha256: Uint8Array;

            /** VideoMessage fileLength. */
            public fileLength: (number|Long);

            /** VideoMessage seconds. */
            public seconds: number;

            /** VideoMessage mediaKey. */
            public mediaKey: Uint8Array;

            /** VideoMessage caption. */
            public caption: string;

            /** VideoMessage gifPlayback. */
            public gifPlayback: boolean;

            /** VideoMessage height. */
            public height: number;

            /** VideoMessage width. */
            public width: number;

            /** VideoMessage fileEncSha256. */
            public fileEncSha256: Uint8Array;

            /** VideoMessage interactiveAnnotations. */
            public interactiveAnnotations: E2E.IInteractiveAnnotation[];

            /** VideoMessage directPath. */
            public directPath: string;

            /** VideoMessage mediaKeyTimestamp. */
            public mediaKeyTimestamp: (number|Long);

            /** VideoMessage jpegThumbnail. */
            public jpegThumbnail: Uint8Array;

            /** VideoMessage contextInfo. */
            public contextInfo?: (E2E.IContextInfo|null);

            /** VideoMessage streamingSidecar. */
            public streamingSidecar: Uint8Array;

            /** VideoMessage gifAttribution. */
            public gifAttribution: E2E.Message.VideoMessage.Attribution;

            /** VideoMessage viewOnce. */
            public viewOnce: boolean;

            /** VideoMessage thumbnailDirectPath. */
            public thumbnailDirectPath: string;

            /** VideoMessage thumbnailSha256. */
            public thumbnailSha256: Uint8Array;

            /** VideoMessage thumbnailEncSha256. */
            public thumbnailEncSha256: Uint8Array;

            /** VideoMessage staticUrl. */
            public staticUrl: string;

            /** VideoMessage annotations. */
            public annotations: E2E.IInteractiveAnnotation[];

            /** VideoMessage accessibilityLabel. */
            public accessibilityLabel: string;

            /** VideoMessage processedVideos. */
            public processedVideos: E2E.IProcessedVideo[];

            /** VideoMessage externalShareFullVideoDurationInSeconds. */
            public externalShareFullVideoDurationInSeconds: number;

            /** VideoMessage motionPhotoPresentationOffsetMs. */
            public motionPhotoPresentationOffsetMs: (number|Long);

            /** VideoMessage metadataUrl. */
            public metadataUrl: string;

            /** VideoMessage videoSourceType. */
            public videoSourceType: E2E.Message.VideoMessage.VideoSourceType;

            /** VideoMessage mediaKeyDomain. */
            public mediaKeyDomain: E2E.Message.MediaKeyDomain;

            /**
             * Creates a new VideoMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns VideoMessage instance
             */
            public static create(properties?: E2E.Message.IVideoMessage): E2E.Message.VideoMessage;

            /**
             * Encodes the specified VideoMessage message. Does not implicitly {@link E2E.Message.VideoMessage.verify|verify} messages.
             * @param message VideoMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: E2E.Message.IVideoMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified VideoMessage message, length delimited. Does not implicitly {@link E2E.Message.VideoMessage.verify|verify} messages.
             * @param message VideoMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: E2E.Message.IVideoMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a VideoMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns VideoMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): E2E.Message.VideoMessage;

            /**
             * Decodes a VideoMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns VideoMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): E2E.Message.VideoMessage;

            /**
             * Verifies a VideoMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a VideoMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns VideoMessage
             */
            public static fromObject(object: { [k: string]: any }): E2E.Message.VideoMessage;

            /**
             * Creates a plain object from a VideoMessage message. Also converts values to other types if specified.
             * @param message VideoMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: E2E.Message.VideoMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this VideoMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for VideoMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace VideoMessage {

            /** Attribution enum. */
            enum Attribution {
                NONE = 0,
                GIPHY = 1,
                TENOR = 2,
                KLIPY = 3
            }

            /** VideoSourceType enum. */
            enum VideoSourceType {
                USER_VIDEO = 0,
                AI_GENERATED = 1
            }
        }
    }

    /** KeepType enum. */
    enum KeepType {
        UNKNOWN = 0,
        KEEP_FOR_ALL = 1,
        UNDO_KEEP_FOR_ALL = 2
    }
}

/** Namespace Protocol. */
export namespace Protocol {

    /** Properties of a LimitSharing. */
    interface ILimitSharing {

        /** LimitSharing sharingLimited */
        sharingLimited?: (boolean|null);

        /** LimitSharing trigger */
        trigger?: (Protocol.LimitSharing.TriggerType|null);

        /** LimitSharing limitSharingSettingTimestamp */
        limitSharingSettingTimestamp?: (number|Long|null);

        /** LimitSharing initiatedByMe */
        initiatedByMe?: (boolean|null);
    }

    /** Represents a LimitSharing. */
    class LimitSharing implements ILimitSharing {

        /**
         * Constructs a new LimitSharing.
         * @param [properties] Properties to set
         */
        constructor(properties?: Protocol.ILimitSharing);

        /** LimitSharing sharingLimited. */
        public sharingLimited: boolean;

        /** LimitSharing trigger. */
        public trigger: Protocol.LimitSharing.TriggerType;

        /** LimitSharing limitSharingSettingTimestamp. */
        public limitSharingSettingTimestamp: (number|Long);

        /** LimitSharing initiatedByMe. */
        public initiatedByMe: boolean;

        /**
         * Creates a new LimitSharing instance using the specified properties.
         * @param [properties] Properties to set
         * @returns LimitSharing instance
         */
        public static create(properties?: Protocol.ILimitSharing): Protocol.LimitSharing;

        /**
         * Encodes the specified LimitSharing message. Does not implicitly {@link Protocol.LimitSharing.verify|verify} messages.
         * @param message LimitSharing message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Protocol.ILimitSharing, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified LimitSharing message, length delimited. Does not implicitly {@link Protocol.LimitSharing.verify|verify} messages.
         * @param message LimitSharing message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Protocol.ILimitSharing, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a LimitSharing message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns LimitSharing
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Protocol.LimitSharing;

        /**
         * Decodes a LimitSharing message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns LimitSharing
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Protocol.LimitSharing;

        /**
         * Verifies a LimitSharing message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a LimitSharing message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns LimitSharing
         */
        public static fromObject(object: { [k: string]: any }): Protocol.LimitSharing;

        /**
         * Creates a plain object from a LimitSharing message. Also converts values to other types if specified.
         * @param message LimitSharing
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Protocol.LimitSharing, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this LimitSharing to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for LimitSharing
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace LimitSharing {

        /** TriggerType enum. */
        enum TriggerType {
            UNKNOWN = 0,
            CHAT_SETTING = 1,
            BIZ_SUPPORTS_FB_HOSTING = 2,
            UNKNOWN_GROUP = 3
        }
    }

    /** Properties of a MessageKey. */
    interface IMessageKey {

        /** MessageKey remoteJid */
        remoteJid?: (string|null);

        /** MessageKey fromMe */
        fromMe?: (boolean|null);

        /** MessageKey id */
        id?: (string|null);

        /** MessageKey participant */
        participant?: (string|null);
    }

    /** Represents a MessageKey. */
    class MessageKey implements IMessageKey {

        /**
         * Constructs a new MessageKey.
         * @param [properties] Properties to set
         */
        constructor(properties?: Protocol.IMessageKey);

        /** MessageKey remoteJid. */
        public remoteJid: string;

        /** MessageKey fromMe. */
        public fromMe: boolean;

        /** MessageKey id. */
        public id: string;

        /** MessageKey participant. */
        public participant: string;

        /**
         * Creates a new MessageKey instance using the specified properties.
         * @param [properties] Properties to set
         * @returns MessageKey instance
         */
        public static create(properties?: Protocol.IMessageKey): Protocol.MessageKey;

        /**
         * Encodes the specified MessageKey message. Does not implicitly {@link Protocol.MessageKey.verify|verify} messages.
         * @param message MessageKey message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Protocol.IMessageKey, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified MessageKey message, length delimited. Does not implicitly {@link Protocol.MessageKey.verify|verify} messages.
         * @param message MessageKey message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Protocol.IMessageKey, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a MessageKey message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns MessageKey
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Protocol.MessageKey;

        /**
         * Decodes a MessageKey message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns MessageKey
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Protocol.MessageKey;

        /**
         * Verifies a MessageKey message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a MessageKey message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns MessageKey
         */
        public static fromObject(object: { [k: string]: any }): Protocol.MessageKey;

        /**
         * Creates a plain object from a MessageKey message. Also converts values to other types if specified.
         * @param message MessageKey
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Protocol.MessageKey, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this MessageKey to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for MessageKey
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }
}

/** Namespace AICommon. */
export namespace AICommon {

    /** Properties of a AIRichResponseSubMessage. */
    interface IAIRichResponseSubMessage {

        /** AIRichResponseSubMessage messageType */
        messageType?: (AICommon.AIRichResponseSubMessageType|null);

        /** AIRichResponseSubMessage gridImageMetadata */
        gridImageMetadata?: (AICommon.IAIRichResponseGridImageMetadata|null);

        /** AIRichResponseSubMessage messageText */
        messageText?: (string|null);

        /** AIRichResponseSubMessage imageMetadata */
        imageMetadata?: (AICommon.IAIRichResponseInlineImageMetadata|null);

        /** AIRichResponseSubMessage codeMetadata */
        codeMetadata?: (AICommon.IAIRichResponseCodeMetadata|null);

        /** AIRichResponseSubMessage tableMetadata */
        tableMetadata?: (AICommon.IAIRichResponseTableMetadata|null);

        /** AIRichResponseSubMessage dynamicMetadata */
        dynamicMetadata?: (AICommon.IAIRichResponseDynamicMetadata|null);

        /** AIRichResponseSubMessage latexMetadata */
        latexMetadata?: (AICommon.IAIRichResponseLatexMetadata|null);

        /** AIRichResponseSubMessage mapMetadata */
        mapMetadata?: (AICommon.IAIRichResponseMapMetadata|null);

        /** AIRichResponseSubMessage contentItemsMetadata */
        contentItemsMetadata?: (AICommon.IAIRichResponseContentItemsMetadata|null);
    }

    /** Represents a AIRichResponseSubMessage. */
    class AIRichResponseSubMessage implements IAIRichResponseSubMessage {

        /**
         * Constructs a new AIRichResponseSubMessage.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIRichResponseSubMessage);

        /** AIRichResponseSubMessage messageType. */
        public messageType: AICommon.AIRichResponseSubMessageType;

        /** AIRichResponseSubMessage gridImageMetadata. */
        public gridImageMetadata?: (AICommon.IAIRichResponseGridImageMetadata|null);

        /** AIRichResponseSubMessage messageText. */
        public messageText: string;

        /** AIRichResponseSubMessage imageMetadata. */
        public imageMetadata?: (AICommon.IAIRichResponseInlineImageMetadata|null);

        /** AIRichResponseSubMessage codeMetadata. */
        public codeMetadata?: (AICommon.IAIRichResponseCodeMetadata|null);

        /** AIRichResponseSubMessage tableMetadata. */
        public tableMetadata?: (AICommon.IAIRichResponseTableMetadata|null);

        /** AIRichResponseSubMessage dynamicMetadata. */
        public dynamicMetadata?: (AICommon.IAIRichResponseDynamicMetadata|null);

        /** AIRichResponseSubMessage latexMetadata. */
        public latexMetadata?: (AICommon.IAIRichResponseLatexMetadata|null);

        /** AIRichResponseSubMessage mapMetadata. */
        public mapMetadata?: (AICommon.IAIRichResponseMapMetadata|null);

        /** AIRichResponseSubMessage contentItemsMetadata. */
        public contentItemsMetadata?: (AICommon.IAIRichResponseContentItemsMetadata|null);

        /**
         * Creates a new AIRichResponseSubMessage instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseSubMessage instance
         */
        public static create(properties?: AICommon.IAIRichResponseSubMessage): AICommon.AIRichResponseSubMessage;

        /**
         * Encodes the specified AIRichResponseSubMessage message. Does not implicitly {@link AICommon.AIRichResponseSubMessage.verify|verify} messages.
         * @param message AIRichResponseSubMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIRichResponseSubMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseSubMessage message, length delimited. Does not implicitly {@link AICommon.AIRichResponseSubMessage.verify|verify} messages.
         * @param message AIRichResponseSubMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIRichResponseSubMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseSubMessage message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseSubMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseSubMessage;

        /**
         * Decodes a AIRichResponseSubMessage message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseSubMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseSubMessage;

        /**
         * Verifies a AIRichResponseSubMessage message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseSubMessage message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseSubMessage
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseSubMessage;

        /**
         * Creates a plain object from a AIRichResponseSubMessage message. Also converts values to other types if specified.
         * @param message AIRichResponseSubMessage
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIRichResponseSubMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseSubMessage to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseSubMessage
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a AIRichResponseContentItemsMetadata. */
    interface IAIRichResponseContentItemsMetadata {

        /** AIRichResponseContentItemsMetadata itemsMetadata */
        itemsMetadata?: (AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseContentItemMetadata[]|null);

        /** AIRichResponseContentItemsMetadata contentType */
        contentType?: (AICommon.AIRichResponseContentItemsMetadata.ContentType|null);
    }

    /** Represents a AIRichResponseContentItemsMetadata. */
    class AIRichResponseContentItemsMetadata implements IAIRichResponseContentItemsMetadata {

        /**
         * Constructs a new AIRichResponseContentItemsMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIRichResponseContentItemsMetadata);

        /** AIRichResponseContentItemsMetadata itemsMetadata. */
        public itemsMetadata: AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseContentItemMetadata[];

        /** AIRichResponseContentItemsMetadata contentType. */
        public contentType: AICommon.AIRichResponseContentItemsMetadata.ContentType;

        /**
         * Creates a new AIRichResponseContentItemsMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseContentItemsMetadata instance
         */
        public static create(properties?: AICommon.IAIRichResponseContentItemsMetadata): AICommon.AIRichResponseContentItemsMetadata;

        /**
         * Encodes the specified AIRichResponseContentItemsMetadata message. Does not implicitly {@link AICommon.AIRichResponseContentItemsMetadata.verify|verify} messages.
         * @param message AIRichResponseContentItemsMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIRichResponseContentItemsMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseContentItemsMetadata message, length delimited. Does not implicitly {@link AICommon.AIRichResponseContentItemsMetadata.verify|verify} messages.
         * @param message AIRichResponseContentItemsMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIRichResponseContentItemsMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseContentItemsMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseContentItemsMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseContentItemsMetadata;

        /**
         * Decodes a AIRichResponseContentItemsMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseContentItemsMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseContentItemsMetadata;

        /**
         * Verifies a AIRichResponseContentItemsMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseContentItemsMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseContentItemsMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseContentItemsMetadata;

        /**
         * Creates a plain object from a AIRichResponseContentItemsMetadata message. Also converts values to other types if specified.
         * @param message AIRichResponseContentItemsMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIRichResponseContentItemsMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseContentItemsMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseContentItemsMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace AIRichResponseContentItemsMetadata {

        /** Properties of a AIRichResponseContentItemMetadata. */
        interface IAIRichResponseContentItemMetadata {

            /** AIRichResponseContentItemMetadata reelItem */
            reelItem?: (AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseReelItem|null);
        }

        /** Represents a AIRichResponseContentItemMetadata. */
        class AIRichResponseContentItemMetadata implements IAIRichResponseContentItemMetadata {

            /**
             * Constructs a new AIRichResponseContentItemMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseContentItemMetadata);

            /** AIRichResponseContentItemMetadata reelItem. */
            public reelItem?: (AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseReelItem|null);

            /** AIRichResponseContentItemMetadata aIRichResponseContentItem. */
            public aIRichResponseContentItem?: "reelItem";

            /**
             * Creates a new AIRichResponseContentItemMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AIRichResponseContentItemMetadata instance
             */
            public static create(properties?: AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseContentItemMetadata): AICommon.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata;

            /**
             * Encodes the specified AIRichResponseContentItemMetadata message. Does not implicitly {@link AICommon.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata.verify|verify} messages.
             * @param message AIRichResponseContentItemMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseContentItemMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AIRichResponseContentItemMetadata message, length delimited. Does not implicitly {@link AICommon.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata.verify|verify} messages.
             * @param message AIRichResponseContentItemMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseContentItemMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a AIRichResponseContentItemMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AIRichResponseContentItemMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata;

            /**
             * Decodes a AIRichResponseContentItemMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AIRichResponseContentItemMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata;

            /**
             * Verifies a AIRichResponseContentItemMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a AIRichResponseContentItemMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AIRichResponseContentItemMetadata
             */
            public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata;

            /**
             * Creates a plain object from a AIRichResponseContentItemMetadata message. Also converts values to other types if specified.
             * @param message AIRichResponseContentItemMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AIRichResponseContentItemMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AIRichResponseContentItemMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a AIRichResponseReelItem. */
        interface IAIRichResponseReelItem {

            /** AIRichResponseReelItem title */
            title?: (string|null);

            /** AIRichResponseReelItem profileIconUrl */
            profileIconUrl?: (string|null);

            /** AIRichResponseReelItem thumbnailUrl */
            thumbnailUrl?: (string|null);

            /** AIRichResponseReelItem videoUrl */
            videoUrl?: (string|null);
        }

        /** Represents a AIRichResponseReelItem. */
        class AIRichResponseReelItem implements IAIRichResponseReelItem {

            /**
             * Constructs a new AIRichResponseReelItem.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseReelItem);

            /** AIRichResponseReelItem title. */
            public title: string;

            /** AIRichResponseReelItem profileIconUrl. */
            public profileIconUrl: string;

            /** AIRichResponseReelItem thumbnailUrl. */
            public thumbnailUrl: string;

            /** AIRichResponseReelItem videoUrl. */
            public videoUrl: string;

            /**
             * Creates a new AIRichResponseReelItem instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AIRichResponseReelItem instance
             */
            public static create(properties?: AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseReelItem): AICommon.AIRichResponseContentItemsMetadata.AIRichResponseReelItem;

            /**
             * Encodes the specified AIRichResponseReelItem message. Does not implicitly {@link AICommon.AIRichResponseContentItemsMetadata.AIRichResponseReelItem.verify|verify} messages.
             * @param message AIRichResponseReelItem message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseReelItem, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AIRichResponseReelItem message, length delimited. Does not implicitly {@link AICommon.AIRichResponseContentItemsMetadata.AIRichResponseReelItem.verify|verify} messages.
             * @param message AIRichResponseReelItem message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.AIRichResponseContentItemsMetadata.IAIRichResponseReelItem, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a AIRichResponseReelItem message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AIRichResponseReelItem
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseContentItemsMetadata.AIRichResponseReelItem;

            /**
             * Decodes a AIRichResponseReelItem message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AIRichResponseReelItem
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseContentItemsMetadata.AIRichResponseReelItem;

            /**
             * Verifies a AIRichResponseReelItem message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a AIRichResponseReelItem message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AIRichResponseReelItem
             */
            public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseContentItemsMetadata.AIRichResponseReelItem;

            /**
             * Creates a plain object from a AIRichResponseReelItem message. Also converts values to other types if specified.
             * @param message AIRichResponseReelItem
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.AIRichResponseContentItemsMetadata.AIRichResponseReelItem, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AIRichResponseReelItem to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AIRichResponseReelItem
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** ContentType enum. */
        enum ContentType {
            DEFAULT = 0,
            CAROUSEL = 1
        }
    }

    /** Properties of a AIRichResponseMapMetadata. */
    interface IAIRichResponseMapMetadata {

        /** AIRichResponseMapMetadata centerLatitude */
        centerLatitude?: (number|null);

        /** AIRichResponseMapMetadata centerLongitude */
        centerLongitude?: (number|null);

        /** AIRichResponseMapMetadata latitudeDelta */
        latitudeDelta?: (number|null);

        /** AIRichResponseMapMetadata longitudeDelta */
        longitudeDelta?: (number|null);

        /** AIRichResponseMapMetadata annotations */
        annotations?: (AICommon.AIRichResponseMapMetadata.IAIRichResponseMapAnnotation[]|null);

        /** AIRichResponseMapMetadata showInfoList */
        showInfoList?: (boolean|null);
    }

    /** Represents a AIRichResponseMapMetadata. */
    class AIRichResponseMapMetadata implements IAIRichResponseMapMetadata {

        /**
         * Constructs a new AIRichResponseMapMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIRichResponseMapMetadata);

        /** AIRichResponseMapMetadata centerLatitude. */
        public centerLatitude: number;

        /** AIRichResponseMapMetadata centerLongitude. */
        public centerLongitude: number;

        /** AIRichResponseMapMetadata latitudeDelta. */
        public latitudeDelta: number;

        /** AIRichResponseMapMetadata longitudeDelta. */
        public longitudeDelta: number;

        /** AIRichResponseMapMetadata annotations. */
        public annotations: AICommon.AIRichResponseMapMetadata.IAIRichResponseMapAnnotation[];

        /** AIRichResponseMapMetadata showInfoList. */
        public showInfoList: boolean;

        /**
         * Creates a new AIRichResponseMapMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseMapMetadata instance
         */
        public static create(properties?: AICommon.IAIRichResponseMapMetadata): AICommon.AIRichResponseMapMetadata;

        /**
         * Encodes the specified AIRichResponseMapMetadata message. Does not implicitly {@link AICommon.AIRichResponseMapMetadata.verify|verify} messages.
         * @param message AIRichResponseMapMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIRichResponseMapMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseMapMetadata message, length delimited. Does not implicitly {@link AICommon.AIRichResponseMapMetadata.verify|verify} messages.
         * @param message AIRichResponseMapMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIRichResponseMapMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseMapMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseMapMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseMapMetadata;

        /**
         * Decodes a AIRichResponseMapMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseMapMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseMapMetadata;

        /**
         * Verifies a AIRichResponseMapMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseMapMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseMapMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseMapMetadata;

        /**
         * Creates a plain object from a AIRichResponseMapMetadata message. Also converts values to other types if specified.
         * @param message AIRichResponseMapMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIRichResponseMapMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseMapMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseMapMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace AIRichResponseMapMetadata {

        /** Properties of a AIRichResponseMapAnnotation. */
        interface IAIRichResponseMapAnnotation {

            /** AIRichResponseMapAnnotation annotationNumber */
            annotationNumber?: (number|null);

            /** AIRichResponseMapAnnotation latitude */
            latitude?: (number|null);

            /** AIRichResponseMapAnnotation longitude */
            longitude?: (number|null);

            /** AIRichResponseMapAnnotation title */
            title?: (string|null);

            /** AIRichResponseMapAnnotation body */
            body?: (string|null);
        }

        /** Represents a AIRichResponseMapAnnotation. */
        class AIRichResponseMapAnnotation implements IAIRichResponseMapAnnotation {

            /**
             * Constructs a new AIRichResponseMapAnnotation.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.AIRichResponseMapMetadata.IAIRichResponseMapAnnotation);

            /** AIRichResponseMapAnnotation annotationNumber. */
            public annotationNumber: number;

            /** AIRichResponseMapAnnotation latitude. */
            public latitude: number;

            /** AIRichResponseMapAnnotation longitude. */
            public longitude: number;

            /** AIRichResponseMapAnnotation title. */
            public title: string;

            /** AIRichResponseMapAnnotation body. */
            public body: string;

            /**
             * Creates a new AIRichResponseMapAnnotation instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AIRichResponseMapAnnotation instance
             */
            public static create(properties?: AICommon.AIRichResponseMapMetadata.IAIRichResponseMapAnnotation): AICommon.AIRichResponseMapMetadata.AIRichResponseMapAnnotation;

            /**
             * Encodes the specified AIRichResponseMapAnnotation message. Does not implicitly {@link AICommon.AIRichResponseMapMetadata.AIRichResponseMapAnnotation.verify|verify} messages.
             * @param message AIRichResponseMapAnnotation message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.AIRichResponseMapMetadata.IAIRichResponseMapAnnotation, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AIRichResponseMapAnnotation message, length delimited. Does not implicitly {@link AICommon.AIRichResponseMapMetadata.AIRichResponseMapAnnotation.verify|verify} messages.
             * @param message AIRichResponseMapAnnotation message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.AIRichResponseMapMetadata.IAIRichResponseMapAnnotation, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a AIRichResponseMapAnnotation message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AIRichResponseMapAnnotation
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseMapMetadata.AIRichResponseMapAnnotation;

            /**
             * Decodes a AIRichResponseMapAnnotation message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AIRichResponseMapAnnotation
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseMapMetadata.AIRichResponseMapAnnotation;

            /**
             * Verifies a AIRichResponseMapAnnotation message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a AIRichResponseMapAnnotation message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AIRichResponseMapAnnotation
             */
            public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseMapMetadata.AIRichResponseMapAnnotation;

            /**
             * Creates a plain object from a AIRichResponseMapAnnotation message. Also converts values to other types if specified.
             * @param message AIRichResponseMapAnnotation
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.AIRichResponseMapMetadata.AIRichResponseMapAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AIRichResponseMapAnnotation to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AIRichResponseMapAnnotation
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Properties of a AIRichResponseLatexMetadata. */
    interface IAIRichResponseLatexMetadata {

        /** AIRichResponseLatexMetadata text */
        text?: (string|null);

        /** AIRichResponseLatexMetadata expressions */
        expressions?: (AICommon.AIRichResponseLatexMetadata.IAIRichResponseLatexExpression[]|null);
    }

    /** Represents a AIRichResponseLatexMetadata. */
    class AIRichResponseLatexMetadata implements IAIRichResponseLatexMetadata {

        /**
         * Constructs a new AIRichResponseLatexMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIRichResponseLatexMetadata);

        /** AIRichResponseLatexMetadata text. */
        public text: string;

        /** AIRichResponseLatexMetadata expressions. */
        public expressions: AICommon.AIRichResponseLatexMetadata.IAIRichResponseLatexExpression[];

        /**
         * Creates a new AIRichResponseLatexMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseLatexMetadata instance
         */
        public static create(properties?: AICommon.IAIRichResponseLatexMetadata): AICommon.AIRichResponseLatexMetadata;

        /**
         * Encodes the specified AIRichResponseLatexMetadata message. Does not implicitly {@link AICommon.AIRichResponseLatexMetadata.verify|verify} messages.
         * @param message AIRichResponseLatexMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIRichResponseLatexMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseLatexMetadata message, length delimited. Does not implicitly {@link AICommon.AIRichResponseLatexMetadata.verify|verify} messages.
         * @param message AIRichResponseLatexMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIRichResponseLatexMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseLatexMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseLatexMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseLatexMetadata;

        /**
         * Decodes a AIRichResponseLatexMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseLatexMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseLatexMetadata;

        /**
         * Verifies a AIRichResponseLatexMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseLatexMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseLatexMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseLatexMetadata;

        /**
         * Creates a plain object from a AIRichResponseLatexMetadata message. Also converts values to other types if specified.
         * @param message AIRichResponseLatexMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIRichResponseLatexMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseLatexMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseLatexMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace AIRichResponseLatexMetadata {

        /** Properties of a AIRichResponseLatexExpression. */
        interface IAIRichResponseLatexExpression {

            /** AIRichResponseLatexExpression latexExpression */
            latexExpression?: (string|null);

            /** AIRichResponseLatexExpression url */
            url?: (string|null);

            /** AIRichResponseLatexExpression width */
            width?: (number|null);

            /** AIRichResponseLatexExpression height */
            height?: (number|null);

            /** AIRichResponseLatexExpression fontHeight */
            fontHeight?: (number|null);

            /** AIRichResponseLatexExpression imageTopPadding */
            imageTopPadding?: (number|null);

            /** AIRichResponseLatexExpression imageLeadingPadding */
            imageLeadingPadding?: (number|null);

            /** AIRichResponseLatexExpression imageBottomPadding */
            imageBottomPadding?: (number|null);

            /** AIRichResponseLatexExpression imageTrailingPadding */
            imageTrailingPadding?: (number|null);
        }

        /** Represents a AIRichResponseLatexExpression. */
        class AIRichResponseLatexExpression implements IAIRichResponseLatexExpression {

            /**
             * Constructs a new AIRichResponseLatexExpression.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.AIRichResponseLatexMetadata.IAIRichResponseLatexExpression);

            /** AIRichResponseLatexExpression latexExpression. */
            public latexExpression: string;

            /** AIRichResponseLatexExpression url. */
            public url: string;

            /** AIRichResponseLatexExpression width. */
            public width: number;

            /** AIRichResponseLatexExpression height. */
            public height: number;

            /** AIRichResponseLatexExpression fontHeight. */
            public fontHeight: number;

            /** AIRichResponseLatexExpression imageTopPadding. */
            public imageTopPadding: number;

            /** AIRichResponseLatexExpression imageLeadingPadding. */
            public imageLeadingPadding: number;

            /** AIRichResponseLatexExpression imageBottomPadding. */
            public imageBottomPadding: number;

            /** AIRichResponseLatexExpression imageTrailingPadding. */
            public imageTrailingPadding: number;

            /**
             * Creates a new AIRichResponseLatexExpression instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AIRichResponseLatexExpression instance
             */
            public static create(properties?: AICommon.AIRichResponseLatexMetadata.IAIRichResponseLatexExpression): AICommon.AIRichResponseLatexMetadata.AIRichResponseLatexExpression;

            /**
             * Encodes the specified AIRichResponseLatexExpression message. Does not implicitly {@link AICommon.AIRichResponseLatexMetadata.AIRichResponseLatexExpression.verify|verify} messages.
             * @param message AIRichResponseLatexExpression message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.AIRichResponseLatexMetadata.IAIRichResponseLatexExpression, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AIRichResponseLatexExpression message, length delimited. Does not implicitly {@link AICommon.AIRichResponseLatexMetadata.AIRichResponseLatexExpression.verify|verify} messages.
             * @param message AIRichResponseLatexExpression message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.AIRichResponseLatexMetadata.IAIRichResponseLatexExpression, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a AIRichResponseLatexExpression message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AIRichResponseLatexExpression
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseLatexMetadata.AIRichResponseLatexExpression;

            /**
             * Decodes a AIRichResponseLatexExpression message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AIRichResponseLatexExpression
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseLatexMetadata.AIRichResponseLatexExpression;

            /**
             * Verifies a AIRichResponseLatexExpression message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a AIRichResponseLatexExpression message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AIRichResponseLatexExpression
             */
            public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseLatexMetadata.AIRichResponseLatexExpression;

            /**
             * Creates a plain object from a AIRichResponseLatexExpression message. Also converts values to other types if specified.
             * @param message AIRichResponseLatexExpression
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.AIRichResponseLatexMetadata.AIRichResponseLatexExpression, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AIRichResponseLatexExpression to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AIRichResponseLatexExpression
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Properties of a AIRichResponseUnifiedResponse. */
    interface IAIRichResponseUnifiedResponse {

        /** AIRichResponseUnifiedResponse data */
        data?: (Uint8Array|null);
    }

    /** Represents a AIRichResponseUnifiedResponse. */
    class AIRichResponseUnifiedResponse implements IAIRichResponseUnifiedResponse {

        /**
         * Constructs a new AIRichResponseUnifiedResponse.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIRichResponseUnifiedResponse);

        /** AIRichResponseUnifiedResponse data. */
        public data: Uint8Array;

        /**
         * Creates a new AIRichResponseUnifiedResponse instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseUnifiedResponse instance
         */
        public static create(properties?: AICommon.IAIRichResponseUnifiedResponse): AICommon.AIRichResponseUnifiedResponse;

        /**
         * Encodes the specified AIRichResponseUnifiedResponse message. Does not implicitly {@link AICommon.AIRichResponseUnifiedResponse.verify|verify} messages.
         * @param message AIRichResponseUnifiedResponse message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIRichResponseUnifiedResponse, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseUnifiedResponse message, length delimited. Does not implicitly {@link AICommon.AIRichResponseUnifiedResponse.verify|verify} messages.
         * @param message AIRichResponseUnifiedResponse message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIRichResponseUnifiedResponse, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseUnifiedResponse message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseUnifiedResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseUnifiedResponse;

        /**
         * Decodes a AIRichResponseUnifiedResponse message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseUnifiedResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseUnifiedResponse;

        /**
         * Verifies a AIRichResponseUnifiedResponse message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseUnifiedResponse message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseUnifiedResponse
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseUnifiedResponse;

        /**
         * Creates a plain object from a AIRichResponseUnifiedResponse message. Also converts values to other types if specified.
         * @param message AIRichResponseUnifiedResponse
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIRichResponseUnifiedResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseUnifiedResponse to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseUnifiedResponse
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a AIRichResponseDynamicMetadata. */
    interface IAIRichResponseDynamicMetadata {

        /** AIRichResponseDynamicMetadata type */
        type?: (AICommon.AIRichResponseDynamicMetadata.AIRichResponseDynamicMetadataType|null);

        /** AIRichResponseDynamicMetadata version */
        version?: (number|Long|null);

        /** AIRichResponseDynamicMetadata url */
        url?: (string|null);

        /** AIRichResponseDynamicMetadata loopCount */
        loopCount?: (number|null);
    }

    /** Represents a AIRichResponseDynamicMetadata. */
    class AIRichResponseDynamicMetadata implements IAIRichResponseDynamicMetadata {

        /**
         * Constructs a new AIRichResponseDynamicMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIRichResponseDynamicMetadata);

        /** AIRichResponseDynamicMetadata type. */
        public type: AICommon.AIRichResponseDynamicMetadata.AIRichResponseDynamicMetadataType;

        /** AIRichResponseDynamicMetadata version. */
        public version: (number|Long);

        /** AIRichResponseDynamicMetadata url. */
        public url: string;

        /** AIRichResponseDynamicMetadata loopCount. */
        public loopCount: number;

        /**
         * Creates a new AIRichResponseDynamicMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseDynamicMetadata instance
         */
        public static create(properties?: AICommon.IAIRichResponseDynamicMetadata): AICommon.AIRichResponseDynamicMetadata;

        /**
         * Encodes the specified AIRichResponseDynamicMetadata message. Does not implicitly {@link AICommon.AIRichResponseDynamicMetadata.verify|verify} messages.
         * @param message AIRichResponseDynamicMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIRichResponseDynamicMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseDynamicMetadata message, length delimited. Does not implicitly {@link AICommon.AIRichResponseDynamicMetadata.verify|verify} messages.
         * @param message AIRichResponseDynamicMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIRichResponseDynamicMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseDynamicMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseDynamicMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseDynamicMetadata;

        /**
         * Decodes a AIRichResponseDynamicMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseDynamicMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseDynamicMetadata;

        /**
         * Verifies a AIRichResponseDynamicMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseDynamicMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseDynamicMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseDynamicMetadata;

        /**
         * Creates a plain object from a AIRichResponseDynamicMetadata message. Also converts values to other types if specified.
         * @param message AIRichResponseDynamicMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIRichResponseDynamicMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseDynamicMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseDynamicMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace AIRichResponseDynamicMetadata {

        /** AIRichResponseDynamicMetadataType enum. */
        enum AIRichResponseDynamicMetadataType {
            AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_UNKNOWN = 0,
            AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_IMAGE = 1,
            AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_GIF = 2
        }
    }

    /** Properties of a AIRichResponseTableMetadata. */
    interface IAIRichResponseTableMetadata {

        /** AIRichResponseTableMetadata rows */
        rows?: (AICommon.AIRichResponseTableMetadata.IAIRichResponseTableRow[]|null);

        /** AIRichResponseTableMetadata title */
        title?: (string|null);
    }

    /** Represents a AIRichResponseTableMetadata. */
    class AIRichResponseTableMetadata implements IAIRichResponseTableMetadata {

        /**
         * Constructs a new AIRichResponseTableMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIRichResponseTableMetadata);

        /** AIRichResponseTableMetadata rows. */
        public rows: AICommon.AIRichResponseTableMetadata.IAIRichResponseTableRow[];

        /** AIRichResponseTableMetadata title. */
        public title: string;

        /**
         * Creates a new AIRichResponseTableMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseTableMetadata instance
         */
        public static create(properties?: AICommon.IAIRichResponseTableMetadata): AICommon.AIRichResponseTableMetadata;

        /**
         * Encodes the specified AIRichResponseTableMetadata message. Does not implicitly {@link AICommon.AIRichResponseTableMetadata.verify|verify} messages.
         * @param message AIRichResponseTableMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIRichResponseTableMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseTableMetadata message, length delimited. Does not implicitly {@link AICommon.AIRichResponseTableMetadata.verify|verify} messages.
         * @param message AIRichResponseTableMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIRichResponseTableMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseTableMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseTableMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseTableMetadata;

        /**
         * Decodes a AIRichResponseTableMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseTableMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseTableMetadata;

        /**
         * Verifies a AIRichResponseTableMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseTableMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseTableMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseTableMetadata;

        /**
         * Creates a plain object from a AIRichResponseTableMetadata message. Also converts values to other types if specified.
         * @param message AIRichResponseTableMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIRichResponseTableMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseTableMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseTableMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace AIRichResponseTableMetadata {

        /** Properties of a AIRichResponseTableRow. */
        interface IAIRichResponseTableRow {

            /** AIRichResponseTableRow items */
            items?: (string[]|null);

            /** AIRichResponseTableRow isHeading */
            isHeading?: (boolean|null);
        }

        /** Represents a AIRichResponseTableRow. */
        class AIRichResponseTableRow implements IAIRichResponseTableRow {

            /**
             * Constructs a new AIRichResponseTableRow.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.AIRichResponseTableMetadata.IAIRichResponseTableRow);

            /** AIRichResponseTableRow items. */
            public items: string[];

            /** AIRichResponseTableRow isHeading. */
            public isHeading: boolean;

            /**
             * Creates a new AIRichResponseTableRow instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AIRichResponseTableRow instance
             */
            public static create(properties?: AICommon.AIRichResponseTableMetadata.IAIRichResponseTableRow): AICommon.AIRichResponseTableMetadata.AIRichResponseTableRow;

            /**
             * Encodes the specified AIRichResponseTableRow message. Does not implicitly {@link AICommon.AIRichResponseTableMetadata.AIRichResponseTableRow.verify|verify} messages.
             * @param message AIRichResponseTableRow message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.AIRichResponseTableMetadata.IAIRichResponseTableRow, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AIRichResponseTableRow message, length delimited. Does not implicitly {@link AICommon.AIRichResponseTableMetadata.AIRichResponseTableRow.verify|verify} messages.
             * @param message AIRichResponseTableRow message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.AIRichResponseTableMetadata.IAIRichResponseTableRow, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a AIRichResponseTableRow message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AIRichResponseTableRow
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseTableMetadata.AIRichResponseTableRow;

            /**
             * Decodes a AIRichResponseTableRow message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AIRichResponseTableRow
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseTableMetadata.AIRichResponseTableRow;

            /**
             * Verifies a AIRichResponseTableRow message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a AIRichResponseTableRow message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AIRichResponseTableRow
             */
            public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseTableMetadata.AIRichResponseTableRow;

            /**
             * Creates a plain object from a AIRichResponseTableRow message. Also converts values to other types if specified.
             * @param message AIRichResponseTableRow
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.AIRichResponseTableMetadata.AIRichResponseTableRow, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AIRichResponseTableRow to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AIRichResponseTableRow
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Properties of a AIRichResponseCodeMetadata. */
    interface IAIRichResponseCodeMetadata {

        /** AIRichResponseCodeMetadata codeLanguage */
        codeLanguage?: (string|null);

        /** AIRichResponseCodeMetadata codeBlocks */
        codeBlocks?: (AICommon.AIRichResponseCodeMetadata.IAIRichResponseCodeBlock[]|null);
    }

    /** Represents a AIRichResponseCodeMetadata. */
    class AIRichResponseCodeMetadata implements IAIRichResponseCodeMetadata {

        /**
         * Constructs a new AIRichResponseCodeMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIRichResponseCodeMetadata);

        /** AIRichResponseCodeMetadata codeLanguage. */
        public codeLanguage: string;

        /** AIRichResponseCodeMetadata codeBlocks. */
        public codeBlocks: AICommon.AIRichResponseCodeMetadata.IAIRichResponseCodeBlock[];

        /**
         * Creates a new AIRichResponseCodeMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseCodeMetadata instance
         */
        public static create(properties?: AICommon.IAIRichResponseCodeMetadata): AICommon.AIRichResponseCodeMetadata;

        /**
         * Encodes the specified AIRichResponseCodeMetadata message. Does not implicitly {@link AICommon.AIRichResponseCodeMetadata.verify|verify} messages.
         * @param message AIRichResponseCodeMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIRichResponseCodeMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseCodeMetadata message, length delimited. Does not implicitly {@link AICommon.AIRichResponseCodeMetadata.verify|verify} messages.
         * @param message AIRichResponseCodeMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIRichResponseCodeMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseCodeMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseCodeMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseCodeMetadata;

        /**
         * Decodes a AIRichResponseCodeMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseCodeMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseCodeMetadata;

        /**
         * Verifies a AIRichResponseCodeMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseCodeMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseCodeMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseCodeMetadata;

        /**
         * Creates a plain object from a AIRichResponseCodeMetadata message. Also converts values to other types if specified.
         * @param message AIRichResponseCodeMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIRichResponseCodeMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseCodeMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseCodeMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace AIRichResponseCodeMetadata {

        /** Properties of a AIRichResponseCodeBlock. */
        interface IAIRichResponseCodeBlock {

            /** AIRichResponseCodeBlock highlightType */
            highlightType?: (AICommon.AIRichResponseCodeMetadata.AIRichResponseCodeHighlightType|null);

            /** AIRichResponseCodeBlock codeContent */
            codeContent?: (string|null);
        }

        /** Represents a AIRichResponseCodeBlock. */
        class AIRichResponseCodeBlock implements IAIRichResponseCodeBlock {

            /**
             * Constructs a new AIRichResponseCodeBlock.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.AIRichResponseCodeMetadata.IAIRichResponseCodeBlock);

            /** AIRichResponseCodeBlock highlightType. */
            public highlightType: AICommon.AIRichResponseCodeMetadata.AIRichResponseCodeHighlightType;

            /** AIRichResponseCodeBlock codeContent. */
            public codeContent: string;

            /**
             * Creates a new AIRichResponseCodeBlock instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AIRichResponseCodeBlock instance
             */
            public static create(properties?: AICommon.AIRichResponseCodeMetadata.IAIRichResponseCodeBlock): AICommon.AIRichResponseCodeMetadata.AIRichResponseCodeBlock;

            /**
             * Encodes the specified AIRichResponseCodeBlock message. Does not implicitly {@link AICommon.AIRichResponseCodeMetadata.AIRichResponseCodeBlock.verify|verify} messages.
             * @param message AIRichResponseCodeBlock message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.AIRichResponseCodeMetadata.IAIRichResponseCodeBlock, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AIRichResponseCodeBlock message, length delimited. Does not implicitly {@link AICommon.AIRichResponseCodeMetadata.AIRichResponseCodeBlock.verify|verify} messages.
             * @param message AIRichResponseCodeBlock message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.AIRichResponseCodeMetadata.IAIRichResponseCodeBlock, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a AIRichResponseCodeBlock message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AIRichResponseCodeBlock
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseCodeMetadata.AIRichResponseCodeBlock;

            /**
             * Decodes a AIRichResponseCodeBlock message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AIRichResponseCodeBlock
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseCodeMetadata.AIRichResponseCodeBlock;

            /**
             * Verifies a AIRichResponseCodeBlock message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a AIRichResponseCodeBlock message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AIRichResponseCodeBlock
             */
            public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseCodeMetadata.AIRichResponseCodeBlock;

            /**
             * Creates a plain object from a AIRichResponseCodeBlock message. Also converts values to other types if specified.
             * @param message AIRichResponseCodeBlock
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.AIRichResponseCodeMetadata.AIRichResponseCodeBlock, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AIRichResponseCodeBlock to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AIRichResponseCodeBlock
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** AIRichResponseCodeHighlightType enum. */
        enum AIRichResponseCodeHighlightType {
            AI_RICH_RESPONSE_CODE_HIGHLIGHT_DEFAULT = 0,
            AI_RICH_RESPONSE_CODE_HIGHLIGHT_KEYWORD = 1,
            AI_RICH_RESPONSE_CODE_HIGHLIGHT_METHOD = 2,
            AI_RICH_RESPONSE_CODE_HIGHLIGHT_STRING = 3,
            AI_RICH_RESPONSE_CODE_HIGHLIGHT_NUMBER = 4,
            AI_RICH_RESPONSE_CODE_HIGHLIGHT_COMMENT = 5
        }
    }

    /** Properties of a AIRichResponseInlineImageMetadata. */
    interface IAIRichResponseInlineImageMetadata {

        /** AIRichResponseInlineImageMetadata imageUrl */
        imageUrl?: (AICommon.IAIRichResponseImageURL|null);

        /** AIRichResponseInlineImageMetadata imageText */
        imageText?: (string|null);

        /** AIRichResponseInlineImageMetadata alignment */
        alignment?: (AICommon.AIRichResponseInlineImageMetadata.AIRichResponseImageAlignment|null);

        /** AIRichResponseInlineImageMetadata tapLinkUrl */
        tapLinkUrl?: (string|null);
    }

    /** Represents a AIRichResponseInlineImageMetadata. */
    class AIRichResponseInlineImageMetadata implements IAIRichResponseInlineImageMetadata {

        /**
         * Constructs a new AIRichResponseInlineImageMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIRichResponseInlineImageMetadata);

        /** AIRichResponseInlineImageMetadata imageUrl. */
        public imageUrl?: (AICommon.IAIRichResponseImageURL|null);

        /** AIRichResponseInlineImageMetadata imageText. */
        public imageText: string;

        /** AIRichResponseInlineImageMetadata alignment. */
        public alignment: AICommon.AIRichResponseInlineImageMetadata.AIRichResponseImageAlignment;

        /** AIRichResponseInlineImageMetadata tapLinkUrl. */
        public tapLinkUrl: string;

        /**
         * Creates a new AIRichResponseInlineImageMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseInlineImageMetadata instance
         */
        public static create(properties?: AICommon.IAIRichResponseInlineImageMetadata): AICommon.AIRichResponseInlineImageMetadata;

        /**
         * Encodes the specified AIRichResponseInlineImageMetadata message. Does not implicitly {@link AICommon.AIRichResponseInlineImageMetadata.verify|verify} messages.
         * @param message AIRichResponseInlineImageMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIRichResponseInlineImageMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseInlineImageMetadata message, length delimited. Does not implicitly {@link AICommon.AIRichResponseInlineImageMetadata.verify|verify} messages.
         * @param message AIRichResponseInlineImageMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIRichResponseInlineImageMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseInlineImageMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseInlineImageMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseInlineImageMetadata;

        /**
         * Decodes a AIRichResponseInlineImageMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseInlineImageMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseInlineImageMetadata;

        /**
         * Verifies a AIRichResponseInlineImageMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseInlineImageMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseInlineImageMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseInlineImageMetadata;

        /**
         * Creates a plain object from a AIRichResponseInlineImageMetadata message. Also converts values to other types if specified.
         * @param message AIRichResponseInlineImageMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIRichResponseInlineImageMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseInlineImageMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseInlineImageMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace AIRichResponseInlineImageMetadata {

        /** AIRichResponseImageAlignment enum. */
        enum AIRichResponseImageAlignment {
            AI_RICH_RESPONSE_IMAGE_LAYOUT_LEADING_ALIGNED = 0,
            AI_RICH_RESPONSE_IMAGE_LAYOUT_TRAILING_ALIGNED = 1,
            AI_RICH_RESPONSE_IMAGE_LAYOUT_CENTER_ALIGNED = 2
        }
    }

    /** Properties of a AIRichResponseGridImageMetadata. */
    interface IAIRichResponseGridImageMetadata {

        /** AIRichResponseGridImageMetadata gridImageUrl */
        gridImageUrl?: (AICommon.IAIRichResponseImageURL|null);

        /** AIRichResponseGridImageMetadata imageUrls */
        imageUrls?: (AICommon.IAIRichResponseImageURL[]|null);
    }

    /** Represents a AIRichResponseGridImageMetadata. */
    class AIRichResponseGridImageMetadata implements IAIRichResponseGridImageMetadata {

        /**
         * Constructs a new AIRichResponseGridImageMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIRichResponseGridImageMetadata);

        /** AIRichResponseGridImageMetadata gridImageUrl. */
        public gridImageUrl?: (AICommon.IAIRichResponseImageURL|null);

        /** AIRichResponseGridImageMetadata imageUrls. */
        public imageUrls: AICommon.IAIRichResponseImageURL[];

        /**
         * Creates a new AIRichResponseGridImageMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseGridImageMetadata instance
         */
        public static create(properties?: AICommon.IAIRichResponseGridImageMetadata): AICommon.AIRichResponseGridImageMetadata;

        /**
         * Encodes the specified AIRichResponseGridImageMetadata message. Does not implicitly {@link AICommon.AIRichResponseGridImageMetadata.verify|verify} messages.
         * @param message AIRichResponseGridImageMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIRichResponseGridImageMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseGridImageMetadata message, length delimited. Does not implicitly {@link AICommon.AIRichResponseGridImageMetadata.verify|verify} messages.
         * @param message AIRichResponseGridImageMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIRichResponseGridImageMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseGridImageMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseGridImageMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseGridImageMetadata;

        /**
         * Decodes a AIRichResponseGridImageMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseGridImageMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseGridImageMetadata;

        /**
         * Verifies a AIRichResponseGridImageMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseGridImageMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseGridImageMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseGridImageMetadata;

        /**
         * Creates a plain object from a AIRichResponseGridImageMetadata message. Also converts values to other types if specified.
         * @param message AIRichResponseGridImageMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIRichResponseGridImageMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseGridImageMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseGridImageMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a AIRichResponseImageURL. */
    interface IAIRichResponseImageURL {

        /** AIRichResponseImageURL imagePreviewUrl */
        imagePreviewUrl?: (string|null);

        /** AIRichResponseImageURL imageHighResUrl */
        imageHighResUrl?: (string|null);

        /** AIRichResponseImageURL sourceUrl */
        sourceUrl?: (string|null);
    }

    /** Represents a AIRichResponseImageURL. */
    class AIRichResponseImageURL implements IAIRichResponseImageURL {

        /**
         * Constructs a new AIRichResponseImageURL.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIRichResponseImageURL);

        /** AIRichResponseImageURL imagePreviewUrl. */
        public imagePreviewUrl: string;

        /** AIRichResponseImageURL imageHighResUrl. */
        public imageHighResUrl: string;

        /** AIRichResponseImageURL sourceUrl. */
        public sourceUrl: string;

        /**
         * Creates a new AIRichResponseImageURL instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIRichResponseImageURL instance
         */
        public static create(properties?: AICommon.IAIRichResponseImageURL): AICommon.AIRichResponseImageURL;

        /**
         * Encodes the specified AIRichResponseImageURL message. Does not implicitly {@link AICommon.AIRichResponseImageURL.verify|verify} messages.
         * @param message AIRichResponseImageURL message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIRichResponseImageURL, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIRichResponseImageURL message, length delimited. Does not implicitly {@link AICommon.AIRichResponseImageURL.verify|verify} messages.
         * @param message AIRichResponseImageURL message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIRichResponseImageURL, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIRichResponseImageURL message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIRichResponseImageURL
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIRichResponseImageURL;

        /**
         * Decodes a AIRichResponseImageURL message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIRichResponseImageURL
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIRichResponseImageURL;

        /**
         * Verifies a AIRichResponseImageURL message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIRichResponseImageURL message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIRichResponseImageURL
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIRichResponseImageURL;

        /**
         * Creates a plain object from a AIRichResponseImageURL message. Also converts values to other types if specified.
         * @param message AIRichResponseImageURL
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIRichResponseImageURL, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIRichResponseImageURL to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIRichResponseImageURL
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a ForwardedAIBotMessageInfo. */
    interface IForwardedAIBotMessageInfo {

        /** ForwardedAIBotMessageInfo botName */
        botName?: (string|null);

        /** ForwardedAIBotMessageInfo botJid */
        botJid?: (string|null);

        /** ForwardedAIBotMessageInfo creatorName */
        creatorName?: (string|null);
    }

    /** Represents a ForwardedAIBotMessageInfo. */
    class ForwardedAIBotMessageInfo implements IForwardedAIBotMessageInfo {

        /**
         * Constructs a new ForwardedAIBotMessageInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IForwardedAIBotMessageInfo);

        /** ForwardedAIBotMessageInfo botName. */
        public botName: string;

        /** ForwardedAIBotMessageInfo botJid. */
        public botJid: string;

        /** ForwardedAIBotMessageInfo creatorName. */
        public creatorName: string;

        /**
         * Creates a new ForwardedAIBotMessageInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ForwardedAIBotMessageInfo instance
         */
        public static create(properties?: AICommon.IForwardedAIBotMessageInfo): AICommon.ForwardedAIBotMessageInfo;

        /**
         * Encodes the specified ForwardedAIBotMessageInfo message. Does not implicitly {@link AICommon.ForwardedAIBotMessageInfo.verify|verify} messages.
         * @param message ForwardedAIBotMessageInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IForwardedAIBotMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ForwardedAIBotMessageInfo message, length delimited. Does not implicitly {@link AICommon.ForwardedAIBotMessageInfo.verify|verify} messages.
         * @param message ForwardedAIBotMessageInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IForwardedAIBotMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ForwardedAIBotMessageInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ForwardedAIBotMessageInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.ForwardedAIBotMessageInfo;

        /**
         * Decodes a ForwardedAIBotMessageInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ForwardedAIBotMessageInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.ForwardedAIBotMessageInfo;

        /**
         * Verifies a ForwardedAIBotMessageInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ForwardedAIBotMessageInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ForwardedAIBotMessageInfo
         */
        public static fromObject(object: { [k: string]: any }): AICommon.ForwardedAIBotMessageInfo;

        /**
         * Creates a plain object from a ForwardedAIBotMessageInfo message. Also converts values to other types if specified.
         * @param message ForwardedAIBotMessageInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.ForwardedAIBotMessageInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ForwardedAIBotMessageInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ForwardedAIBotMessageInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotFeedbackMessage. */
    interface IBotFeedbackMessage {

        /** BotFeedbackMessage messageKey */
        messageKey?: (Protocol.IMessageKey|null);

        /** BotFeedbackMessage kind */
        kind?: (AICommon.BotFeedbackMessage.BotFeedbackKind|null);

        /** BotFeedbackMessage text */
        text?: (string|null);

        /** BotFeedbackMessage kindNegative */
        kindNegative?: (number|Long|null);

        /** BotFeedbackMessage kindPositive */
        kindPositive?: (number|Long|null);

        /** BotFeedbackMessage kindReport */
        kindReport?: (AICommon.BotFeedbackMessage.ReportKind|null);

        /** BotFeedbackMessage sideBySideSurveyMetadata */
        sideBySideSurveyMetadata?: (AICommon.BotFeedbackMessage.ISideBySideSurveyMetadata|null);
    }

    /** Represents a BotFeedbackMessage. */
    class BotFeedbackMessage implements IBotFeedbackMessage {

        /**
         * Constructs a new BotFeedbackMessage.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotFeedbackMessage);

        /** BotFeedbackMessage messageKey. */
        public messageKey?: (Protocol.IMessageKey|null);

        /** BotFeedbackMessage kind. */
        public kind: AICommon.BotFeedbackMessage.BotFeedbackKind;

        /** BotFeedbackMessage text. */
        public text: string;

        /** BotFeedbackMessage kindNegative. */
        public kindNegative: (number|Long);

        /** BotFeedbackMessage kindPositive. */
        public kindPositive: (number|Long);

        /** BotFeedbackMessage kindReport. */
        public kindReport: AICommon.BotFeedbackMessage.ReportKind;

        /** BotFeedbackMessage sideBySideSurveyMetadata. */
        public sideBySideSurveyMetadata?: (AICommon.BotFeedbackMessage.ISideBySideSurveyMetadata|null);

        /**
         * Creates a new BotFeedbackMessage instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotFeedbackMessage instance
         */
        public static create(properties?: AICommon.IBotFeedbackMessage): AICommon.BotFeedbackMessage;

        /**
         * Encodes the specified BotFeedbackMessage message. Does not implicitly {@link AICommon.BotFeedbackMessage.verify|verify} messages.
         * @param message BotFeedbackMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotFeedbackMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotFeedbackMessage message, length delimited. Does not implicitly {@link AICommon.BotFeedbackMessage.verify|verify} messages.
         * @param message BotFeedbackMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotFeedbackMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotFeedbackMessage message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotFeedbackMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotFeedbackMessage;

        /**
         * Decodes a BotFeedbackMessage message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotFeedbackMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotFeedbackMessage;

        /**
         * Verifies a BotFeedbackMessage message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotFeedbackMessage message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotFeedbackMessage
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotFeedbackMessage;

        /**
         * Creates a plain object from a BotFeedbackMessage message. Also converts values to other types if specified.
         * @param message BotFeedbackMessage
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotFeedbackMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotFeedbackMessage to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotFeedbackMessage
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotFeedbackMessage {

        /** BotFeedbackKind enum. */
        enum BotFeedbackKind {
            BOT_FEEDBACK_POSITIVE = 0,
            BOT_FEEDBACK_NEGATIVE_GENERIC = 1,
            BOT_FEEDBACK_NEGATIVE_HELPFUL = 2,
            BOT_FEEDBACK_NEGATIVE_INTERESTING = 3,
            BOT_FEEDBACK_NEGATIVE_ACCURATE = 4,
            BOT_FEEDBACK_NEGATIVE_SAFE = 5,
            BOT_FEEDBACK_NEGATIVE_OTHER = 6,
            BOT_FEEDBACK_NEGATIVE_REFUSED = 7,
            BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING = 8,
            BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT = 9,
            BOT_FEEDBACK_NEGATIVE_PERSONALIZED = 10,
            BOT_FEEDBACK_NEGATIVE_CLARITY = 11,
            BOT_FEEDBACK_NEGATIVE_DOESNT_LOOK_LIKE_THE_PERSON = 12,
            BOT_FEEDBACK_NEGATIVE_HALLUCINATION_INTERNAL_ONLY = 13,
            BOT_FEEDBACK_NEGATIVE = 14
        }

        /** BotFeedbackKindMultipleNegative enum. */
        enum BotFeedbackKindMultipleNegative {
            BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC = 1,
            BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL = 2,
            BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING = 4,
            BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE = 8,
            BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE = 16,
            BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER = 32,
            BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED = 64,
            BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING = 128,
            BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT = 256
        }

        /** BotFeedbackKindMultiplePositive enum. */
        enum BotFeedbackKindMultiplePositive {
            BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC = 1
        }

        /** ReportKind enum. */
        enum ReportKind {
            NONE = 0,
            GENERIC = 1
        }

        /** Properties of a SideBySideSurveyMetadata. */
        interface ISideBySideSurveyMetadata {

            /** SideBySideSurveyMetadata selectedRequestId */
            selectedRequestId?: (string|null);

            /** SideBySideSurveyMetadata surveyId */
            surveyId?: (number|null);

            /** SideBySideSurveyMetadata simonSessionFbid */
            simonSessionFbid?: (string|null);

            /** SideBySideSurveyMetadata responseOtid */
            responseOtid?: (string|null);

            /** SideBySideSurveyMetadata responseTimestampMsString */
            responseTimestampMsString?: (string|null);

            /** SideBySideSurveyMetadata isSelectedResponsePrimary */
            isSelectedResponsePrimary?: (boolean|null);

            /** SideBySideSurveyMetadata messageIdToEdit */
            messageIdToEdit?: (string|null);

            /** SideBySideSurveyMetadata analyticsData */
            analyticsData?: (AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.ISideBySideSurveyAnalyticsData|null);
        }

        /** Represents a SideBySideSurveyMetadata. */
        class SideBySideSurveyMetadata implements ISideBySideSurveyMetadata {

            /**
             * Constructs a new SideBySideSurveyMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.BotFeedbackMessage.ISideBySideSurveyMetadata);

            /** SideBySideSurveyMetadata selectedRequestId. */
            public selectedRequestId: string;

            /** SideBySideSurveyMetadata surveyId. */
            public surveyId: number;

            /** SideBySideSurveyMetadata simonSessionFbid. */
            public simonSessionFbid: string;

            /** SideBySideSurveyMetadata responseOtid. */
            public responseOtid: string;

            /** SideBySideSurveyMetadata responseTimestampMsString. */
            public responseTimestampMsString: string;

            /** SideBySideSurveyMetadata isSelectedResponsePrimary. */
            public isSelectedResponsePrimary: boolean;

            /** SideBySideSurveyMetadata messageIdToEdit. */
            public messageIdToEdit: string;

            /** SideBySideSurveyMetadata analyticsData. */
            public analyticsData?: (AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.ISideBySideSurveyAnalyticsData|null);

            /**
             * Creates a new SideBySideSurveyMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns SideBySideSurveyMetadata instance
             */
            public static create(properties?: AICommon.BotFeedbackMessage.ISideBySideSurveyMetadata): AICommon.BotFeedbackMessage.SideBySideSurveyMetadata;

            /**
             * Encodes the specified SideBySideSurveyMetadata message. Does not implicitly {@link AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.verify|verify} messages.
             * @param message SideBySideSurveyMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.BotFeedbackMessage.ISideBySideSurveyMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified SideBySideSurveyMetadata message, length delimited. Does not implicitly {@link AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.verify|verify} messages.
             * @param message SideBySideSurveyMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.BotFeedbackMessage.ISideBySideSurveyMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a SideBySideSurveyMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns SideBySideSurveyMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotFeedbackMessage.SideBySideSurveyMetadata;

            /**
             * Decodes a SideBySideSurveyMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns SideBySideSurveyMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotFeedbackMessage.SideBySideSurveyMetadata;

            /**
             * Verifies a SideBySideSurveyMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a SideBySideSurveyMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns SideBySideSurveyMetadata
             */
            public static fromObject(object: { [k: string]: any }): AICommon.BotFeedbackMessage.SideBySideSurveyMetadata;

            /**
             * Creates a plain object from a SideBySideSurveyMetadata message. Also converts values to other types if specified.
             * @param message SideBySideSurveyMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.BotFeedbackMessage.SideBySideSurveyMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this SideBySideSurveyMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for SideBySideSurveyMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace SideBySideSurveyMetadata {

            /** Properties of a SideBySideSurveyAnalyticsData. */
            interface ISideBySideSurveyAnalyticsData {

                /** SideBySideSurveyAnalyticsData tessaEvent */
                tessaEvent?: (string|null);

                /** SideBySideSurveyAnalyticsData tessaSessionFbid */
                tessaSessionFbid?: (string|null);
            }

            /** Represents a SideBySideSurveyAnalyticsData. */
            class SideBySideSurveyAnalyticsData implements ISideBySideSurveyAnalyticsData {

                /**
                 * Constructs a new SideBySideSurveyAnalyticsData.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.ISideBySideSurveyAnalyticsData);

                /** SideBySideSurveyAnalyticsData tessaEvent. */
                public tessaEvent: string;

                /** SideBySideSurveyAnalyticsData tessaSessionFbid. */
                public tessaSessionFbid: string;

                /**
                 * Creates a new SideBySideSurveyAnalyticsData instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns SideBySideSurveyAnalyticsData instance
                 */
                public static create(properties?: AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.ISideBySideSurveyAnalyticsData): AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData;

                /**
                 * Encodes the specified SideBySideSurveyAnalyticsData message. Does not implicitly {@link AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData.verify|verify} messages.
                 * @param message SideBySideSurveyAnalyticsData message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.ISideBySideSurveyAnalyticsData, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified SideBySideSurveyAnalyticsData message, length delimited. Does not implicitly {@link AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData.verify|verify} messages.
                 * @param message SideBySideSurveyAnalyticsData message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.ISideBySideSurveyAnalyticsData, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a SideBySideSurveyAnalyticsData message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns SideBySideSurveyAnalyticsData
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData;

                /**
                 * Decodes a SideBySideSurveyAnalyticsData message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns SideBySideSurveyAnalyticsData
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData;

                /**
                 * Verifies a SideBySideSurveyAnalyticsData message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a SideBySideSurveyAnalyticsData message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns SideBySideSurveyAnalyticsData
                 */
                public static fromObject(object: { [k: string]: any }): AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData;

                /**
                 * Creates a plain object from a SideBySideSurveyAnalyticsData message. Also converts values to other types if specified.
                 * @param message SideBySideSurveyAnalyticsData
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: AICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this SideBySideSurveyAnalyticsData to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for SideBySideSurveyAnalyticsData
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }
    }

    /** Properties of a BotMetadata. */
    interface IBotMetadata {

        /** BotMetadata avatarMetadata */
        avatarMetadata?: (AICommon.IBotAvatarMetadata|null);

        /** BotMetadata personaId */
        personaId?: (string|null);

        /** BotMetadata pluginMetadata */
        pluginMetadata?: (AICommon.IBotPluginMetadata|null);

        /** BotMetadata suggestedPromptMetadata */
        suggestedPromptMetadata?: (AICommon.IBotSuggestedPromptMetadata|null);

        /** BotMetadata invokerJid */
        invokerJid?: (string|null);

        /** BotMetadata sessionMetadata */
        sessionMetadata?: (AICommon.IBotSessionMetadata|null);

        /** BotMetadata memuMetadata */
        memuMetadata?: (AICommon.IBotMemuMetadata|null);

        /** BotMetadata timezone */
        timezone?: (string|null);

        /** BotMetadata reminderMetadata */
        reminderMetadata?: (AICommon.IBotReminderMetadata|null);

        /** BotMetadata modelMetadata */
        modelMetadata?: (AICommon.IBotModelMetadata|null);

        /** BotMetadata messageDisclaimerText */
        messageDisclaimerText?: (string|null);

        /** BotMetadata progressIndicatorMetadata */
        progressIndicatorMetadata?: (AICommon.IBotProgressIndicatorMetadata|null);

        /** BotMetadata capabilityMetadata */
        capabilityMetadata?: (AICommon.IBotCapabilityMetadata|null);

        /** BotMetadata imagineMetadata */
        imagineMetadata?: (AICommon.IBotImagineMetadata|null);

        /** BotMetadata memoryMetadata */
        memoryMetadata?: (AICommon.IBotMemoryMetadata|null);

        /** BotMetadata renderingMetadata */
        renderingMetadata?: (AICommon.IBotRenderingMetadata|null);

        /** BotMetadata botMetricsMetadata */
        botMetricsMetadata?: (AICommon.IBotMetricsMetadata|null);

        /** BotMetadata botLinkedAccountsMetadata */
        botLinkedAccountsMetadata?: (AICommon.IBotLinkedAccountsMetadata|null);

        /** BotMetadata richResponseSourcesMetadata */
        richResponseSourcesMetadata?: (AICommon.IBotSourcesMetadata|null);

        /** BotMetadata aiConversationContext */
        aiConversationContext?: (Uint8Array|null);

        /** BotMetadata botPromotionMessageMetadata */
        botPromotionMessageMetadata?: (AICommon.IBotPromotionMessageMetadata|null);

        /** BotMetadata botModeSelectionMetadata */
        botModeSelectionMetadata?: (AICommon.IBotModeSelectionMetadata|null);

        /** BotMetadata botQuotaMetadata */
        botQuotaMetadata?: (AICommon.IBotQuotaMetadata|null);

        /** BotMetadata botAgeCollectionMetadata */
        botAgeCollectionMetadata?: (AICommon.IBotAgeCollectionMetadata|null);

        /** BotMetadata conversationStarterPromptId */
        conversationStarterPromptId?: (string|null);

        /** BotMetadata botResponseId */
        botResponseId?: (string|null);

        /** BotMetadata verificationMetadata */
        verificationMetadata?: (AICommon.IBotSignatureVerificationMetadata|null);

        /** BotMetadata unifiedResponseMutation */
        unifiedResponseMutation?: (AICommon.IBotUnifiedResponseMutation|null);

        /** BotMetadata botMessageOriginMetadata */
        botMessageOriginMetadata?: (AICommon.IBotMessageOriginMetadata|null);

        /** BotMetadata inThreadSurveyMetadata */
        inThreadSurveyMetadata?: (AICommon.IInThreadSurveyMetadata|null);

        /** BotMetadata botThreadInfo */
        botThreadInfo?: (AICommon.IAIThreadInfo|null);

        /** BotMetadata internalMetadata */
        internalMetadata?: (Uint8Array|null);
    }

    /** Represents a BotMetadata. */
    class BotMetadata implements IBotMetadata {

        /**
         * Constructs a new BotMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotMetadata);

        /** BotMetadata avatarMetadata. */
        public avatarMetadata?: (AICommon.IBotAvatarMetadata|null);

        /** BotMetadata personaId. */
        public personaId: string;

        /** BotMetadata pluginMetadata. */
        public pluginMetadata?: (AICommon.IBotPluginMetadata|null);

        /** BotMetadata suggestedPromptMetadata. */
        public suggestedPromptMetadata?: (AICommon.IBotSuggestedPromptMetadata|null);

        /** BotMetadata invokerJid. */
        public invokerJid: string;

        /** BotMetadata sessionMetadata. */
        public sessionMetadata?: (AICommon.IBotSessionMetadata|null);

        /** BotMetadata memuMetadata. */
        public memuMetadata?: (AICommon.IBotMemuMetadata|null);

        /** BotMetadata timezone. */
        public timezone: string;

        /** BotMetadata reminderMetadata. */
        public reminderMetadata?: (AICommon.IBotReminderMetadata|null);

        /** BotMetadata modelMetadata. */
        public modelMetadata?: (AICommon.IBotModelMetadata|null);

        /** BotMetadata messageDisclaimerText. */
        public messageDisclaimerText: string;

        /** BotMetadata progressIndicatorMetadata. */
        public progressIndicatorMetadata?: (AICommon.IBotProgressIndicatorMetadata|null);

        /** BotMetadata capabilityMetadata. */
        public capabilityMetadata?: (AICommon.IBotCapabilityMetadata|null);

        /** BotMetadata imagineMetadata. */
        public imagineMetadata?: (AICommon.IBotImagineMetadata|null);

        /** BotMetadata memoryMetadata. */
        public memoryMetadata?: (AICommon.IBotMemoryMetadata|null);

        /** BotMetadata renderingMetadata. */
        public renderingMetadata?: (AICommon.IBotRenderingMetadata|null);

        /** BotMetadata botMetricsMetadata. */
        public botMetricsMetadata?: (AICommon.IBotMetricsMetadata|null);

        /** BotMetadata botLinkedAccountsMetadata. */
        public botLinkedAccountsMetadata?: (AICommon.IBotLinkedAccountsMetadata|null);

        /** BotMetadata richResponseSourcesMetadata. */
        public richResponseSourcesMetadata?: (AICommon.IBotSourcesMetadata|null);

        /** BotMetadata aiConversationContext. */
        public aiConversationContext: Uint8Array;

        /** BotMetadata botPromotionMessageMetadata. */
        public botPromotionMessageMetadata?: (AICommon.IBotPromotionMessageMetadata|null);

        /** BotMetadata botModeSelectionMetadata. */
        public botModeSelectionMetadata?: (AICommon.IBotModeSelectionMetadata|null);

        /** BotMetadata botQuotaMetadata. */
        public botQuotaMetadata?: (AICommon.IBotQuotaMetadata|null);

        /** BotMetadata botAgeCollectionMetadata. */
        public botAgeCollectionMetadata?: (AICommon.IBotAgeCollectionMetadata|null);

        /** BotMetadata conversationStarterPromptId. */
        public conversationStarterPromptId: string;

        /** BotMetadata botResponseId. */
        public botResponseId: string;

        /** BotMetadata verificationMetadata. */
        public verificationMetadata?: (AICommon.IBotSignatureVerificationMetadata|null);

        /** BotMetadata unifiedResponseMutation. */
        public unifiedResponseMutation?: (AICommon.IBotUnifiedResponseMutation|null);

        /** BotMetadata botMessageOriginMetadata. */
        public botMessageOriginMetadata?: (AICommon.IBotMessageOriginMetadata|null);

        /** BotMetadata inThreadSurveyMetadata. */
        public inThreadSurveyMetadata?: (AICommon.IInThreadSurveyMetadata|null);

        /** BotMetadata botThreadInfo. */
        public botThreadInfo?: (AICommon.IAIThreadInfo|null);

        /** BotMetadata internalMetadata. */
        public internalMetadata: Uint8Array;

        /**
         * Creates a new BotMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotMetadata instance
         */
        public static create(properties?: AICommon.IBotMetadata): AICommon.BotMetadata;

        /**
         * Encodes the specified BotMetadata message. Does not implicitly {@link AICommon.BotMetadata.verify|verify} messages.
         * @param message BotMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotMetadata message, length delimited. Does not implicitly {@link AICommon.BotMetadata.verify|verify} messages.
         * @param message BotMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotMetadata;

        /**
         * Decodes a BotMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotMetadata;

        /**
         * Verifies a BotMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotMetadata;

        /**
         * Creates a plain object from a BotMetadata message. Also converts values to other types if specified.
         * @param message BotMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a AIThreadInfo. */
    interface IAIThreadInfo {

        /** AIThreadInfo serverInfo */
        serverInfo?: (AICommon.AIThreadInfo.IAIThreadServerInfo|null);

        /** AIThreadInfo clientInfo */
        clientInfo?: (AICommon.AIThreadInfo.IAIThreadClientInfo|null);
    }

    /** Represents a AIThreadInfo. */
    class AIThreadInfo implements IAIThreadInfo {

        /**
         * Constructs a new AIThreadInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IAIThreadInfo);

        /** AIThreadInfo serverInfo. */
        public serverInfo?: (AICommon.AIThreadInfo.IAIThreadServerInfo|null);

        /** AIThreadInfo clientInfo. */
        public clientInfo?: (AICommon.AIThreadInfo.IAIThreadClientInfo|null);

        /**
         * Creates a new AIThreadInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns AIThreadInfo instance
         */
        public static create(properties?: AICommon.IAIThreadInfo): AICommon.AIThreadInfo;

        /**
         * Encodes the specified AIThreadInfo message. Does not implicitly {@link AICommon.AIThreadInfo.verify|verify} messages.
         * @param message AIThreadInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IAIThreadInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified AIThreadInfo message, length delimited. Does not implicitly {@link AICommon.AIThreadInfo.verify|verify} messages.
         * @param message AIThreadInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IAIThreadInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a AIThreadInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns AIThreadInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIThreadInfo;

        /**
         * Decodes a AIThreadInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns AIThreadInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIThreadInfo;

        /**
         * Verifies a AIThreadInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a AIThreadInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns AIThreadInfo
         */
        public static fromObject(object: { [k: string]: any }): AICommon.AIThreadInfo;

        /**
         * Creates a plain object from a AIThreadInfo message. Also converts values to other types if specified.
         * @param message AIThreadInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.AIThreadInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this AIThreadInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for AIThreadInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace AIThreadInfo {

        /** Properties of a AIThreadClientInfo. */
        interface IAIThreadClientInfo {

            /** AIThreadClientInfo type */
            type?: (AICommon.AIThreadInfo.AIThreadClientInfo.AIThreadType|null);
        }

        /** Represents a AIThreadClientInfo. */
        class AIThreadClientInfo implements IAIThreadClientInfo {

            /**
             * Constructs a new AIThreadClientInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.AIThreadInfo.IAIThreadClientInfo);

            /** AIThreadClientInfo type. */
            public type: AICommon.AIThreadInfo.AIThreadClientInfo.AIThreadType;

            /**
             * Creates a new AIThreadClientInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AIThreadClientInfo instance
             */
            public static create(properties?: AICommon.AIThreadInfo.IAIThreadClientInfo): AICommon.AIThreadInfo.AIThreadClientInfo;

            /**
             * Encodes the specified AIThreadClientInfo message. Does not implicitly {@link AICommon.AIThreadInfo.AIThreadClientInfo.verify|verify} messages.
             * @param message AIThreadClientInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.AIThreadInfo.IAIThreadClientInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AIThreadClientInfo message, length delimited. Does not implicitly {@link AICommon.AIThreadInfo.AIThreadClientInfo.verify|verify} messages.
             * @param message AIThreadClientInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.AIThreadInfo.IAIThreadClientInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a AIThreadClientInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AIThreadClientInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIThreadInfo.AIThreadClientInfo;

            /**
             * Decodes a AIThreadClientInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AIThreadClientInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIThreadInfo.AIThreadClientInfo;

            /**
             * Verifies a AIThreadClientInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a AIThreadClientInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AIThreadClientInfo
             */
            public static fromObject(object: { [k: string]: any }): AICommon.AIThreadInfo.AIThreadClientInfo;

            /**
             * Creates a plain object from a AIThreadClientInfo message. Also converts values to other types if specified.
             * @param message AIThreadClientInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.AIThreadInfo.AIThreadClientInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AIThreadClientInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AIThreadClientInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace AIThreadClientInfo {

            /** AIThreadType enum. */
            enum AIThreadType {
                UNKNOWN = 0,
                DEFAULT = 1,
                INCOGNITO = 2
            }
        }

        /** Properties of a AIThreadServerInfo. */
        interface IAIThreadServerInfo {

            /** AIThreadServerInfo title */
            title?: (string|null);
        }

        /** Represents a AIThreadServerInfo. */
        class AIThreadServerInfo implements IAIThreadServerInfo {

            /**
             * Constructs a new AIThreadServerInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.AIThreadInfo.IAIThreadServerInfo);

            /** AIThreadServerInfo title. */
            public title: string;

            /**
             * Creates a new AIThreadServerInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AIThreadServerInfo instance
             */
            public static create(properties?: AICommon.AIThreadInfo.IAIThreadServerInfo): AICommon.AIThreadInfo.AIThreadServerInfo;

            /**
             * Encodes the specified AIThreadServerInfo message. Does not implicitly {@link AICommon.AIThreadInfo.AIThreadServerInfo.verify|verify} messages.
             * @param message AIThreadServerInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.AIThreadInfo.IAIThreadServerInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AIThreadServerInfo message, length delimited. Does not implicitly {@link AICommon.AIThreadInfo.AIThreadServerInfo.verify|verify} messages.
             * @param message AIThreadServerInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.AIThreadInfo.IAIThreadServerInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a AIThreadServerInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AIThreadServerInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.AIThreadInfo.AIThreadServerInfo;

            /**
             * Decodes a AIThreadServerInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AIThreadServerInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.AIThreadInfo.AIThreadServerInfo;

            /**
             * Verifies a AIThreadServerInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a AIThreadServerInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AIThreadServerInfo
             */
            public static fromObject(object: { [k: string]: any }): AICommon.AIThreadInfo.AIThreadServerInfo;

            /**
             * Creates a plain object from a AIThreadServerInfo message. Also converts values to other types if specified.
             * @param message AIThreadServerInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.AIThreadInfo.AIThreadServerInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AIThreadServerInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AIThreadServerInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Properties of a BotUnifiedResponseMutation. */
    interface IBotUnifiedResponseMutation {

        /** BotUnifiedResponseMutation sbsMetadata */
        sbsMetadata?: (AICommon.BotUnifiedResponseMutation.ISideBySideMetadata|null);

        /** BotUnifiedResponseMutation mediaDetailsMetadataList */
        mediaDetailsMetadataList?: (AICommon.BotUnifiedResponseMutation.IMediaDetailsMetadata[]|null);
    }

    /** Represents a BotUnifiedResponseMutation. */
    class BotUnifiedResponseMutation implements IBotUnifiedResponseMutation {

        /**
         * Constructs a new BotUnifiedResponseMutation.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotUnifiedResponseMutation);

        /** BotUnifiedResponseMutation sbsMetadata. */
        public sbsMetadata?: (AICommon.BotUnifiedResponseMutation.ISideBySideMetadata|null);

        /** BotUnifiedResponseMutation mediaDetailsMetadataList. */
        public mediaDetailsMetadataList: AICommon.BotUnifiedResponseMutation.IMediaDetailsMetadata[];

        /**
         * Creates a new BotUnifiedResponseMutation instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotUnifiedResponseMutation instance
         */
        public static create(properties?: AICommon.IBotUnifiedResponseMutation): AICommon.BotUnifiedResponseMutation;

        /**
         * Encodes the specified BotUnifiedResponseMutation message. Does not implicitly {@link AICommon.BotUnifiedResponseMutation.verify|verify} messages.
         * @param message BotUnifiedResponseMutation message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotUnifiedResponseMutation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotUnifiedResponseMutation message, length delimited. Does not implicitly {@link AICommon.BotUnifiedResponseMutation.verify|verify} messages.
         * @param message BotUnifiedResponseMutation message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotUnifiedResponseMutation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotUnifiedResponseMutation message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotUnifiedResponseMutation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotUnifiedResponseMutation;

        /**
         * Decodes a BotUnifiedResponseMutation message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotUnifiedResponseMutation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotUnifiedResponseMutation;

        /**
         * Verifies a BotUnifiedResponseMutation message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotUnifiedResponseMutation message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotUnifiedResponseMutation
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotUnifiedResponseMutation;

        /**
         * Creates a plain object from a BotUnifiedResponseMutation message. Also converts values to other types if specified.
         * @param message BotUnifiedResponseMutation
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotUnifiedResponseMutation, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotUnifiedResponseMutation to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotUnifiedResponseMutation
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotUnifiedResponseMutation {

        /** Properties of a MediaDetailsMetadata. */
        interface IMediaDetailsMetadata {

            /** MediaDetailsMetadata id */
            id?: (string|null);

            /** MediaDetailsMetadata highResMedia */
            highResMedia?: (AICommon.IBotMediaMetadata|null);

            /** MediaDetailsMetadata previewMedia */
            previewMedia?: (AICommon.IBotMediaMetadata|null);
        }

        /** Represents a MediaDetailsMetadata. */
        class MediaDetailsMetadata implements IMediaDetailsMetadata {

            /**
             * Constructs a new MediaDetailsMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.BotUnifiedResponseMutation.IMediaDetailsMetadata);

            /** MediaDetailsMetadata id. */
            public id: string;

            /** MediaDetailsMetadata highResMedia. */
            public highResMedia?: (AICommon.IBotMediaMetadata|null);

            /** MediaDetailsMetadata previewMedia. */
            public previewMedia?: (AICommon.IBotMediaMetadata|null);

            /**
             * Creates a new MediaDetailsMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MediaDetailsMetadata instance
             */
            public static create(properties?: AICommon.BotUnifiedResponseMutation.IMediaDetailsMetadata): AICommon.BotUnifiedResponseMutation.MediaDetailsMetadata;

            /**
             * Encodes the specified MediaDetailsMetadata message. Does not implicitly {@link AICommon.BotUnifiedResponseMutation.MediaDetailsMetadata.verify|verify} messages.
             * @param message MediaDetailsMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.BotUnifiedResponseMutation.IMediaDetailsMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MediaDetailsMetadata message, length delimited. Does not implicitly {@link AICommon.BotUnifiedResponseMutation.MediaDetailsMetadata.verify|verify} messages.
             * @param message MediaDetailsMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.BotUnifiedResponseMutation.IMediaDetailsMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MediaDetailsMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MediaDetailsMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotUnifiedResponseMutation.MediaDetailsMetadata;

            /**
             * Decodes a MediaDetailsMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MediaDetailsMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotUnifiedResponseMutation.MediaDetailsMetadata;

            /**
             * Verifies a MediaDetailsMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MediaDetailsMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MediaDetailsMetadata
             */
            public static fromObject(object: { [k: string]: any }): AICommon.BotUnifiedResponseMutation.MediaDetailsMetadata;

            /**
             * Creates a plain object from a MediaDetailsMetadata message. Also converts values to other types if specified.
             * @param message MediaDetailsMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.BotUnifiedResponseMutation.MediaDetailsMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MediaDetailsMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MediaDetailsMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a SideBySideMetadata. */
        interface ISideBySideMetadata {

            /** SideBySideMetadata primaryResponseId */
            primaryResponseId?: (string|null);
        }

        /** Represents a SideBySideMetadata. */
        class SideBySideMetadata implements ISideBySideMetadata {

            /**
             * Constructs a new SideBySideMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.BotUnifiedResponseMutation.ISideBySideMetadata);

            /** SideBySideMetadata primaryResponseId. */
            public primaryResponseId: string;

            /**
             * Creates a new SideBySideMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns SideBySideMetadata instance
             */
            public static create(properties?: AICommon.BotUnifiedResponseMutation.ISideBySideMetadata): AICommon.BotUnifiedResponseMutation.SideBySideMetadata;

            /**
             * Encodes the specified SideBySideMetadata message. Does not implicitly {@link AICommon.BotUnifiedResponseMutation.SideBySideMetadata.verify|verify} messages.
             * @param message SideBySideMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.BotUnifiedResponseMutation.ISideBySideMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified SideBySideMetadata message, length delimited. Does not implicitly {@link AICommon.BotUnifiedResponseMutation.SideBySideMetadata.verify|verify} messages.
             * @param message SideBySideMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.BotUnifiedResponseMutation.ISideBySideMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a SideBySideMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns SideBySideMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotUnifiedResponseMutation.SideBySideMetadata;

            /**
             * Decodes a SideBySideMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns SideBySideMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotUnifiedResponseMutation.SideBySideMetadata;

            /**
             * Verifies a SideBySideMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a SideBySideMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns SideBySideMetadata
             */
            public static fromObject(object: { [k: string]: any }): AICommon.BotUnifiedResponseMutation.SideBySideMetadata;

            /**
             * Creates a plain object from a SideBySideMetadata message. Also converts values to other types if specified.
             * @param message SideBySideMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.BotUnifiedResponseMutation.SideBySideMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this SideBySideMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for SideBySideMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Properties of a BotMessageOrigin. */
    interface IBotMessageOrigin {

        /** BotMessageOrigin type */
        type?: (AICommon.BotMessageOrigin.BotMessageOriginType|null);
    }

    /** Represents a BotMessageOrigin. */
    class BotMessageOrigin implements IBotMessageOrigin {

        /**
         * Constructs a new BotMessageOrigin.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotMessageOrigin);

        /** BotMessageOrigin type. */
        public type: AICommon.BotMessageOrigin.BotMessageOriginType;

        /**
         * Creates a new BotMessageOrigin instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotMessageOrigin instance
         */
        public static create(properties?: AICommon.IBotMessageOrigin): AICommon.BotMessageOrigin;

        /**
         * Encodes the specified BotMessageOrigin message. Does not implicitly {@link AICommon.BotMessageOrigin.verify|verify} messages.
         * @param message BotMessageOrigin message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotMessageOrigin, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotMessageOrigin message, length delimited. Does not implicitly {@link AICommon.BotMessageOrigin.verify|verify} messages.
         * @param message BotMessageOrigin message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotMessageOrigin, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotMessageOrigin message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotMessageOrigin
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotMessageOrigin;

        /**
         * Decodes a BotMessageOrigin message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotMessageOrigin
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotMessageOrigin;

        /**
         * Verifies a BotMessageOrigin message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotMessageOrigin message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotMessageOrigin
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotMessageOrigin;

        /**
         * Creates a plain object from a BotMessageOrigin message. Also converts values to other types if specified.
         * @param message BotMessageOrigin
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotMessageOrigin, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotMessageOrigin to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotMessageOrigin
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotMessageOrigin {

        /** BotMessageOriginType enum. */
        enum BotMessageOriginType {
            BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED = 0
        }
    }

    /** Properties of a BotMessageOriginMetadata. */
    interface IBotMessageOriginMetadata {

        /** BotMessageOriginMetadata origins */
        origins?: (AICommon.IBotMessageOrigin[]|null);
    }

    /** Represents a BotMessageOriginMetadata. */
    class BotMessageOriginMetadata implements IBotMessageOriginMetadata {

        /**
         * Constructs a new BotMessageOriginMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotMessageOriginMetadata);

        /** BotMessageOriginMetadata origins. */
        public origins: AICommon.IBotMessageOrigin[];

        /**
         * Creates a new BotMessageOriginMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotMessageOriginMetadata instance
         */
        public static create(properties?: AICommon.IBotMessageOriginMetadata): AICommon.BotMessageOriginMetadata;

        /**
         * Encodes the specified BotMessageOriginMetadata message. Does not implicitly {@link AICommon.BotMessageOriginMetadata.verify|verify} messages.
         * @param message BotMessageOriginMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotMessageOriginMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotMessageOriginMetadata message, length delimited. Does not implicitly {@link AICommon.BotMessageOriginMetadata.verify|verify} messages.
         * @param message BotMessageOriginMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotMessageOriginMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotMessageOriginMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotMessageOriginMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotMessageOriginMetadata;

        /**
         * Decodes a BotMessageOriginMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotMessageOriginMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotMessageOriginMetadata;

        /**
         * Verifies a BotMessageOriginMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotMessageOriginMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotMessageOriginMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotMessageOriginMetadata;

        /**
         * Creates a plain object from a BotMessageOriginMetadata message. Also converts values to other types if specified.
         * @param message BotMessageOriginMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotMessageOriginMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotMessageOriginMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotMessageOriginMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an InThreadSurveyMetadata. */
    interface IInThreadSurveyMetadata {

        /** InThreadSurveyMetadata tessaSessionId */
        tessaSessionId?: (string|null);

        /** InThreadSurveyMetadata simonSessionId */
        simonSessionId?: (string|null);

        /** InThreadSurveyMetadata simonSurveyId */
        simonSurveyId?: (string|null);

        /** InThreadSurveyMetadata tessaRootId */
        tessaRootId?: (string|null);

        /** InThreadSurveyMetadata requestId */
        requestId?: (string|null);

        /** InThreadSurveyMetadata tessaEvent */
        tessaEvent?: (string|null);

        /** InThreadSurveyMetadata invitationHeaderText */
        invitationHeaderText?: (string|null);

        /** InThreadSurveyMetadata invitationBodyText */
        invitationBodyText?: (string|null);

        /** InThreadSurveyMetadata invitationCtaText */
        invitationCtaText?: (string|null);

        /** InThreadSurveyMetadata invitationCtaUrl */
        invitationCtaUrl?: (string|null);

        /** InThreadSurveyMetadata surveyTitle */
        surveyTitle?: (string|null);

        /** InThreadSurveyMetadata questions */
        questions?: (AICommon.InThreadSurveyMetadata.IInThreadSurveyQuestion[]|null);

        /** InThreadSurveyMetadata surveyContinueButtonText */
        surveyContinueButtonText?: (string|null);

        /** InThreadSurveyMetadata surveySubmitButtonText */
        surveySubmitButtonText?: (string|null);

        /** InThreadSurveyMetadata privacyStatementFull */
        privacyStatementFull?: (string|null);

        /** InThreadSurveyMetadata privacyStatementParts */
        privacyStatementParts?: (AICommon.InThreadSurveyMetadata.IInThreadSurveyPrivacyStatementPart[]|null);

        /** InThreadSurveyMetadata feedbackToastText */
        feedbackToastText?: (string|null);
    }

    /** Represents an InThreadSurveyMetadata. */
    class InThreadSurveyMetadata implements IInThreadSurveyMetadata {

        /**
         * Constructs a new InThreadSurveyMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IInThreadSurveyMetadata);

        /** InThreadSurveyMetadata tessaSessionId. */
        public tessaSessionId: string;

        /** InThreadSurveyMetadata simonSessionId. */
        public simonSessionId: string;

        /** InThreadSurveyMetadata simonSurveyId. */
        public simonSurveyId: string;

        /** InThreadSurveyMetadata tessaRootId. */
        public tessaRootId: string;

        /** InThreadSurveyMetadata requestId. */
        public requestId: string;

        /** InThreadSurveyMetadata tessaEvent. */
        public tessaEvent: string;

        /** InThreadSurveyMetadata invitationHeaderText. */
        public invitationHeaderText: string;

        /** InThreadSurveyMetadata invitationBodyText. */
        public invitationBodyText: string;

        /** InThreadSurveyMetadata invitationCtaText. */
        public invitationCtaText: string;

        /** InThreadSurveyMetadata invitationCtaUrl. */
        public invitationCtaUrl: string;

        /** InThreadSurveyMetadata surveyTitle. */
        public surveyTitle: string;

        /** InThreadSurveyMetadata questions. */
        public questions: AICommon.InThreadSurveyMetadata.IInThreadSurveyQuestion[];

        /** InThreadSurveyMetadata surveyContinueButtonText. */
        public surveyContinueButtonText: string;

        /** InThreadSurveyMetadata surveySubmitButtonText. */
        public surveySubmitButtonText: string;

        /** InThreadSurveyMetadata privacyStatementFull. */
        public privacyStatementFull: string;

        /** InThreadSurveyMetadata privacyStatementParts. */
        public privacyStatementParts: AICommon.InThreadSurveyMetadata.IInThreadSurveyPrivacyStatementPart[];

        /** InThreadSurveyMetadata feedbackToastText. */
        public feedbackToastText: string;

        /**
         * Creates a new InThreadSurveyMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns InThreadSurveyMetadata instance
         */
        public static create(properties?: AICommon.IInThreadSurveyMetadata): AICommon.InThreadSurveyMetadata;

        /**
         * Encodes the specified InThreadSurveyMetadata message. Does not implicitly {@link AICommon.InThreadSurveyMetadata.verify|verify} messages.
         * @param message InThreadSurveyMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IInThreadSurveyMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified InThreadSurveyMetadata message, length delimited. Does not implicitly {@link AICommon.InThreadSurveyMetadata.verify|verify} messages.
         * @param message InThreadSurveyMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IInThreadSurveyMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an InThreadSurveyMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns InThreadSurveyMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.InThreadSurveyMetadata;

        /**
         * Decodes an InThreadSurveyMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns InThreadSurveyMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.InThreadSurveyMetadata;

        /**
         * Verifies an InThreadSurveyMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an InThreadSurveyMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns InThreadSurveyMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.InThreadSurveyMetadata;

        /**
         * Creates a plain object from an InThreadSurveyMetadata message. Also converts values to other types if specified.
         * @param message InThreadSurveyMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.InThreadSurveyMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this InThreadSurveyMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for InThreadSurveyMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace InThreadSurveyMetadata {

        /** Properties of an InThreadSurveyOption. */
        interface IInThreadSurveyOption {

            /** InThreadSurveyOption stringValue */
            stringValue?: (string|null);

            /** InThreadSurveyOption numericValue */
            numericValue?: (number|null);

            /** InThreadSurveyOption textTranslated */
            textTranslated?: (string|null);
        }

        /** Represents an InThreadSurveyOption. */
        class InThreadSurveyOption implements IInThreadSurveyOption {

            /**
             * Constructs a new InThreadSurveyOption.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.InThreadSurveyMetadata.IInThreadSurveyOption);

            /** InThreadSurveyOption stringValue. */
            public stringValue: string;

            /** InThreadSurveyOption numericValue. */
            public numericValue: number;

            /** InThreadSurveyOption textTranslated. */
            public textTranslated: string;

            /**
             * Creates a new InThreadSurveyOption instance using the specified properties.
             * @param [properties] Properties to set
             * @returns InThreadSurveyOption instance
             */
            public static create(properties?: AICommon.InThreadSurveyMetadata.IInThreadSurveyOption): AICommon.InThreadSurveyMetadata.InThreadSurveyOption;

            /**
             * Encodes the specified InThreadSurveyOption message. Does not implicitly {@link AICommon.InThreadSurveyMetadata.InThreadSurveyOption.verify|verify} messages.
             * @param message InThreadSurveyOption message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.InThreadSurveyMetadata.IInThreadSurveyOption, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified InThreadSurveyOption message, length delimited. Does not implicitly {@link AICommon.InThreadSurveyMetadata.InThreadSurveyOption.verify|verify} messages.
             * @param message InThreadSurveyOption message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.InThreadSurveyMetadata.IInThreadSurveyOption, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an InThreadSurveyOption message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns InThreadSurveyOption
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.InThreadSurveyMetadata.InThreadSurveyOption;

            /**
             * Decodes an InThreadSurveyOption message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns InThreadSurveyOption
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.InThreadSurveyMetadata.InThreadSurveyOption;

            /**
             * Verifies an InThreadSurveyOption message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an InThreadSurveyOption message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns InThreadSurveyOption
             */
            public static fromObject(object: { [k: string]: any }): AICommon.InThreadSurveyMetadata.InThreadSurveyOption;

            /**
             * Creates a plain object from an InThreadSurveyOption message. Also converts values to other types if specified.
             * @param message InThreadSurveyOption
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.InThreadSurveyMetadata.InThreadSurveyOption, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this InThreadSurveyOption to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for InThreadSurveyOption
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an InThreadSurveyPrivacyStatementPart. */
        interface IInThreadSurveyPrivacyStatementPart {

            /** InThreadSurveyPrivacyStatementPart text */
            text?: (string|null);

            /** InThreadSurveyPrivacyStatementPart url */
            url?: (string|null);
        }

        /** Represents an InThreadSurveyPrivacyStatementPart. */
        class InThreadSurveyPrivacyStatementPart implements IInThreadSurveyPrivacyStatementPart {

            /**
             * Constructs a new InThreadSurveyPrivacyStatementPart.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.InThreadSurveyMetadata.IInThreadSurveyPrivacyStatementPart);

            /** InThreadSurveyPrivacyStatementPart text. */
            public text: string;

            /** InThreadSurveyPrivacyStatementPart url. */
            public url: string;

            /**
             * Creates a new InThreadSurveyPrivacyStatementPart instance using the specified properties.
             * @param [properties] Properties to set
             * @returns InThreadSurveyPrivacyStatementPart instance
             */
            public static create(properties?: AICommon.InThreadSurveyMetadata.IInThreadSurveyPrivacyStatementPart): AICommon.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart;

            /**
             * Encodes the specified InThreadSurveyPrivacyStatementPart message. Does not implicitly {@link AICommon.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart.verify|verify} messages.
             * @param message InThreadSurveyPrivacyStatementPart message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.InThreadSurveyMetadata.IInThreadSurveyPrivacyStatementPart, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified InThreadSurveyPrivacyStatementPart message, length delimited. Does not implicitly {@link AICommon.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart.verify|verify} messages.
             * @param message InThreadSurveyPrivacyStatementPart message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.InThreadSurveyMetadata.IInThreadSurveyPrivacyStatementPart, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an InThreadSurveyPrivacyStatementPart message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns InThreadSurveyPrivacyStatementPart
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart;

            /**
             * Decodes an InThreadSurveyPrivacyStatementPart message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns InThreadSurveyPrivacyStatementPart
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart;

            /**
             * Verifies an InThreadSurveyPrivacyStatementPart message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an InThreadSurveyPrivacyStatementPart message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns InThreadSurveyPrivacyStatementPart
             */
            public static fromObject(object: { [k: string]: any }): AICommon.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart;

            /**
             * Creates a plain object from an InThreadSurveyPrivacyStatementPart message. Also converts values to other types if specified.
             * @param message InThreadSurveyPrivacyStatementPart
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this InThreadSurveyPrivacyStatementPart to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for InThreadSurveyPrivacyStatementPart
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an InThreadSurveyQuestion. */
        interface IInThreadSurveyQuestion {

            /** InThreadSurveyQuestion questionText */
            questionText?: (string|null);

            /** InThreadSurveyQuestion questionId */
            questionId?: (string|null);

            /** InThreadSurveyQuestion questionOptions */
            questionOptions?: (AICommon.InThreadSurveyMetadata.IInThreadSurveyOption[]|null);
        }

        /** Represents an InThreadSurveyQuestion. */
        class InThreadSurveyQuestion implements IInThreadSurveyQuestion {

            /**
             * Constructs a new InThreadSurveyQuestion.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.InThreadSurveyMetadata.IInThreadSurveyQuestion);

            /** InThreadSurveyQuestion questionText. */
            public questionText: string;

            /** InThreadSurveyQuestion questionId. */
            public questionId: string;

            /** InThreadSurveyQuestion questionOptions. */
            public questionOptions: AICommon.InThreadSurveyMetadata.IInThreadSurveyOption[];

            /**
             * Creates a new InThreadSurveyQuestion instance using the specified properties.
             * @param [properties] Properties to set
             * @returns InThreadSurveyQuestion instance
             */
            public static create(properties?: AICommon.InThreadSurveyMetadata.IInThreadSurveyQuestion): AICommon.InThreadSurveyMetadata.InThreadSurveyQuestion;

            /**
             * Encodes the specified InThreadSurveyQuestion message. Does not implicitly {@link AICommon.InThreadSurveyMetadata.InThreadSurveyQuestion.verify|verify} messages.
             * @param message InThreadSurveyQuestion message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.InThreadSurveyMetadata.IInThreadSurveyQuestion, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified InThreadSurveyQuestion message, length delimited. Does not implicitly {@link AICommon.InThreadSurveyMetadata.InThreadSurveyQuestion.verify|verify} messages.
             * @param message InThreadSurveyQuestion message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.InThreadSurveyMetadata.IInThreadSurveyQuestion, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an InThreadSurveyQuestion message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns InThreadSurveyQuestion
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.InThreadSurveyMetadata.InThreadSurveyQuestion;

            /**
             * Decodes an InThreadSurveyQuestion message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns InThreadSurveyQuestion
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.InThreadSurveyMetadata.InThreadSurveyQuestion;

            /**
             * Verifies an InThreadSurveyQuestion message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an InThreadSurveyQuestion message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns InThreadSurveyQuestion
             */
            public static fromObject(object: { [k: string]: any }): AICommon.InThreadSurveyMetadata.InThreadSurveyQuestion;

            /**
             * Creates a plain object from an InThreadSurveyQuestion message. Also converts values to other types if specified.
             * @param message InThreadSurveyQuestion
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.InThreadSurveyMetadata.InThreadSurveyQuestion, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this InThreadSurveyQuestion to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for InThreadSurveyQuestion
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Properties of a BotSourcesMetadata. */
    interface IBotSourcesMetadata {

        /** BotSourcesMetadata sources */
        sources?: (AICommon.BotSourcesMetadata.IBotSourceItem[]|null);
    }

    /** Represents a BotSourcesMetadata. */
    class BotSourcesMetadata implements IBotSourcesMetadata {

        /**
         * Constructs a new BotSourcesMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotSourcesMetadata);

        /** BotSourcesMetadata sources. */
        public sources: AICommon.BotSourcesMetadata.IBotSourceItem[];

        /**
         * Creates a new BotSourcesMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotSourcesMetadata instance
         */
        public static create(properties?: AICommon.IBotSourcesMetadata): AICommon.BotSourcesMetadata;

        /**
         * Encodes the specified BotSourcesMetadata message. Does not implicitly {@link AICommon.BotSourcesMetadata.verify|verify} messages.
         * @param message BotSourcesMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotSourcesMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotSourcesMetadata message, length delimited. Does not implicitly {@link AICommon.BotSourcesMetadata.verify|verify} messages.
         * @param message BotSourcesMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotSourcesMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotSourcesMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotSourcesMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotSourcesMetadata;

        /**
         * Decodes a BotSourcesMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotSourcesMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotSourcesMetadata;

        /**
         * Verifies a BotSourcesMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotSourcesMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotSourcesMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotSourcesMetadata;

        /**
         * Creates a plain object from a BotSourcesMetadata message. Also converts values to other types if specified.
         * @param message BotSourcesMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotSourcesMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotSourcesMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotSourcesMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotSourcesMetadata {

        /** Properties of a BotSourceItem. */
        interface IBotSourceItem {

            /** BotSourceItem provider */
            provider?: (AICommon.BotSourcesMetadata.BotSourceItem.SourceProvider|null);

            /** BotSourceItem thumbnailCdnUrl */
            thumbnailCdnUrl?: (string|null);

            /** BotSourceItem sourceProviderUrl */
            sourceProviderUrl?: (string|null);

            /** BotSourceItem sourceQuery */
            sourceQuery?: (string|null);

            /** BotSourceItem faviconCdnUrl */
            faviconCdnUrl?: (string|null);

            /** BotSourceItem citationNumber */
            citationNumber?: (number|null);

            /** BotSourceItem sourceTitle */
            sourceTitle?: (string|null);
        }

        /** Represents a BotSourceItem. */
        class BotSourceItem implements IBotSourceItem {

            /**
             * Constructs a new BotSourceItem.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.BotSourcesMetadata.IBotSourceItem);

            /** BotSourceItem provider. */
            public provider: AICommon.BotSourcesMetadata.BotSourceItem.SourceProvider;

            /** BotSourceItem thumbnailCdnUrl. */
            public thumbnailCdnUrl: string;

            /** BotSourceItem sourceProviderUrl. */
            public sourceProviderUrl: string;

            /** BotSourceItem sourceQuery. */
            public sourceQuery: string;

            /** BotSourceItem faviconCdnUrl. */
            public faviconCdnUrl: string;

            /** BotSourceItem citationNumber. */
            public citationNumber: number;

            /** BotSourceItem sourceTitle. */
            public sourceTitle: string;

            /**
             * Creates a new BotSourceItem instance using the specified properties.
             * @param [properties] Properties to set
             * @returns BotSourceItem instance
             */
            public static create(properties?: AICommon.BotSourcesMetadata.IBotSourceItem): AICommon.BotSourcesMetadata.BotSourceItem;

            /**
             * Encodes the specified BotSourceItem message. Does not implicitly {@link AICommon.BotSourcesMetadata.BotSourceItem.verify|verify} messages.
             * @param message BotSourceItem message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.BotSourcesMetadata.IBotSourceItem, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified BotSourceItem message, length delimited. Does not implicitly {@link AICommon.BotSourcesMetadata.BotSourceItem.verify|verify} messages.
             * @param message BotSourceItem message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.BotSourcesMetadata.IBotSourceItem, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a BotSourceItem message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns BotSourceItem
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotSourcesMetadata.BotSourceItem;

            /**
             * Decodes a BotSourceItem message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns BotSourceItem
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotSourcesMetadata.BotSourceItem;

            /**
             * Verifies a BotSourceItem message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a BotSourceItem message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns BotSourceItem
             */
            public static fromObject(object: { [k: string]: any }): AICommon.BotSourcesMetadata.BotSourceItem;

            /**
             * Creates a plain object from a BotSourceItem message. Also converts values to other types if specified.
             * @param message BotSourceItem
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.BotSourcesMetadata.BotSourceItem, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this BotSourceItem to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for BotSourceItem
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace BotSourceItem {

            /** SourceProvider enum. */
            enum SourceProvider {
                UNKNOWN = 0,
                BING = 1,
                GOOGLE = 2,
                SUPPORT = 3,
                OTHER = 4
            }
        }
    }

    /** Properties of a BotAgeCollectionMetadata. */
    interface IBotAgeCollectionMetadata {

        /** BotAgeCollectionMetadata ageCollectionEligible */
        ageCollectionEligible?: (boolean|null);

        /** BotAgeCollectionMetadata shouldTriggerAgeCollectionOnClient */
        shouldTriggerAgeCollectionOnClient?: (boolean|null);
    }

    /** Represents a BotAgeCollectionMetadata. */
    class BotAgeCollectionMetadata implements IBotAgeCollectionMetadata {

        /**
         * Constructs a new BotAgeCollectionMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotAgeCollectionMetadata);

        /** BotAgeCollectionMetadata ageCollectionEligible. */
        public ageCollectionEligible: boolean;

        /** BotAgeCollectionMetadata shouldTriggerAgeCollectionOnClient. */
        public shouldTriggerAgeCollectionOnClient: boolean;

        /**
         * Creates a new BotAgeCollectionMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotAgeCollectionMetadata instance
         */
        public static create(properties?: AICommon.IBotAgeCollectionMetadata): AICommon.BotAgeCollectionMetadata;

        /**
         * Encodes the specified BotAgeCollectionMetadata message. Does not implicitly {@link AICommon.BotAgeCollectionMetadata.verify|verify} messages.
         * @param message BotAgeCollectionMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotAgeCollectionMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotAgeCollectionMetadata message, length delimited. Does not implicitly {@link AICommon.BotAgeCollectionMetadata.verify|verify} messages.
         * @param message BotAgeCollectionMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotAgeCollectionMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotAgeCollectionMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotAgeCollectionMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotAgeCollectionMetadata;

        /**
         * Decodes a BotAgeCollectionMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotAgeCollectionMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotAgeCollectionMetadata;

        /**
         * Verifies a BotAgeCollectionMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotAgeCollectionMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotAgeCollectionMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotAgeCollectionMetadata;

        /**
         * Creates a plain object from a BotAgeCollectionMetadata message. Also converts values to other types if specified.
         * @param message BotAgeCollectionMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotAgeCollectionMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotAgeCollectionMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotAgeCollectionMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotImagineMetadata. */
    interface IBotImagineMetadata {

        /** BotImagineMetadata imagineType */
        imagineType?: (AICommon.BotImagineMetadata.ImagineType|null);
    }

    /** Represents a BotImagineMetadata. */
    class BotImagineMetadata implements IBotImagineMetadata {

        /**
         * Constructs a new BotImagineMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotImagineMetadata);

        /** BotImagineMetadata imagineType. */
        public imagineType: AICommon.BotImagineMetadata.ImagineType;

        /**
         * Creates a new BotImagineMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotImagineMetadata instance
         */
        public static create(properties?: AICommon.IBotImagineMetadata): AICommon.BotImagineMetadata;

        /**
         * Encodes the specified BotImagineMetadata message. Does not implicitly {@link AICommon.BotImagineMetadata.verify|verify} messages.
         * @param message BotImagineMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotImagineMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotImagineMetadata message, length delimited. Does not implicitly {@link AICommon.BotImagineMetadata.verify|verify} messages.
         * @param message BotImagineMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotImagineMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotImagineMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotImagineMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotImagineMetadata;

        /**
         * Decodes a BotImagineMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotImagineMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotImagineMetadata;

        /**
         * Verifies a BotImagineMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotImagineMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotImagineMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotImagineMetadata;

        /**
         * Creates a plain object from a BotImagineMetadata message. Also converts values to other types if specified.
         * @param message BotImagineMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotImagineMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotImagineMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotImagineMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotImagineMetadata {

        /** ImagineType enum. */
        enum ImagineType {
            UNKNOWN = 0,
            IMAGINE = 1,
            MEMU = 2,
            FLASH = 3,
            EDIT = 4
        }
    }

    /** Properties of a BotQuotaMetadata. */
    interface IBotQuotaMetadata {

        /** BotQuotaMetadata botFeatureQuotaMetadata */
        botFeatureQuotaMetadata?: (AICommon.BotQuotaMetadata.IBotFeatureQuotaMetadata[]|null);
    }

    /** Represents a BotQuotaMetadata. */
    class BotQuotaMetadata implements IBotQuotaMetadata {

        /**
         * Constructs a new BotQuotaMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotQuotaMetadata);

        /** BotQuotaMetadata botFeatureQuotaMetadata. */
        public botFeatureQuotaMetadata: AICommon.BotQuotaMetadata.IBotFeatureQuotaMetadata[];

        /**
         * Creates a new BotQuotaMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotQuotaMetadata instance
         */
        public static create(properties?: AICommon.IBotQuotaMetadata): AICommon.BotQuotaMetadata;

        /**
         * Encodes the specified BotQuotaMetadata message. Does not implicitly {@link AICommon.BotQuotaMetadata.verify|verify} messages.
         * @param message BotQuotaMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotQuotaMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotQuotaMetadata message, length delimited. Does not implicitly {@link AICommon.BotQuotaMetadata.verify|verify} messages.
         * @param message BotQuotaMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotQuotaMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotQuotaMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotQuotaMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotQuotaMetadata;

        /**
         * Decodes a BotQuotaMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotQuotaMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotQuotaMetadata;

        /**
         * Verifies a BotQuotaMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotQuotaMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotQuotaMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotQuotaMetadata;

        /**
         * Creates a plain object from a BotQuotaMetadata message. Also converts values to other types if specified.
         * @param message BotQuotaMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotQuotaMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotQuotaMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotQuotaMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotQuotaMetadata {

        /** Properties of a BotFeatureQuotaMetadata. */
        interface IBotFeatureQuotaMetadata {

            /** BotFeatureQuotaMetadata featureType */
            featureType?: (AICommon.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureType|null);

            /** BotFeatureQuotaMetadata remainingQuota */
            remainingQuota?: (number|null);

            /** BotFeatureQuotaMetadata expirationTimestamp */
            expirationTimestamp?: (number|Long|null);
        }

        /** Represents a BotFeatureQuotaMetadata. */
        class BotFeatureQuotaMetadata implements IBotFeatureQuotaMetadata {

            /**
             * Constructs a new BotFeatureQuotaMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.BotQuotaMetadata.IBotFeatureQuotaMetadata);

            /** BotFeatureQuotaMetadata featureType. */
            public featureType: AICommon.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureType;

            /** BotFeatureQuotaMetadata remainingQuota. */
            public remainingQuota: number;

            /** BotFeatureQuotaMetadata expirationTimestamp. */
            public expirationTimestamp: (number|Long);

            /**
             * Creates a new BotFeatureQuotaMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns BotFeatureQuotaMetadata instance
             */
            public static create(properties?: AICommon.BotQuotaMetadata.IBotFeatureQuotaMetadata): AICommon.BotQuotaMetadata.BotFeatureQuotaMetadata;

            /**
             * Encodes the specified BotFeatureQuotaMetadata message. Does not implicitly {@link AICommon.BotQuotaMetadata.BotFeatureQuotaMetadata.verify|verify} messages.
             * @param message BotFeatureQuotaMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.BotQuotaMetadata.IBotFeatureQuotaMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified BotFeatureQuotaMetadata message, length delimited. Does not implicitly {@link AICommon.BotQuotaMetadata.BotFeatureQuotaMetadata.verify|verify} messages.
             * @param message BotFeatureQuotaMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.BotQuotaMetadata.IBotFeatureQuotaMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a BotFeatureQuotaMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns BotFeatureQuotaMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotQuotaMetadata.BotFeatureQuotaMetadata;

            /**
             * Decodes a BotFeatureQuotaMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns BotFeatureQuotaMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotQuotaMetadata.BotFeatureQuotaMetadata;

            /**
             * Verifies a BotFeatureQuotaMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a BotFeatureQuotaMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns BotFeatureQuotaMetadata
             */
            public static fromObject(object: { [k: string]: any }): AICommon.BotQuotaMetadata.BotFeatureQuotaMetadata;

            /**
             * Creates a plain object from a BotFeatureQuotaMetadata message. Also converts values to other types if specified.
             * @param message BotFeatureQuotaMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.BotQuotaMetadata.BotFeatureQuotaMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this BotFeatureQuotaMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for BotFeatureQuotaMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace BotFeatureQuotaMetadata {

            /** BotFeatureType enum. */
            enum BotFeatureType {
                UNKNOWN_FEATURE = 0,
                REASONING_FEATURE = 1
            }
        }
    }

    /** Properties of a BotModeSelectionMetadata. */
    interface IBotModeSelectionMetadata {

        /** BotModeSelectionMetadata mode */
        mode?: (AICommon.BotModeSelectionMetadata.BotUserSelectionMode[]|null);
    }

    /** Represents a BotModeSelectionMetadata. */
    class BotModeSelectionMetadata implements IBotModeSelectionMetadata {

        /**
         * Constructs a new BotModeSelectionMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotModeSelectionMetadata);

        /** BotModeSelectionMetadata mode. */
        public mode: AICommon.BotModeSelectionMetadata.BotUserSelectionMode[];

        /**
         * Creates a new BotModeSelectionMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotModeSelectionMetadata instance
         */
        public static create(properties?: AICommon.IBotModeSelectionMetadata): AICommon.BotModeSelectionMetadata;

        /**
         * Encodes the specified BotModeSelectionMetadata message. Does not implicitly {@link AICommon.BotModeSelectionMetadata.verify|verify} messages.
         * @param message BotModeSelectionMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotModeSelectionMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotModeSelectionMetadata message, length delimited. Does not implicitly {@link AICommon.BotModeSelectionMetadata.verify|verify} messages.
         * @param message BotModeSelectionMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotModeSelectionMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotModeSelectionMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotModeSelectionMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotModeSelectionMetadata;

        /**
         * Decodes a BotModeSelectionMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotModeSelectionMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotModeSelectionMetadata;

        /**
         * Verifies a BotModeSelectionMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotModeSelectionMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotModeSelectionMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotModeSelectionMetadata;

        /**
         * Creates a plain object from a BotModeSelectionMetadata message. Also converts values to other types if specified.
         * @param message BotModeSelectionMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotModeSelectionMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotModeSelectionMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotModeSelectionMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotModeSelectionMetadata {

        /** BotUserSelectionMode enum. */
        enum BotUserSelectionMode {
            UNKNOWN_MODE = 0,
            REASONING_MODE = 1
        }
    }

    /** Properties of a BotCapabilityMetadata. */
    interface IBotCapabilityMetadata {

        /** BotCapabilityMetadata capabilities */
        capabilities?: (AICommon.BotCapabilityMetadata.BotCapabilityType[]|null);
    }

    /** Represents a BotCapabilityMetadata. */
    class BotCapabilityMetadata implements IBotCapabilityMetadata {

        /**
         * Constructs a new BotCapabilityMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotCapabilityMetadata);

        /** BotCapabilityMetadata capabilities. */
        public capabilities: AICommon.BotCapabilityMetadata.BotCapabilityType[];

        /**
         * Creates a new BotCapabilityMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotCapabilityMetadata instance
         */
        public static create(properties?: AICommon.IBotCapabilityMetadata): AICommon.BotCapabilityMetadata;

        /**
         * Encodes the specified BotCapabilityMetadata message. Does not implicitly {@link AICommon.BotCapabilityMetadata.verify|verify} messages.
         * @param message BotCapabilityMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotCapabilityMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotCapabilityMetadata message, length delimited. Does not implicitly {@link AICommon.BotCapabilityMetadata.verify|verify} messages.
         * @param message BotCapabilityMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotCapabilityMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotCapabilityMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotCapabilityMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotCapabilityMetadata;

        /**
         * Decodes a BotCapabilityMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotCapabilityMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotCapabilityMetadata;

        /**
         * Verifies a BotCapabilityMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotCapabilityMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotCapabilityMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotCapabilityMetadata;

        /**
         * Creates a plain object from a BotCapabilityMetadata message. Also converts values to other types if specified.
         * @param message BotCapabilityMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotCapabilityMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotCapabilityMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotCapabilityMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotCapabilityMetadata {

        /** BotCapabilityType enum. */
        enum BotCapabilityType {
            UNKNOWN = 0,
            PROGRESS_INDICATOR = 1,
            RICH_RESPONSE_HEADING = 2,
            RICH_RESPONSE_NESTED_LIST = 3,
            AI_MEMORY = 4,
            RICH_RESPONSE_THREAD_SURFING = 5,
            RICH_RESPONSE_TABLE = 6,
            RICH_RESPONSE_CODE = 7,
            RICH_RESPONSE_STRUCTURED_RESPONSE = 8,
            RICH_RESPONSE_INLINE_IMAGE = 9,
            WA_IG_1P_PLUGIN_RANKING_CONTROL = 10,
            WA_IG_1P_PLUGIN_RANKING_UPDATE_1 = 11,
            WA_IG_1P_PLUGIN_RANKING_UPDATE_2 = 12,
            WA_IG_1P_PLUGIN_RANKING_UPDATE_3 = 13,
            WA_IG_1P_PLUGIN_RANKING_UPDATE_4 = 14,
            WA_IG_1P_PLUGIN_RANKING_UPDATE_5 = 15,
            WA_IG_1P_PLUGIN_RANKING_UPDATE_6 = 16,
            WA_IG_1P_PLUGIN_RANKING_UPDATE_7 = 17,
            WA_IG_1P_PLUGIN_RANKING_UPDATE_8 = 18,
            WA_IG_1P_PLUGIN_RANKING_UPDATE_9 = 19,
            WA_IG_1P_PLUGIN_RANKING_UPDATE_10 = 20,
            RICH_RESPONSE_SUB_HEADING = 21,
            RICH_RESPONSE_GRID_IMAGE = 22,
            AI_STUDIO_UGC_MEMORY = 23,
            RICH_RESPONSE_LATEX = 24,
            RICH_RESPONSE_MAPS = 25,
            RICH_RESPONSE_INLINE_REELS = 26,
            AGENTIC_PLANNING = 27,
            ACCOUNT_LINKING = 28,
            STREAMING_DISAGGREGATION = 29,
            RICH_RESPONSE_GRID_IMAGE_3P = 30,
            RICH_RESPONSE_LATEX_INLINE = 31,
            QUERY_PLAN = 32,
            PROACTIVE_MESSAGE = 33,
            RICH_RESPONSE_UNIFIED_RESPONSE = 34,
            PROMOTION_MESSAGE = 35,
            SIMPLIFIED_PROFILE_PAGE = 36,
            RICH_RESPONSE_SOURCES_IN_MESSAGE = 37,
            RICH_RESPONSE_SIDE_BY_SIDE_SURVEY = 38,
            RICH_RESPONSE_UNIFIED_TEXT_COMPONENT = 39,
            AI_SHARED_MEMORY = 40,
            RICH_RESPONSE_UNIFIED_SOURCES = 41,
            RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS = 42,
            RICH_RESPONSE_UR_INLINE_REELS_ENABLED = 43,
            RICH_RESPONSE_UR_MEDIA_GRID_ENABLED = 44,
            RICH_RESPONSE_UR_TIMESTAMP_PLACEHOLDER = 45
        }
    }

    /** Properties of a BotProgressIndicatorMetadata. */
    interface IBotProgressIndicatorMetadata {

        /** BotProgressIndicatorMetadata progressDescription */
        progressDescription?: (string|null);

        /** BotProgressIndicatorMetadata stepsMetadata */
        stepsMetadata?: (AICommon.BotProgressIndicatorMetadata.IBotPlanningStepMetadata[]|null);
    }

    /** Represents a BotProgressIndicatorMetadata. */
    class BotProgressIndicatorMetadata implements IBotProgressIndicatorMetadata {

        /**
         * Constructs a new BotProgressIndicatorMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotProgressIndicatorMetadata);

        /** BotProgressIndicatorMetadata progressDescription. */
        public progressDescription: string;

        /** BotProgressIndicatorMetadata stepsMetadata. */
        public stepsMetadata: AICommon.BotProgressIndicatorMetadata.IBotPlanningStepMetadata[];

        /**
         * Creates a new BotProgressIndicatorMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotProgressIndicatorMetadata instance
         */
        public static create(properties?: AICommon.IBotProgressIndicatorMetadata): AICommon.BotProgressIndicatorMetadata;

        /**
         * Encodes the specified BotProgressIndicatorMetadata message. Does not implicitly {@link AICommon.BotProgressIndicatorMetadata.verify|verify} messages.
         * @param message BotProgressIndicatorMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotProgressIndicatorMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotProgressIndicatorMetadata message, length delimited. Does not implicitly {@link AICommon.BotProgressIndicatorMetadata.verify|verify} messages.
         * @param message BotProgressIndicatorMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotProgressIndicatorMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotProgressIndicatorMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotProgressIndicatorMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotProgressIndicatorMetadata;

        /**
         * Decodes a BotProgressIndicatorMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotProgressIndicatorMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotProgressIndicatorMetadata;

        /**
         * Verifies a BotProgressIndicatorMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotProgressIndicatorMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotProgressIndicatorMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotProgressIndicatorMetadata;

        /**
         * Creates a plain object from a BotProgressIndicatorMetadata message. Also converts values to other types if specified.
         * @param message BotProgressIndicatorMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotProgressIndicatorMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotProgressIndicatorMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotProgressIndicatorMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotProgressIndicatorMetadata {

        /** Properties of a BotPlanningStepMetadata. */
        interface IBotPlanningStepMetadata {

            /** BotPlanningStepMetadata statusTitle */
            statusTitle?: (string|null);

            /** BotPlanningStepMetadata statusBody */
            statusBody?: (string|null);

            /** BotPlanningStepMetadata sourcesMetadata */
            sourcesMetadata?: (AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourcesMetadata[]|null);

            /** BotPlanningStepMetadata status */
            status?: (AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatus|null);

            /** BotPlanningStepMetadata isReasoning */
            isReasoning?: (boolean|null);

            /** BotPlanningStepMetadata isEnhancedSearch */
            isEnhancedSearch?: (boolean|null);

            /** BotPlanningStepMetadata sections */
            sections?: (AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningStepSectionMetadata[]|null);
        }

        /** Represents a BotPlanningStepMetadata. */
        class BotPlanningStepMetadata implements IBotPlanningStepMetadata {

            /**
             * Constructs a new BotPlanningStepMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.BotProgressIndicatorMetadata.IBotPlanningStepMetadata);

            /** BotPlanningStepMetadata statusTitle. */
            public statusTitle: string;

            /** BotPlanningStepMetadata statusBody. */
            public statusBody: string;

            /** BotPlanningStepMetadata sourcesMetadata. */
            public sourcesMetadata: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourcesMetadata[];

            /** BotPlanningStepMetadata status. */
            public status: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatus;

            /** BotPlanningStepMetadata isReasoning. */
            public isReasoning: boolean;

            /** BotPlanningStepMetadata isEnhancedSearch. */
            public isEnhancedSearch: boolean;

            /** BotPlanningStepMetadata sections. */
            public sections: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningStepSectionMetadata[];

            /**
             * Creates a new BotPlanningStepMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns BotPlanningStepMetadata instance
             */
            public static create(properties?: AICommon.BotProgressIndicatorMetadata.IBotPlanningStepMetadata): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata;

            /**
             * Encodes the specified BotPlanningStepMetadata message. Does not implicitly {@link AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.verify|verify} messages.
             * @param message BotPlanningStepMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.BotProgressIndicatorMetadata.IBotPlanningStepMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified BotPlanningStepMetadata message, length delimited. Does not implicitly {@link AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.verify|verify} messages.
             * @param message BotPlanningStepMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.BotProgressIndicatorMetadata.IBotPlanningStepMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a BotPlanningStepMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns BotPlanningStepMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata;

            /**
             * Decodes a BotPlanningStepMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns BotPlanningStepMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata;

            /**
             * Verifies a BotPlanningStepMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a BotPlanningStepMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns BotPlanningStepMetadata
             */
            public static fromObject(object: { [k: string]: any }): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata;

            /**
             * Creates a plain object from a BotPlanningStepMetadata message. Also converts values to other types if specified.
             * @param message BotPlanningStepMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this BotPlanningStepMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for BotPlanningStepMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace BotPlanningStepMetadata {

            /** Properties of a BotPlanningSearchSourceMetadata. */
            interface IBotPlanningSearchSourceMetadata {

                /** BotPlanningSearchSourceMetadata title */
                title?: (string|null);

                /** BotPlanningSearchSourceMetadata provider */
                provider?: (AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProvider|null);

                /** BotPlanningSearchSourceMetadata sourceUrl */
                sourceUrl?: (string|null);

                /** BotPlanningSearchSourceMetadata favIconUrl */
                favIconUrl?: (string|null);
            }

            /** Represents a BotPlanningSearchSourceMetadata. */
            class BotPlanningSearchSourceMetadata implements IBotPlanningSearchSourceMetadata {

                /**
                 * Constructs a new BotPlanningSearchSourceMetadata.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourceMetadata);

                /** BotPlanningSearchSourceMetadata title. */
                public title: string;

                /** BotPlanningSearchSourceMetadata provider. */
                public provider: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProvider;

                /** BotPlanningSearchSourceMetadata sourceUrl. */
                public sourceUrl: string;

                /** BotPlanningSearchSourceMetadata favIconUrl. */
                public favIconUrl: string;

                /**
                 * Creates a new BotPlanningSearchSourceMetadata instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BotPlanningSearchSourceMetadata instance
                 */
                public static create(properties?: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourceMetadata): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata;

                /**
                 * Encodes the specified BotPlanningSearchSourceMetadata message. Does not implicitly {@link AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata.verify|verify} messages.
                 * @param message BotPlanningSearchSourceMetadata message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourceMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BotPlanningSearchSourceMetadata message, length delimited. Does not implicitly {@link AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata.verify|verify} messages.
                 * @param message BotPlanningSearchSourceMetadata message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourceMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BotPlanningSearchSourceMetadata message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BotPlanningSearchSourceMetadata
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata;

                /**
                 * Decodes a BotPlanningSearchSourceMetadata message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BotPlanningSearchSourceMetadata
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata;

                /**
                 * Verifies a BotPlanningSearchSourceMetadata message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BotPlanningSearchSourceMetadata message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BotPlanningSearchSourceMetadata
                 */
                public static fromObject(object: { [k: string]: any }): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata;

                /**
                 * Creates a plain object from a BotPlanningSearchSourceMetadata message. Also converts values to other types if specified.
                 * @param message BotPlanningSearchSourceMetadata
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BotPlanningSearchSourceMetadata to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BotPlanningSearchSourceMetadata
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BotPlanningSearchSourcesMetadata. */
            interface IBotPlanningSearchSourcesMetadata {

                /** BotPlanningSearchSourcesMetadata sourceTitle */
                sourceTitle?: (string|null);

                /** BotPlanningSearchSourcesMetadata provider */
                provider?: (AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProvider|null);

                /** BotPlanningSearchSourcesMetadata sourceUrl */
                sourceUrl?: (string|null);
            }

            /** Represents a BotPlanningSearchSourcesMetadata. */
            class BotPlanningSearchSourcesMetadata implements IBotPlanningSearchSourcesMetadata {

                /**
                 * Constructs a new BotPlanningSearchSourcesMetadata.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourcesMetadata);

                /** BotPlanningSearchSourcesMetadata sourceTitle. */
                public sourceTitle: string;

                /** BotPlanningSearchSourcesMetadata provider. */
                public provider: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProvider;

                /** BotPlanningSearchSourcesMetadata sourceUrl. */
                public sourceUrl: string;

                /**
                 * Creates a new BotPlanningSearchSourcesMetadata instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BotPlanningSearchSourcesMetadata instance
                 */
                public static create(properties?: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourcesMetadata): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata;

                /**
                 * Encodes the specified BotPlanningSearchSourcesMetadata message. Does not implicitly {@link AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.verify|verify} messages.
                 * @param message BotPlanningSearchSourcesMetadata message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourcesMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BotPlanningSearchSourcesMetadata message, length delimited. Does not implicitly {@link AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.verify|verify} messages.
                 * @param message BotPlanningSearchSourcesMetadata message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourcesMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BotPlanningSearchSourcesMetadata message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BotPlanningSearchSourcesMetadata
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata;

                /**
                 * Decodes a BotPlanningSearchSourcesMetadata message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BotPlanningSearchSourcesMetadata
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata;

                /**
                 * Verifies a BotPlanningSearchSourcesMetadata message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BotPlanningSearchSourcesMetadata message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BotPlanningSearchSourcesMetadata
                 */
                public static fromObject(object: { [k: string]: any }): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata;

                /**
                 * Creates a plain object from a BotPlanningSearchSourcesMetadata message. Also converts values to other types if specified.
                 * @param message BotPlanningSearchSourcesMetadata
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BotPlanningSearchSourcesMetadata to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BotPlanningSearchSourcesMetadata
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace BotPlanningSearchSourcesMetadata {

                /** BotPlanningSearchSourceProvider enum. */
                enum BotPlanningSearchSourceProvider {
                    UNKNOWN = 0,
                    OTHER = 1,
                    GOOGLE = 2,
                    BING = 3
                }
            }

            /** Properties of a BotPlanningStepSectionMetadata. */
            interface IBotPlanningStepSectionMetadata {

                /** BotPlanningStepSectionMetadata sectionTitle */
                sectionTitle?: (string|null);

                /** BotPlanningStepSectionMetadata sectionBody */
                sectionBody?: (string|null);

                /** BotPlanningStepSectionMetadata sourcesMetadata */
                sourcesMetadata?: (AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourceMetadata[]|null);
            }

            /** Represents a BotPlanningStepSectionMetadata. */
            class BotPlanningStepSectionMetadata implements IBotPlanningStepSectionMetadata {

                /**
                 * Constructs a new BotPlanningStepSectionMetadata.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningStepSectionMetadata);

                /** BotPlanningStepSectionMetadata sectionTitle. */
                public sectionTitle: string;

                /** BotPlanningStepSectionMetadata sectionBody. */
                public sectionBody: string;

                /** BotPlanningStepSectionMetadata sourcesMetadata. */
                public sourcesMetadata: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourceMetadata[];

                /**
                 * Creates a new BotPlanningStepSectionMetadata instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BotPlanningStepSectionMetadata instance
                 */
                public static create(properties?: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningStepSectionMetadata): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata;

                /**
                 * Encodes the specified BotPlanningStepSectionMetadata message. Does not implicitly {@link AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata.verify|verify} messages.
                 * @param message BotPlanningStepSectionMetadata message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningStepSectionMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BotPlanningStepSectionMetadata message, length delimited. Does not implicitly {@link AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata.verify|verify} messages.
                 * @param message BotPlanningStepSectionMetadata message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningStepSectionMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BotPlanningStepSectionMetadata message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BotPlanningStepSectionMetadata
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata;

                /**
                 * Decodes a BotPlanningStepSectionMetadata message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BotPlanningStepSectionMetadata
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata;

                /**
                 * Verifies a BotPlanningStepSectionMetadata message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BotPlanningStepSectionMetadata message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BotPlanningStepSectionMetadata
                 */
                public static fromObject(object: { [k: string]: any }): AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata;

                /**
                 * Creates a plain object from a BotPlanningStepSectionMetadata message. Also converts values to other types if specified.
                 * @param message BotPlanningStepSectionMetadata
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: AICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BotPlanningStepSectionMetadata to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BotPlanningStepSectionMetadata
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** BotSearchSourceProvider enum. */
            enum BotSearchSourceProvider {
                UNKNOWN_PROVIDER = 0,
                OTHER = 1,
                GOOGLE = 2,
                BING = 3
            }

            /** PlanningStepStatus enum. */
            enum PlanningStepStatus {
                UNKNOWN = 0,
                PLANNED = 1,
                EXECUTING = 2,
                FINISHED = 3
            }
        }
    }

    /** Properties of a BotModelMetadata. */
    interface IBotModelMetadata {

        /** BotModelMetadata modelType */
        modelType?: (AICommon.BotModelMetadata.ModelType|null);

        /** BotModelMetadata premiumModelStatus */
        premiumModelStatus?: (AICommon.BotModelMetadata.PremiumModelStatus|null);
    }

    /** Represents a BotModelMetadata. */
    class BotModelMetadata implements IBotModelMetadata {

        /**
         * Constructs a new BotModelMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotModelMetadata);

        /** BotModelMetadata modelType. */
        public modelType: AICommon.BotModelMetadata.ModelType;

        /** BotModelMetadata premiumModelStatus. */
        public premiumModelStatus: AICommon.BotModelMetadata.PremiumModelStatus;

        /**
         * Creates a new BotModelMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotModelMetadata instance
         */
        public static create(properties?: AICommon.IBotModelMetadata): AICommon.BotModelMetadata;

        /**
         * Encodes the specified BotModelMetadata message. Does not implicitly {@link AICommon.BotModelMetadata.verify|verify} messages.
         * @param message BotModelMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotModelMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotModelMetadata message, length delimited. Does not implicitly {@link AICommon.BotModelMetadata.verify|verify} messages.
         * @param message BotModelMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotModelMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotModelMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotModelMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotModelMetadata;

        /**
         * Decodes a BotModelMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotModelMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotModelMetadata;

        /**
         * Verifies a BotModelMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotModelMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotModelMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotModelMetadata;

        /**
         * Creates a plain object from a BotModelMetadata message. Also converts values to other types if specified.
         * @param message BotModelMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotModelMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotModelMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotModelMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotModelMetadata {

        /** ModelType enum. */
        enum ModelType {
            UNKNOWN_TYPE = 0,
            LLAMA_PROD = 1,
            LLAMA_PROD_PREMIUM = 2
        }

        /** PremiumModelStatus enum. */
        enum PremiumModelStatus {
            UNKNOWN_STATUS = 0,
            AVAILABLE = 1,
            QUOTA_EXCEED_LIMIT = 2
        }
    }

    /** Properties of a BotReminderMetadata. */
    interface IBotReminderMetadata {

        /** BotReminderMetadata requestMessageKey */
        requestMessageKey?: (Protocol.IMessageKey|null);

        /** BotReminderMetadata action */
        action?: (AICommon.BotReminderMetadata.ReminderAction|null);

        /** BotReminderMetadata name */
        name?: (string|null);

        /** BotReminderMetadata nextTriggerTimestamp */
        nextTriggerTimestamp?: (number|Long|null);

        /** BotReminderMetadata frequency */
        frequency?: (AICommon.BotReminderMetadata.ReminderFrequency|null);
    }

    /** Represents a BotReminderMetadata. */
    class BotReminderMetadata implements IBotReminderMetadata {

        /**
         * Constructs a new BotReminderMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotReminderMetadata);

        /** BotReminderMetadata requestMessageKey. */
        public requestMessageKey?: (Protocol.IMessageKey|null);

        /** BotReminderMetadata action. */
        public action: AICommon.BotReminderMetadata.ReminderAction;

        /** BotReminderMetadata name. */
        public name: string;

        /** BotReminderMetadata nextTriggerTimestamp. */
        public nextTriggerTimestamp: (number|Long);

        /** BotReminderMetadata frequency. */
        public frequency: AICommon.BotReminderMetadata.ReminderFrequency;

        /**
         * Creates a new BotReminderMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotReminderMetadata instance
         */
        public static create(properties?: AICommon.IBotReminderMetadata): AICommon.BotReminderMetadata;

        /**
         * Encodes the specified BotReminderMetadata message. Does not implicitly {@link AICommon.BotReminderMetadata.verify|verify} messages.
         * @param message BotReminderMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotReminderMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotReminderMetadata message, length delimited. Does not implicitly {@link AICommon.BotReminderMetadata.verify|verify} messages.
         * @param message BotReminderMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotReminderMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotReminderMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotReminderMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotReminderMetadata;

        /**
         * Decodes a BotReminderMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotReminderMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotReminderMetadata;

        /**
         * Verifies a BotReminderMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotReminderMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotReminderMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotReminderMetadata;

        /**
         * Creates a plain object from a BotReminderMetadata message. Also converts values to other types if specified.
         * @param message BotReminderMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotReminderMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotReminderMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotReminderMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotReminderMetadata {

        /** ReminderAction enum. */
        enum ReminderAction {
            NOTIFY = 1,
            CREATE = 2,
            DELETE = 3,
            UPDATE = 4
        }

        /** ReminderFrequency enum. */
        enum ReminderFrequency {
            ONCE = 1,
            DAILY = 2,
            WEEKLY = 3,
            BIWEEKLY = 4,
            MONTHLY = 5
        }
    }

    /** Properties of a BotMemuMetadata. */
    interface IBotMemuMetadata {

        /** BotMemuMetadata faceImages */
        faceImages?: (AICommon.IBotMediaMetadata[]|null);
    }

    /** Represents a BotMemuMetadata. */
    class BotMemuMetadata implements IBotMemuMetadata {

        /**
         * Constructs a new BotMemuMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotMemuMetadata);

        /** BotMemuMetadata faceImages. */
        public faceImages: AICommon.IBotMediaMetadata[];

        /**
         * Creates a new BotMemuMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotMemuMetadata instance
         */
        public static create(properties?: AICommon.IBotMemuMetadata): AICommon.BotMemuMetadata;

        /**
         * Encodes the specified BotMemuMetadata message. Does not implicitly {@link AICommon.BotMemuMetadata.verify|verify} messages.
         * @param message BotMemuMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotMemuMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotMemuMetadata message, length delimited. Does not implicitly {@link AICommon.BotMemuMetadata.verify|verify} messages.
         * @param message BotMemuMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotMemuMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotMemuMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotMemuMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotMemuMetadata;

        /**
         * Decodes a BotMemuMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotMemuMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotMemuMetadata;

        /**
         * Verifies a BotMemuMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotMemuMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotMemuMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotMemuMetadata;

        /**
         * Creates a plain object from a BotMemuMetadata message. Also converts values to other types if specified.
         * @param message BotMemuMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotMemuMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotMemuMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotMemuMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotMediaMetadata. */
    interface IBotMediaMetadata {

        /** BotMediaMetadata fileSha256 */
        fileSha256?: (string|null);

        /** BotMediaMetadata mediaKey */
        mediaKey?: (string|null);

        /** BotMediaMetadata fileEncSha256 */
        fileEncSha256?: (string|null);

        /** BotMediaMetadata directPath */
        directPath?: (string|null);

        /** BotMediaMetadata mediaKeyTimestamp */
        mediaKeyTimestamp?: (number|Long|null);

        /** BotMediaMetadata mimetype */
        mimetype?: (string|null);

        /** BotMediaMetadata orientationType */
        orientationType?: (AICommon.BotMediaMetadata.OrientationType|null);
    }

    /** Represents a BotMediaMetadata. */
    class BotMediaMetadata implements IBotMediaMetadata {

        /**
         * Constructs a new BotMediaMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotMediaMetadata);

        /** BotMediaMetadata fileSha256. */
        public fileSha256: string;

        /** BotMediaMetadata mediaKey. */
        public mediaKey: string;

        /** BotMediaMetadata fileEncSha256. */
        public fileEncSha256: string;

        /** BotMediaMetadata directPath. */
        public directPath: string;

        /** BotMediaMetadata mediaKeyTimestamp. */
        public mediaKeyTimestamp: (number|Long);

        /** BotMediaMetadata mimetype. */
        public mimetype: string;

        /** BotMediaMetadata orientationType. */
        public orientationType: AICommon.BotMediaMetadata.OrientationType;

        /**
         * Creates a new BotMediaMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotMediaMetadata instance
         */
        public static create(properties?: AICommon.IBotMediaMetadata): AICommon.BotMediaMetadata;

        /**
         * Encodes the specified BotMediaMetadata message. Does not implicitly {@link AICommon.BotMediaMetadata.verify|verify} messages.
         * @param message BotMediaMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotMediaMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotMediaMetadata message, length delimited. Does not implicitly {@link AICommon.BotMediaMetadata.verify|verify} messages.
         * @param message BotMediaMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotMediaMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotMediaMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotMediaMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotMediaMetadata;

        /**
         * Decodes a BotMediaMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotMediaMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotMediaMetadata;

        /**
         * Verifies a BotMediaMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotMediaMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotMediaMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotMediaMetadata;

        /**
         * Creates a plain object from a BotMediaMetadata message. Also converts values to other types if specified.
         * @param message BotMediaMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotMediaMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotMediaMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotMediaMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotMediaMetadata {

        /** OrientationType enum. */
        enum OrientationType {
            CENTER = 1,
            LEFT = 2,
            RIGHT = 3
        }
    }

    /** Properties of a BotSessionMetadata. */
    interface IBotSessionMetadata {

        /** BotSessionMetadata sessionId */
        sessionId?: (string|null);

        /** BotSessionMetadata sessionSource */
        sessionSource?: (AICommon.BotSessionSource|null);
    }

    /** Represents a BotSessionMetadata. */
    class BotSessionMetadata implements IBotSessionMetadata {

        /**
         * Constructs a new BotSessionMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotSessionMetadata);

        /** BotSessionMetadata sessionId. */
        public sessionId: string;

        /** BotSessionMetadata sessionSource. */
        public sessionSource: AICommon.BotSessionSource;

        /**
         * Creates a new BotSessionMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotSessionMetadata instance
         */
        public static create(properties?: AICommon.IBotSessionMetadata): AICommon.BotSessionMetadata;

        /**
         * Encodes the specified BotSessionMetadata message. Does not implicitly {@link AICommon.BotSessionMetadata.verify|verify} messages.
         * @param message BotSessionMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotSessionMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotSessionMetadata message, length delimited. Does not implicitly {@link AICommon.BotSessionMetadata.verify|verify} messages.
         * @param message BotSessionMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotSessionMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotSessionMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotSessionMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotSessionMetadata;

        /**
         * Decodes a BotSessionMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotSessionMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotSessionMetadata;

        /**
         * Verifies a BotSessionMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotSessionMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotSessionMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotSessionMetadata;

        /**
         * Creates a plain object from a BotSessionMetadata message. Also converts values to other types if specified.
         * @param message BotSessionMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotSessionMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotSessionMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotSessionMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotMetricsMetadata. */
    interface IBotMetricsMetadata {

        /** BotMetricsMetadata destinationId */
        destinationId?: (string|null);

        /** BotMetricsMetadata destinationEntryPoint */
        destinationEntryPoint?: (AICommon.BotMetricsEntryPoint|null);

        /** BotMetricsMetadata threadOrigin */
        threadOrigin?: (AICommon.BotMetricsThreadEntryPoint|null);
    }

    /** Represents a BotMetricsMetadata. */
    class BotMetricsMetadata implements IBotMetricsMetadata {

        /**
         * Constructs a new BotMetricsMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotMetricsMetadata);

        /** BotMetricsMetadata destinationId. */
        public destinationId: string;

        /** BotMetricsMetadata destinationEntryPoint. */
        public destinationEntryPoint: AICommon.BotMetricsEntryPoint;

        /** BotMetricsMetadata threadOrigin. */
        public threadOrigin: AICommon.BotMetricsThreadEntryPoint;

        /**
         * Creates a new BotMetricsMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotMetricsMetadata instance
         */
        public static create(properties?: AICommon.IBotMetricsMetadata): AICommon.BotMetricsMetadata;

        /**
         * Encodes the specified BotMetricsMetadata message. Does not implicitly {@link AICommon.BotMetricsMetadata.verify|verify} messages.
         * @param message BotMetricsMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotMetricsMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotMetricsMetadata message, length delimited. Does not implicitly {@link AICommon.BotMetricsMetadata.verify|verify} messages.
         * @param message BotMetricsMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotMetricsMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotMetricsMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotMetricsMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotMetricsMetadata;

        /**
         * Decodes a BotMetricsMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotMetricsMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotMetricsMetadata;

        /**
         * Verifies a BotMetricsMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotMetricsMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotMetricsMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotMetricsMetadata;

        /**
         * Creates a plain object from a BotMetricsMetadata message. Also converts values to other types if specified.
         * @param message BotMetricsMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotMetricsMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotMetricsMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotMetricsMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotRenderingMetadata. */
    interface IBotRenderingMetadata {

        /** BotRenderingMetadata keywords */
        keywords?: (AICommon.BotRenderingMetadata.IKeyword[]|null);
    }

    /** Represents a BotRenderingMetadata. */
    class BotRenderingMetadata implements IBotRenderingMetadata {

        /**
         * Constructs a new BotRenderingMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotRenderingMetadata);

        /** BotRenderingMetadata keywords. */
        public keywords: AICommon.BotRenderingMetadata.IKeyword[];

        /**
         * Creates a new BotRenderingMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotRenderingMetadata instance
         */
        public static create(properties?: AICommon.IBotRenderingMetadata): AICommon.BotRenderingMetadata;

        /**
         * Encodes the specified BotRenderingMetadata message. Does not implicitly {@link AICommon.BotRenderingMetadata.verify|verify} messages.
         * @param message BotRenderingMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotRenderingMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotRenderingMetadata message, length delimited. Does not implicitly {@link AICommon.BotRenderingMetadata.verify|verify} messages.
         * @param message BotRenderingMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotRenderingMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotRenderingMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotRenderingMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotRenderingMetadata;

        /**
         * Decodes a BotRenderingMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotRenderingMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotRenderingMetadata;

        /**
         * Verifies a BotRenderingMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotRenderingMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotRenderingMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotRenderingMetadata;

        /**
         * Creates a plain object from a BotRenderingMetadata message. Also converts values to other types if specified.
         * @param message BotRenderingMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotRenderingMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotRenderingMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotRenderingMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotRenderingMetadata {

        /** Properties of a Keyword. */
        interface IKeyword {

            /** Keyword value */
            value?: (string|null);

            /** Keyword associatedPrompts */
            associatedPrompts?: (string[]|null);
        }

        /** Represents a Keyword. */
        class Keyword implements IKeyword {

            /**
             * Constructs a new Keyword.
             * @param [properties] Properties to set
             */
            constructor(properties?: AICommon.BotRenderingMetadata.IKeyword);

            /** Keyword value. */
            public value: string;

            /** Keyword associatedPrompts. */
            public associatedPrompts: string[];

            /**
             * Creates a new Keyword instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Keyword instance
             */
            public static create(properties?: AICommon.BotRenderingMetadata.IKeyword): AICommon.BotRenderingMetadata.Keyword;

            /**
             * Encodes the specified Keyword message. Does not implicitly {@link AICommon.BotRenderingMetadata.Keyword.verify|verify} messages.
             * @param message Keyword message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: AICommon.BotRenderingMetadata.IKeyword, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Keyword message, length delimited. Does not implicitly {@link AICommon.BotRenderingMetadata.Keyword.verify|verify} messages.
             * @param message Keyword message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: AICommon.BotRenderingMetadata.IKeyword, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a Keyword message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Keyword
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotRenderingMetadata.Keyword;

            /**
             * Decodes a Keyword message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Keyword
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotRenderingMetadata.Keyword;

            /**
             * Verifies a Keyword message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a Keyword message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Keyword
             */
            public static fromObject(object: { [k: string]: any }): AICommon.BotRenderingMetadata.Keyword;

            /**
             * Creates a plain object from a Keyword message. Also converts values to other types if specified.
             * @param message Keyword
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: AICommon.BotRenderingMetadata.Keyword, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Keyword to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Keyword
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Properties of a BotPromotionMessageMetadata. */
    interface IBotPromotionMessageMetadata {

        /** BotPromotionMessageMetadata promotionType */
        promotionType?: (AICommon.BotPromotionMessageMetadata.BotPromotionType|null);

        /** BotPromotionMessageMetadata buttonTitle */
        buttonTitle?: (string|null);
    }

    /** Represents a BotPromotionMessageMetadata. */
    class BotPromotionMessageMetadata implements IBotPromotionMessageMetadata {

        /**
         * Constructs a new BotPromotionMessageMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotPromotionMessageMetadata);

        /** BotPromotionMessageMetadata promotionType. */
        public promotionType: AICommon.BotPromotionMessageMetadata.BotPromotionType;

        /** BotPromotionMessageMetadata buttonTitle. */
        public buttonTitle: string;

        /**
         * Creates a new BotPromotionMessageMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotPromotionMessageMetadata instance
         */
        public static create(properties?: AICommon.IBotPromotionMessageMetadata): AICommon.BotPromotionMessageMetadata;

        /**
         * Encodes the specified BotPromotionMessageMetadata message. Does not implicitly {@link AICommon.BotPromotionMessageMetadata.verify|verify} messages.
         * @param message BotPromotionMessageMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotPromotionMessageMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotPromotionMessageMetadata message, length delimited. Does not implicitly {@link AICommon.BotPromotionMessageMetadata.verify|verify} messages.
         * @param message BotPromotionMessageMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotPromotionMessageMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotPromotionMessageMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotPromotionMessageMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotPromotionMessageMetadata;

        /**
         * Decodes a BotPromotionMessageMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotPromotionMessageMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotPromotionMessageMetadata;

        /**
         * Verifies a BotPromotionMessageMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotPromotionMessageMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotPromotionMessageMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotPromotionMessageMetadata;

        /**
         * Creates a plain object from a BotPromotionMessageMetadata message. Also converts values to other types if specified.
         * @param message BotPromotionMessageMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotPromotionMessageMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotPromotionMessageMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotPromotionMessageMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotPromotionMessageMetadata {

        /** BotPromotionType enum. */
        enum BotPromotionType {
            UNKNOWN_TYPE = 0,
            C50 = 1,
            SURVEY_PLATFORM = 2
        }
    }

    /** Properties of a BotSignatureVerificationUseCaseProof. */
    interface IBotSignatureVerificationUseCaseProof {

        /** BotSignatureVerificationUseCaseProof version */
        version?: (number|null);

        /** BotSignatureVerificationUseCaseProof useCase */
        useCase?: (AICommon.BotSignatureVerificationUseCaseProof.BotSignatureUseCase|null);

        /** BotSignatureVerificationUseCaseProof signature */
        signature?: (Uint8Array|null);

        /** BotSignatureVerificationUseCaseProof certificateChain */
        certificateChain?: (Uint8Array[]|null);
    }

    /** Represents a BotSignatureVerificationUseCaseProof. */
    class BotSignatureVerificationUseCaseProof implements IBotSignatureVerificationUseCaseProof {

        /**
         * Constructs a new BotSignatureVerificationUseCaseProof.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotSignatureVerificationUseCaseProof);

        /** BotSignatureVerificationUseCaseProof version. */
        public version: number;

        /** BotSignatureVerificationUseCaseProof useCase. */
        public useCase: AICommon.BotSignatureVerificationUseCaseProof.BotSignatureUseCase;

        /** BotSignatureVerificationUseCaseProof signature. */
        public signature: Uint8Array;

        /** BotSignatureVerificationUseCaseProof certificateChain. */
        public certificateChain: Uint8Array[];

        /**
         * Creates a new BotSignatureVerificationUseCaseProof instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotSignatureVerificationUseCaseProof instance
         */
        public static create(properties?: AICommon.IBotSignatureVerificationUseCaseProof): AICommon.BotSignatureVerificationUseCaseProof;

        /**
         * Encodes the specified BotSignatureVerificationUseCaseProof message. Does not implicitly {@link AICommon.BotSignatureVerificationUseCaseProof.verify|verify} messages.
         * @param message BotSignatureVerificationUseCaseProof message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotSignatureVerificationUseCaseProof, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotSignatureVerificationUseCaseProof message, length delimited. Does not implicitly {@link AICommon.BotSignatureVerificationUseCaseProof.verify|verify} messages.
         * @param message BotSignatureVerificationUseCaseProof message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotSignatureVerificationUseCaseProof, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotSignatureVerificationUseCaseProof message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotSignatureVerificationUseCaseProof
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotSignatureVerificationUseCaseProof;

        /**
         * Decodes a BotSignatureVerificationUseCaseProof message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotSignatureVerificationUseCaseProof
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotSignatureVerificationUseCaseProof;

        /**
         * Verifies a BotSignatureVerificationUseCaseProof message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotSignatureVerificationUseCaseProof message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotSignatureVerificationUseCaseProof
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotSignatureVerificationUseCaseProof;

        /**
         * Creates a plain object from a BotSignatureVerificationUseCaseProof message. Also converts values to other types if specified.
         * @param message BotSignatureVerificationUseCaseProof
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotSignatureVerificationUseCaseProof, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotSignatureVerificationUseCaseProof to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotSignatureVerificationUseCaseProof
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotSignatureVerificationUseCaseProof {

        /** BotSignatureUseCase enum. */
        enum BotSignatureUseCase {
            UNSPECIFIED = 0,
            WA_BOT_MSG = 1
        }
    }

    /** Properties of a BotSignatureVerificationMetadata. */
    interface IBotSignatureVerificationMetadata {

        /** BotSignatureVerificationMetadata proofs */
        proofs?: (AICommon.IBotSignatureVerificationUseCaseProof[]|null);
    }

    /** Represents a BotSignatureVerificationMetadata. */
    class BotSignatureVerificationMetadata implements IBotSignatureVerificationMetadata {

        /**
         * Constructs a new BotSignatureVerificationMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotSignatureVerificationMetadata);

        /** BotSignatureVerificationMetadata proofs. */
        public proofs: AICommon.IBotSignatureVerificationUseCaseProof[];

        /**
         * Creates a new BotSignatureVerificationMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotSignatureVerificationMetadata instance
         */
        public static create(properties?: AICommon.IBotSignatureVerificationMetadata): AICommon.BotSignatureVerificationMetadata;

        /**
         * Encodes the specified BotSignatureVerificationMetadata message. Does not implicitly {@link AICommon.BotSignatureVerificationMetadata.verify|verify} messages.
         * @param message BotSignatureVerificationMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotSignatureVerificationMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotSignatureVerificationMetadata message, length delimited. Does not implicitly {@link AICommon.BotSignatureVerificationMetadata.verify|verify} messages.
         * @param message BotSignatureVerificationMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotSignatureVerificationMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotSignatureVerificationMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotSignatureVerificationMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotSignatureVerificationMetadata;

        /**
         * Decodes a BotSignatureVerificationMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotSignatureVerificationMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotSignatureVerificationMetadata;

        /**
         * Verifies a BotSignatureVerificationMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotSignatureVerificationMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotSignatureVerificationMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotSignatureVerificationMetadata;

        /**
         * Creates a plain object from a BotSignatureVerificationMetadata message. Also converts values to other types if specified.
         * @param message BotSignatureVerificationMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotSignatureVerificationMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotSignatureVerificationMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotSignatureVerificationMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotMemoryFact. */
    interface IBotMemoryFact {

        /** BotMemoryFact fact */
        fact?: (string|null);

        /** BotMemoryFact factId */
        factId?: (string|null);
    }

    /** Represents a BotMemoryFact. */
    class BotMemoryFact implements IBotMemoryFact {

        /**
         * Constructs a new BotMemoryFact.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotMemoryFact);

        /** BotMemoryFact fact. */
        public fact: string;

        /** BotMemoryFact factId. */
        public factId: string;

        /**
         * Creates a new BotMemoryFact instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotMemoryFact instance
         */
        public static create(properties?: AICommon.IBotMemoryFact): AICommon.BotMemoryFact;

        /**
         * Encodes the specified BotMemoryFact message. Does not implicitly {@link AICommon.BotMemoryFact.verify|verify} messages.
         * @param message BotMemoryFact message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotMemoryFact, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotMemoryFact message, length delimited. Does not implicitly {@link AICommon.BotMemoryFact.verify|verify} messages.
         * @param message BotMemoryFact message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotMemoryFact, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotMemoryFact message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotMemoryFact
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotMemoryFact;

        /**
         * Decodes a BotMemoryFact message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotMemoryFact
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotMemoryFact;

        /**
         * Verifies a BotMemoryFact message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotMemoryFact message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotMemoryFact
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotMemoryFact;

        /**
         * Creates a plain object from a BotMemoryFact message. Also converts values to other types if specified.
         * @param message BotMemoryFact
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotMemoryFact, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotMemoryFact to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotMemoryFact
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotMemoryMetadata. */
    interface IBotMemoryMetadata {

        /** BotMemoryMetadata addedFacts */
        addedFacts?: (AICommon.IBotMemoryFact[]|null);

        /** BotMemoryMetadata removedFacts */
        removedFacts?: (AICommon.IBotMemoryFact[]|null);

        /** BotMemoryMetadata disclaimer */
        disclaimer?: (string|null);
    }

    /** Represents a BotMemoryMetadata. */
    class BotMemoryMetadata implements IBotMemoryMetadata {

        /**
         * Constructs a new BotMemoryMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotMemoryMetadata);

        /** BotMemoryMetadata addedFacts. */
        public addedFacts: AICommon.IBotMemoryFact[];

        /** BotMemoryMetadata removedFacts. */
        public removedFacts: AICommon.IBotMemoryFact[];

        /** BotMemoryMetadata disclaimer. */
        public disclaimer: string;

        /**
         * Creates a new BotMemoryMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotMemoryMetadata instance
         */
        public static create(properties?: AICommon.IBotMemoryMetadata): AICommon.BotMemoryMetadata;

        /**
         * Encodes the specified BotMemoryMetadata message. Does not implicitly {@link AICommon.BotMemoryMetadata.verify|verify} messages.
         * @param message BotMemoryMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotMemoryMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotMemoryMetadata message, length delimited. Does not implicitly {@link AICommon.BotMemoryMetadata.verify|verify} messages.
         * @param message BotMemoryMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotMemoryMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotMemoryMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotMemoryMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotMemoryMetadata;

        /**
         * Decodes a BotMemoryMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotMemoryMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotMemoryMetadata;

        /**
         * Verifies a BotMemoryMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotMemoryMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotMemoryMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotMemoryMetadata;

        /**
         * Creates a plain object from a BotMemoryMetadata message. Also converts values to other types if specified.
         * @param message BotMemoryMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotMemoryMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotMemoryMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotMemoryMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotLinkedAccount. */
    interface IBotLinkedAccount {

        /** BotLinkedAccount type */
        type?: (AICommon.BotLinkedAccount.BotLinkedAccountType|null);
    }

    /** Represents a BotLinkedAccount. */
    class BotLinkedAccount implements IBotLinkedAccount {

        /**
         * Constructs a new BotLinkedAccount.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotLinkedAccount);

        /** BotLinkedAccount type. */
        public type: AICommon.BotLinkedAccount.BotLinkedAccountType;

        /**
         * Creates a new BotLinkedAccount instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotLinkedAccount instance
         */
        public static create(properties?: AICommon.IBotLinkedAccount): AICommon.BotLinkedAccount;

        /**
         * Encodes the specified BotLinkedAccount message. Does not implicitly {@link AICommon.BotLinkedAccount.verify|verify} messages.
         * @param message BotLinkedAccount message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotLinkedAccount, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotLinkedAccount message, length delimited. Does not implicitly {@link AICommon.BotLinkedAccount.verify|verify} messages.
         * @param message BotLinkedAccount message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotLinkedAccount, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotLinkedAccount message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotLinkedAccount
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotLinkedAccount;

        /**
         * Decodes a BotLinkedAccount message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotLinkedAccount
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotLinkedAccount;

        /**
         * Verifies a BotLinkedAccount message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotLinkedAccount message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotLinkedAccount
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotLinkedAccount;

        /**
         * Creates a plain object from a BotLinkedAccount message. Also converts values to other types if specified.
         * @param message BotLinkedAccount
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotLinkedAccount, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotLinkedAccount to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotLinkedAccount
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotLinkedAccount {

        /** BotLinkedAccountType enum. */
        enum BotLinkedAccountType {
            BOT_LINKED_ACCOUNT_TYPE_1P = 0
        }
    }

    /** Properties of a BotLinkedAccountsMetadata. */
    interface IBotLinkedAccountsMetadata {

        /** BotLinkedAccountsMetadata accounts */
        accounts?: (AICommon.IBotLinkedAccount[]|null);

        /** BotLinkedAccountsMetadata acAuthTokens */
        acAuthTokens?: (Uint8Array|null);

        /** BotLinkedAccountsMetadata acErrorCode */
        acErrorCode?: (number|null);
    }

    /** Represents a BotLinkedAccountsMetadata. */
    class BotLinkedAccountsMetadata implements IBotLinkedAccountsMetadata {

        /**
         * Constructs a new BotLinkedAccountsMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotLinkedAccountsMetadata);

        /** BotLinkedAccountsMetadata accounts. */
        public accounts: AICommon.IBotLinkedAccount[];

        /** BotLinkedAccountsMetadata acAuthTokens. */
        public acAuthTokens: Uint8Array;

        /** BotLinkedAccountsMetadata acErrorCode. */
        public acErrorCode: number;

        /**
         * Creates a new BotLinkedAccountsMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotLinkedAccountsMetadata instance
         */
        public static create(properties?: AICommon.IBotLinkedAccountsMetadata): AICommon.BotLinkedAccountsMetadata;

        /**
         * Encodes the specified BotLinkedAccountsMetadata message. Does not implicitly {@link AICommon.BotLinkedAccountsMetadata.verify|verify} messages.
         * @param message BotLinkedAccountsMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotLinkedAccountsMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotLinkedAccountsMetadata message, length delimited. Does not implicitly {@link AICommon.BotLinkedAccountsMetadata.verify|verify} messages.
         * @param message BotLinkedAccountsMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotLinkedAccountsMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotLinkedAccountsMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotLinkedAccountsMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotLinkedAccountsMetadata;

        /**
         * Decodes a BotLinkedAccountsMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotLinkedAccountsMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotLinkedAccountsMetadata;

        /**
         * Verifies a BotLinkedAccountsMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotLinkedAccountsMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotLinkedAccountsMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotLinkedAccountsMetadata;

        /**
         * Creates a plain object from a BotLinkedAccountsMetadata message. Also converts values to other types if specified.
         * @param message BotLinkedAccountsMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotLinkedAccountsMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotLinkedAccountsMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotLinkedAccountsMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotPromptSuggestion. */
    interface IBotPromptSuggestion {

        /** BotPromptSuggestion prompt */
        prompt?: (string|null);

        /** BotPromptSuggestion promptId */
        promptId?: (string|null);
    }

    /** Represents a BotPromptSuggestion. */
    class BotPromptSuggestion implements IBotPromptSuggestion {

        /**
         * Constructs a new BotPromptSuggestion.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotPromptSuggestion);

        /** BotPromptSuggestion prompt. */
        public prompt: string;

        /** BotPromptSuggestion promptId. */
        public promptId: string;

        /**
         * Creates a new BotPromptSuggestion instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotPromptSuggestion instance
         */
        public static create(properties?: AICommon.IBotPromptSuggestion): AICommon.BotPromptSuggestion;

        /**
         * Encodes the specified BotPromptSuggestion message. Does not implicitly {@link AICommon.BotPromptSuggestion.verify|verify} messages.
         * @param message BotPromptSuggestion message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotPromptSuggestion, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotPromptSuggestion message, length delimited. Does not implicitly {@link AICommon.BotPromptSuggestion.verify|verify} messages.
         * @param message BotPromptSuggestion message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotPromptSuggestion, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotPromptSuggestion message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotPromptSuggestion
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotPromptSuggestion;

        /**
         * Decodes a BotPromptSuggestion message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotPromptSuggestion
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotPromptSuggestion;

        /**
         * Verifies a BotPromptSuggestion message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotPromptSuggestion message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotPromptSuggestion
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotPromptSuggestion;

        /**
         * Creates a plain object from a BotPromptSuggestion message. Also converts values to other types if specified.
         * @param message BotPromptSuggestion
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotPromptSuggestion, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotPromptSuggestion to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotPromptSuggestion
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotPromptSuggestions. */
    interface IBotPromptSuggestions {

        /** BotPromptSuggestions suggestions */
        suggestions?: (AICommon.IBotPromptSuggestion[]|null);
    }

    /** Represents a BotPromptSuggestions. */
    class BotPromptSuggestions implements IBotPromptSuggestions {

        /**
         * Constructs a new BotPromptSuggestions.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotPromptSuggestions);

        /** BotPromptSuggestions suggestions. */
        public suggestions: AICommon.IBotPromptSuggestion[];

        /**
         * Creates a new BotPromptSuggestions instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotPromptSuggestions instance
         */
        public static create(properties?: AICommon.IBotPromptSuggestions): AICommon.BotPromptSuggestions;

        /**
         * Encodes the specified BotPromptSuggestions message. Does not implicitly {@link AICommon.BotPromptSuggestions.verify|verify} messages.
         * @param message BotPromptSuggestions message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotPromptSuggestions, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotPromptSuggestions message, length delimited. Does not implicitly {@link AICommon.BotPromptSuggestions.verify|verify} messages.
         * @param message BotPromptSuggestions message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotPromptSuggestions, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotPromptSuggestions message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotPromptSuggestions
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotPromptSuggestions;

        /**
         * Decodes a BotPromptSuggestions message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotPromptSuggestions
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotPromptSuggestions;

        /**
         * Verifies a BotPromptSuggestions message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotPromptSuggestions message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotPromptSuggestions
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotPromptSuggestions;

        /**
         * Creates a plain object from a BotPromptSuggestions message. Also converts values to other types if specified.
         * @param message BotPromptSuggestions
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotPromptSuggestions, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotPromptSuggestions to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotPromptSuggestions
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotSuggestedPromptMetadata. */
    interface IBotSuggestedPromptMetadata {

        /** BotSuggestedPromptMetadata suggestedPrompts */
        suggestedPrompts?: (string[]|null);

        /** BotSuggestedPromptMetadata selectedPromptIndex */
        selectedPromptIndex?: (number|null);

        /** BotSuggestedPromptMetadata promptSuggestions */
        promptSuggestions?: (AICommon.IBotPromptSuggestions|null);

        /** BotSuggestedPromptMetadata selectedPromptId */
        selectedPromptId?: (string|null);
    }

    /** Represents a BotSuggestedPromptMetadata. */
    class BotSuggestedPromptMetadata implements IBotSuggestedPromptMetadata {

        /**
         * Constructs a new BotSuggestedPromptMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotSuggestedPromptMetadata);

        /** BotSuggestedPromptMetadata suggestedPrompts. */
        public suggestedPrompts: string[];

        /** BotSuggestedPromptMetadata selectedPromptIndex. */
        public selectedPromptIndex: number;

        /** BotSuggestedPromptMetadata promptSuggestions. */
        public promptSuggestions?: (AICommon.IBotPromptSuggestions|null);

        /** BotSuggestedPromptMetadata selectedPromptId. */
        public selectedPromptId: string;

        /**
         * Creates a new BotSuggestedPromptMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotSuggestedPromptMetadata instance
         */
        public static create(properties?: AICommon.IBotSuggestedPromptMetadata): AICommon.BotSuggestedPromptMetadata;

        /**
         * Encodes the specified BotSuggestedPromptMetadata message. Does not implicitly {@link AICommon.BotSuggestedPromptMetadata.verify|verify} messages.
         * @param message BotSuggestedPromptMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotSuggestedPromptMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotSuggestedPromptMetadata message, length delimited. Does not implicitly {@link AICommon.BotSuggestedPromptMetadata.verify|verify} messages.
         * @param message BotSuggestedPromptMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotSuggestedPromptMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotSuggestedPromptMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotSuggestedPromptMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotSuggestedPromptMetadata;

        /**
         * Decodes a BotSuggestedPromptMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotSuggestedPromptMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotSuggestedPromptMetadata;

        /**
         * Verifies a BotSuggestedPromptMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotSuggestedPromptMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotSuggestedPromptMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotSuggestedPromptMetadata;

        /**
         * Creates a plain object from a BotSuggestedPromptMetadata message. Also converts values to other types if specified.
         * @param message BotSuggestedPromptMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotSuggestedPromptMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotSuggestedPromptMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotSuggestedPromptMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a BotPluginMetadata. */
    interface IBotPluginMetadata {

        /** BotPluginMetadata provider */
        provider?: (AICommon.BotPluginMetadata.SearchProvider|null);

        /** BotPluginMetadata pluginType */
        pluginType?: (AICommon.BotPluginMetadata.PluginType|null);

        /** BotPluginMetadata thumbnailCdnUrl */
        thumbnailCdnUrl?: (string|null);

        /** BotPluginMetadata profilePhotoCdnUrl */
        profilePhotoCdnUrl?: (string|null);

        /** BotPluginMetadata searchProviderUrl */
        searchProviderUrl?: (string|null);

        /** BotPluginMetadata referenceIndex */
        referenceIndex?: (number|null);

        /** BotPluginMetadata expectedLinksCount */
        expectedLinksCount?: (number|null);

        /** BotPluginMetadata searchQuery */
        searchQuery?: (string|null);

        /** BotPluginMetadata parentPluginMessageKey */
        parentPluginMessageKey?: (Protocol.IMessageKey|null);

        /** BotPluginMetadata deprecatedField */
        deprecatedField?: (AICommon.BotPluginMetadata.PluginType|null);

        /** BotPluginMetadata parentPluginType */
        parentPluginType?: (AICommon.BotPluginMetadata.PluginType|null);

        /** BotPluginMetadata faviconCdnUrl */
        faviconCdnUrl?: (string|null);
    }

    /** Represents a BotPluginMetadata. */
    class BotPluginMetadata implements IBotPluginMetadata {

        /**
         * Constructs a new BotPluginMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotPluginMetadata);

        /** BotPluginMetadata provider. */
        public provider: AICommon.BotPluginMetadata.SearchProvider;

        /** BotPluginMetadata pluginType. */
        public pluginType: AICommon.BotPluginMetadata.PluginType;

        /** BotPluginMetadata thumbnailCdnUrl. */
        public thumbnailCdnUrl: string;

        /** BotPluginMetadata profilePhotoCdnUrl. */
        public profilePhotoCdnUrl: string;

        /** BotPluginMetadata searchProviderUrl. */
        public searchProviderUrl: string;

        /** BotPluginMetadata referenceIndex. */
        public referenceIndex: number;

        /** BotPluginMetadata expectedLinksCount. */
        public expectedLinksCount: number;

        /** BotPluginMetadata searchQuery. */
        public searchQuery: string;

        /** BotPluginMetadata parentPluginMessageKey. */
        public parentPluginMessageKey?: (Protocol.IMessageKey|null);

        /** BotPluginMetadata deprecatedField. */
        public deprecatedField: AICommon.BotPluginMetadata.PluginType;

        /** BotPluginMetadata parentPluginType. */
        public parentPluginType: AICommon.BotPluginMetadata.PluginType;

        /** BotPluginMetadata faviconCdnUrl. */
        public faviconCdnUrl: string;

        /**
         * Creates a new BotPluginMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotPluginMetadata instance
         */
        public static create(properties?: AICommon.IBotPluginMetadata): AICommon.BotPluginMetadata;

        /**
         * Encodes the specified BotPluginMetadata message. Does not implicitly {@link AICommon.BotPluginMetadata.verify|verify} messages.
         * @param message BotPluginMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotPluginMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotPluginMetadata message, length delimited. Does not implicitly {@link AICommon.BotPluginMetadata.verify|verify} messages.
         * @param message BotPluginMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotPluginMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotPluginMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotPluginMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotPluginMetadata;

        /**
         * Decodes a BotPluginMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotPluginMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotPluginMetadata;

        /**
         * Verifies a BotPluginMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotPluginMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotPluginMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotPluginMetadata;

        /**
         * Creates a plain object from a BotPluginMetadata message. Also converts values to other types if specified.
         * @param message BotPluginMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotPluginMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotPluginMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotPluginMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace BotPluginMetadata {

        /** PluginType enum. */
        enum PluginType {
            UNKNOWN_PLUGIN = 0,
            REELS = 1,
            SEARCH = 2
        }

        /** SearchProvider enum. */
        enum SearchProvider {
            UNKNOWN = 0,
            BING = 1,
            GOOGLE = 2,
            SUPPORT = 3
        }
    }

    /** Properties of a BotAvatarMetadata. */
    interface IBotAvatarMetadata {

        /** BotAvatarMetadata sentiment */
        sentiment?: (number|null);

        /** BotAvatarMetadata behaviorGraph */
        behaviorGraph?: (string|null);

        /** BotAvatarMetadata action */
        action?: (number|null);

        /** BotAvatarMetadata intensity */
        intensity?: (number|null);

        /** BotAvatarMetadata wordCount */
        wordCount?: (number|null);
    }

    /** Represents a BotAvatarMetadata. */
    class BotAvatarMetadata implements IBotAvatarMetadata {

        /**
         * Constructs a new BotAvatarMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: AICommon.IBotAvatarMetadata);

        /** BotAvatarMetadata sentiment. */
        public sentiment: number;

        /** BotAvatarMetadata behaviorGraph. */
        public behaviorGraph: string;

        /** BotAvatarMetadata action. */
        public action: number;

        /** BotAvatarMetadata intensity. */
        public intensity: number;

        /** BotAvatarMetadata wordCount. */
        public wordCount: number;

        /**
         * Creates a new BotAvatarMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns BotAvatarMetadata instance
         */
        public static create(properties?: AICommon.IBotAvatarMetadata): AICommon.BotAvatarMetadata;

        /**
         * Encodes the specified BotAvatarMetadata message. Does not implicitly {@link AICommon.BotAvatarMetadata.verify|verify} messages.
         * @param message BotAvatarMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: AICommon.IBotAvatarMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified BotAvatarMetadata message, length delimited. Does not implicitly {@link AICommon.BotAvatarMetadata.verify|verify} messages.
         * @param message BotAvatarMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: AICommon.IBotAvatarMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a BotAvatarMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns BotAvatarMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): AICommon.BotAvatarMetadata;

        /**
         * Decodes a BotAvatarMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns BotAvatarMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): AICommon.BotAvatarMetadata;

        /**
         * Verifies a BotAvatarMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a BotAvatarMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns BotAvatarMetadata
         */
        public static fromObject(object: { [k: string]: any }): AICommon.BotAvatarMetadata;

        /**
         * Creates a plain object from a BotAvatarMetadata message. Also converts values to other types if specified.
         * @param message BotAvatarMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: AICommon.BotAvatarMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this BotAvatarMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for BotAvatarMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** AIRichResponseSubMessageType enum. */
    enum AIRichResponseSubMessageType {
        AI_RICH_RESPONSE_UNKNOWN = 0,
        AI_RICH_RESPONSE_GRID_IMAGE = 1,
        AI_RICH_RESPONSE_TEXT = 2,
        AI_RICH_RESPONSE_INLINE_IMAGE = 3,
        AI_RICH_RESPONSE_TABLE = 4,
        AI_RICH_RESPONSE_CODE = 5,
        AI_RICH_RESPONSE_DYNAMIC = 6,
        AI_RICH_RESPONSE_MAP = 7,
        AI_RICH_RESPONSE_LATEX = 8,
        AI_RICH_RESPONSE_CONTENT_ITEMS = 9
    }

    /** AIRichResponseMessageType enum. */
    enum AIRichResponseMessageType {
        AI_RICH_RESPONSE_TYPE_UNKNOWN = 0,
        AI_RICH_RESPONSE_TYPE_STANDARD = 1
    }

    /** BotSessionSource enum. */
    enum BotSessionSource {
        NONE = 0,
        NULL_STATE = 1,
        TYPEAHEAD = 2,
        USER_INPUT = 3,
        EMU_FLASH = 4,
        EMU_FLASH_FOLLOWUP = 5,
        VOICE = 6
    }

    /** BotMetricsThreadEntryPoint enum. */
    enum BotMetricsThreadEntryPoint {
        AI_TAB_THREAD = 1,
        AI_HOME_THREAD = 2,
        AI_DEEPLINK_IMMERSIVE_THREAD = 3,
        AI_DEEPLINK_THREAD = 4,
        ASK_META_AI_CONTEXT_MENU_THREAD = 5
    }

    /** BotMetricsEntryPoint enum. */
    enum BotMetricsEntryPoint {
        UNDEFINED_ENTRY_POINT = 0,
        FAVICON = 1,
        CHATLIST = 2,
        AISEARCH_NULL_STATE_PAPER_PLANE = 3,
        AISEARCH_NULL_STATE_SUGGESTION = 4,
        AISEARCH_TYPE_AHEAD_SUGGESTION = 5,
        AISEARCH_TYPE_AHEAD_PAPER_PLANE = 6,
        AISEARCH_TYPE_AHEAD_RESULT_CHATLIST = 7,
        AISEARCH_TYPE_AHEAD_RESULT_MESSAGES = 8,
        AIVOICE_SEARCH_BAR = 9,
        AIVOICE_FAVICON = 10,
        AISTUDIO = 11,
        DEEPLINK = 12,
        NOTIFICATION = 13,
        PROFILE_MESSAGE_BUTTON = 14,
        FORWARD = 15,
        APP_SHORTCUT = 16,
        FF_FAMILY = 17,
        AI_TAB = 18,
        AI_HOME = 19,
        AI_DEEPLINK_IMMERSIVE = 20,
        AI_DEEPLINK = 21,
        META_AI_CHAT_SHORTCUT_AI_STUDIO = 22,
        UGC_CHAT_SHORTCUT_AI_STUDIO = 23,
        NEW_CHAT_AI_STUDIO = 24,
        AIVOICE_FAVICON_CALL_HISTORY = 25,
        ASK_META_AI_CONTEXT_MENU = 26,
        ASK_META_AI_CONTEXT_MENU_1ON1 = 27,
        ASK_META_AI_CONTEXT_MENU_GROUP = 28,
        INVOKE_META_AI_1ON1 = 29,
        INVOKE_META_AI_GROUP = 30,
        META_AI_FORWARD = 31,
        NEW_CHAT_AI_CONTACT = 32,
        MESSAGE_QUICK_ACTION = 33,
        ATTACHMENT_TRAY = 34
    }
}

/** Namespace StatusAttributions. */
export namespace StatusAttributions {

    /** Properties of a StatusAttribution. */
    interface IStatusAttribution {

        /** StatusAttribution type */
        type?: (StatusAttributions.StatusAttribution.Type|null);

        /** StatusAttribution actionUrl */
        actionUrl?: (string|null);

        /** StatusAttribution statusReshare */
        statusReshare?: (StatusAttributions.StatusAttribution.IStatusReshare|null);

        /** StatusAttribution externalShare */
        externalShare?: (StatusAttributions.StatusAttribution.IExternalShare|null);

        /** StatusAttribution music */
        music?: (StatusAttributions.StatusAttribution.IMusic|null);

        /** StatusAttribution groupStatus */
        groupStatus?: (StatusAttributions.StatusAttribution.IGroupStatus|null);

        /** StatusAttribution rlAttribution */
        rlAttribution?: (StatusAttributions.StatusAttribution.IRLAttribution|null);

        /** StatusAttribution aiCreatedAttribution */
        aiCreatedAttribution?: (StatusAttributions.StatusAttribution.IAiCreatedAttribution|null);
    }

    /** Represents a StatusAttribution. */
    class StatusAttribution implements IStatusAttribution {

        /**
         * Constructs a new StatusAttribution.
         * @param [properties] Properties to set
         */
        constructor(properties?: StatusAttributions.IStatusAttribution);

        /** StatusAttribution type. */
        public type: StatusAttributions.StatusAttribution.Type;

        /** StatusAttribution actionUrl. */
        public actionUrl: string;

        /** StatusAttribution statusReshare. */
        public statusReshare?: (StatusAttributions.StatusAttribution.IStatusReshare|null);

        /** StatusAttribution externalShare. */
        public externalShare?: (StatusAttributions.StatusAttribution.IExternalShare|null);

        /** StatusAttribution music. */
        public music?: (StatusAttributions.StatusAttribution.IMusic|null);

        /** StatusAttribution groupStatus. */
        public groupStatus?: (StatusAttributions.StatusAttribution.IGroupStatus|null);

        /** StatusAttribution rlAttribution. */
        public rlAttribution?: (StatusAttributions.StatusAttribution.IRLAttribution|null);

        /** StatusAttribution aiCreatedAttribution. */
        public aiCreatedAttribution?: (StatusAttributions.StatusAttribution.IAiCreatedAttribution|null);

        /** StatusAttribution attributionData. */
        public attributionData?: ("statusReshare"|"externalShare"|"music"|"groupStatus"|"rlAttribution"|"aiCreatedAttribution");

        /**
         * Creates a new StatusAttribution instance using the specified properties.
         * @param [properties] Properties to set
         * @returns StatusAttribution instance
         */
        public static create(properties?: StatusAttributions.IStatusAttribution): StatusAttributions.StatusAttribution;

        /**
         * Encodes the specified StatusAttribution message. Does not implicitly {@link StatusAttributions.StatusAttribution.verify|verify} messages.
         * @param message StatusAttribution message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: StatusAttributions.IStatusAttribution, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified StatusAttribution message, length delimited. Does not implicitly {@link StatusAttributions.StatusAttribution.verify|verify} messages.
         * @param message StatusAttribution message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: StatusAttributions.IStatusAttribution, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a StatusAttribution message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns StatusAttribution
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): StatusAttributions.StatusAttribution;

        /**
         * Decodes a StatusAttribution message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns StatusAttribution
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): StatusAttributions.StatusAttribution;

        /**
         * Verifies a StatusAttribution message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a StatusAttribution message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns StatusAttribution
         */
        public static fromObject(object: { [k: string]: any }): StatusAttributions.StatusAttribution;

        /**
         * Creates a plain object from a StatusAttribution message. Also converts values to other types if specified.
         * @param message StatusAttribution
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: StatusAttributions.StatusAttribution, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this StatusAttribution to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for StatusAttribution
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace StatusAttribution {

        /** Properties of an AiCreatedAttribution. */
        interface IAiCreatedAttribution {

            /** AiCreatedAttribution source */
            source?: (StatusAttributions.StatusAttribution.AiCreatedAttribution.Source|null);
        }

        /** Represents an AiCreatedAttribution. */
        class AiCreatedAttribution implements IAiCreatedAttribution {

            /**
             * Constructs a new AiCreatedAttribution.
             * @param [properties] Properties to set
             */
            constructor(properties?: StatusAttributions.StatusAttribution.IAiCreatedAttribution);

            /** AiCreatedAttribution source. */
            public source: StatusAttributions.StatusAttribution.AiCreatedAttribution.Source;

            /**
             * Creates a new AiCreatedAttribution instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AiCreatedAttribution instance
             */
            public static create(properties?: StatusAttributions.StatusAttribution.IAiCreatedAttribution): StatusAttributions.StatusAttribution.AiCreatedAttribution;

            /**
             * Encodes the specified AiCreatedAttribution message. Does not implicitly {@link StatusAttributions.StatusAttribution.AiCreatedAttribution.verify|verify} messages.
             * @param message AiCreatedAttribution message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: StatusAttributions.StatusAttribution.IAiCreatedAttribution, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AiCreatedAttribution message, length delimited. Does not implicitly {@link StatusAttributions.StatusAttribution.AiCreatedAttribution.verify|verify} messages.
             * @param message AiCreatedAttribution message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: StatusAttributions.StatusAttribution.IAiCreatedAttribution, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AiCreatedAttribution message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AiCreatedAttribution
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): StatusAttributions.StatusAttribution.AiCreatedAttribution;

            /**
             * Decodes an AiCreatedAttribution message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AiCreatedAttribution
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): StatusAttributions.StatusAttribution.AiCreatedAttribution;

            /**
             * Verifies an AiCreatedAttribution message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AiCreatedAttribution message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AiCreatedAttribution
             */
            public static fromObject(object: { [k: string]: any }): StatusAttributions.StatusAttribution.AiCreatedAttribution;

            /**
             * Creates a plain object from an AiCreatedAttribution message. Also converts values to other types if specified.
             * @param message AiCreatedAttribution
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: StatusAttributions.StatusAttribution.AiCreatedAttribution, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AiCreatedAttribution to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AiCreatedAttribution
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace AiCreatedAttribution {

            /** Source enum. */
            enum Source {
                UNKNOWN = 0,
                STATUS_MIMICRY = 1
            }
        }

        /** Properties of an ExternalShare. */
        interface IExternalShare {

            /** ExternalShare actionUrl */
            actionUrl?: (string|null);

            /** ExternalShare source */
            source?: (StatusAttributions.StatusAttribution.ExternalShare.Source|null);

            /** ExternalShare duration */
            duration?: (number|null);

            /** ExternalShare actionFallbackUrl */
            actionFallbackUrl?: (string|null);
        }

        /** Represents an ExternalShare. */
        class ExternalShare implements IExternalShare {

            /**
             * Constructs a new ExternalShare.
             * @param [properties] Properties to set
             */
            constructor(properties?: StatusAttributions.StatusAttribution.IExternalShare);

            /** ExternalShare actionUrl. */
            public actionUrl: string;

            /** ExternalShare source. */
            public source: StatusAttributions.StatusAttribution.ExternalShare.Source;

            /** ExternalShare duration. */
            public duration: number;

            /** ExternalShare actionFallbackUrl. */
            public actionFallbackUrl: string;

            /**
             * Creates a new ExternalShare instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ExternalShare instance
             */
            public static create(properties?: StatusAttributions.StatusAttribution.IExternalShare): StatusAttributions.StatusAttribution.ExternalShare;

            /**
             * Encodes the specified ExternalShare message. Does not implicitly {@link StatusAttributions.StatusAttribution.ExternalShare.verify|verify} messages.
             * @param message ExternalShare message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: StatusAttributions.StatusAttribution.IExternalShare, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ExternalShare message, length delimited. Does not implicitly {@link StatusAttributions.StatusAttribution.ExternalShare.verify|verify} messages.
             * @param message ExternalShare message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: StatusAttributions.StatusAttribution.IExternalShare, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an ExternalShare message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ExternalShare
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): StatusAttributions.StatusAttribution.ExternalShare;

            /**
             * Decodes an ExternalShare message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ExternalShare
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): StatusAttributions.StatusAttribution.ExternalShare;

            /**
             * Verifies an ExternalShare message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an ExternalShare message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ExternalShare
             */
            public static fromObject(object: { [k: string]: any }): StatusAttributions.StatusAttribution.ExternalShare;

            /**
             * Creates a plain object from an ExternalShare message. Also converts values to other types if specified.
             * @param message ExternalShare
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: StatusAttributions.StatusAttribution.ExternalShare, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ExternalShare to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ExternalShare
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ExternalShare {

            /** Source enum. */
            enum Source {
                UNKNOWN = 0,
                INSTAGRAM = 1,
                FACEBOOK = 2,
                MESSENGER = 3,
                SPOTIFY = 4,
                YOUTUBE = 5,
                PINTEREST = 6,
                THREADS = 7,
                APPLE_MUSIC = 8
            }
        }

        /** Properties of a GroupStatus. */
        interface IGroupStatus {

            /** GroupStatus authorJid */
            authorJid?: (string|null);
        }

        /** Represents a GroupStatus. */
        class GroupStatus implements IGroupStatus {

            /**
             * Constructs a new GroupStatus.
             * @param [properties] Properties to set
             */
            constructor(properties?: StatusAttributions.StatusAttribution.IGroupStatus);

            /** GroupStatus authorJid. */
            public authorJid: string;

            /**
             * Creates a new GroupStatus instance using the specified properties.
             * @param [properties] Properties to set
             * @returns GroupStatus instance
             */
            public static create(properties?: StatusAttributions.StatusAttribution.IGroupStatus): StatusAttributions.StatusAttribution.GroupStatus;

            /**
             * Encodes the specified GroupStatus message. Does not implicitly {@link StatusAttributions.StatusAttribution.GroupStatus.verify|verify} messages.
             * @param message GroupStatus message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: StatusAttributions.StatusAttribution.IGroupStatus, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified GroupStatus message, length delimited. Does not implicitly {@link StatusAttributions.StatusAttribution.GroupStatus.verify|verify} messages.
             * @param message GroupStatus message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: StatusAttributions.StatusAttribution.IGroupStatus, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a GroupStatus message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns GroupStatus
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): StatusAttributions.StatusAttribution.GroupStatus;

            /**
             * Decodes a GroupStatus message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns GroupStatus
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): StatusAttributions.StatusAttribution.GroupStatus;

            /**
             * Verifies a GroupStatus message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a GroupStatus message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns GroupStatus
             */
            public static fromObject(object: { [k: string]: any }): StatusAttributions.StatusAttribution.GroupStatus;

            /**
             * Creates a plain object from a GroupStatus message. Also converts values to other types if specified.
             * @param message GroupStatus
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: StatusAttributions.StatusAttribution.GroupStatus, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this GroupStatus to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for GroupStatus
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a Music. */
        interface IMusic {

            /** Music authorName */
            authorName?: (string|null);

            /** Music songId */
            songId?: (string|null);

            /** Music title */
            title?: (string|null);

            /** Music author */
            author?: (string|null);

            /** Music artistAttribution */
            artistAttribution?: (string|null);

            /** Music isExplicit */
            isExplicit?: (boolean|null);
        }

        /** Represents a Music. */
        class Music implements IMusic {

            /**
             * Constructs a new Music.
             * @param [properties] Properties to set
             */
            constructor(properties?: StatusAttributions.StatusAttribution.IMusic);

            /** Music authorName. */
            public authorName: string;

            /** Music songId. */
            public songId: string;

            /** Music title. */
            public title: string;

            /** Music author. */
            public author: string;

            /** Music artistAttribution. */
            public artistAttribution: string;

            /** Music isExplicit. */
            public isExplicit: boolean;

            /**
             * Creates a new Music instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Music instance
             */
            public static create(properties?: StatusAttributions.StatusAttribution.IMusic): StatusAttributions.StatusAttribution.Music;

            /**
             * Encodes the specified Music message. Does not implicitly {@link StatusAttributions.StatusAttribution.Music.verify|verify} messages.
             * @param message Music message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: StatusAttributions.StatusAttribution.IMusic, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Music message, length delimited. Does not implicitly {@link StatusAttributions.StatusAttribution.Music.verify|verify} messages.
             * @param message Music message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: StatusAttributions.StatusAttribution.IMusic, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a Music message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Music
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): StatusAttributions.StatusAttribution.Music;

            /**
             * Decodes a Music message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Music
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): StatusAttributions.StatusAttribution.Music;

            /**
             * Verifies a Music message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a Music message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Music
             */
            public static fromObject(object: { [k: string]: any }): StatusAttributions.StatusAttribution.Music;

            /**
             * Creates a plain object from a Music message. Also converts values to other types if specified.
             * @param message Music
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: StatusAttributions.StatusAttribution.Music, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Music to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Music
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a RLAttribution. */
        interface IRLAttribution {

            /** RLAttribution source */
            source?: (StatusAttributions.StatusAttribution.RLAttribution.Source|null);
        }

        /** Represents a RLAttribution. */
        class RLAttribution implements IRLAttribution {

            /**
             * Constructs a new RLAttribution.
             * @param [properties] Properties to set
             */
            constructor(properties?: StatusAttributions.StatusAttribution.IRLAttribution);

            /** RLAttribution source. */
            public source: StatusAttributions.StatusAttribution.RLAttribution.Source;

            /**
             * Creates a new RLAttribution instance using the specified properties.
             * @param [properties] Properties to set
             * @returns RLAttribution instance
             */
            public static create(properties?: StatusAttributions.StatusAttribution.IRLAttribution): StatusAttributions.StatusAttribution.RLAttribution;

            /**
             * Encodes the specified RLAttribution message. Does not implicitly {@link StatusAttributions.StatusAttribution.RLAttribution.verify|verify} messages.
             * @param message RLAttribution message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: StatusAttributions.StatusAttribution.IRLAttribution, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified RLAttribution message, length delimited. Does not implicitly {@link StatusAttributions.StatusAttribution.RLAttribution.verify|verify} messages.
             * @param message RLAttribution message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: StatusAttributions.StatusAttribution.IRLAttribution, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a RLAttribution message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns RLAttribution
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): StatusAttributions.StatusAttribution.RLAttribution;

            /**
             * Decodes a RLAttribution message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns RLAttribution
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): StatusAttributions.StatusAttribution.RLAttribution;

            /**
             * Verifies a RLAttribution message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a RLAttribution message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns RLAttribution
             */
            public static fromObject(object: { [k: string]: any }): StatusAttributions.StatusAttribution.RLAttribution;

            /**
             * Creates a plain object from a RLAttribution message. Also converts values to other types if specified.
             * @param message RLAttribution
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: StatusAttributions.StatusAttribution.RLAttribution, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this RLAttribution to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for RLAttribution
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace RLAttribution {

            /** Source enum. */
            enum Source {
                UNKNOWN = 0,
                RAY_BAN_META_GLASSES = 1,
                OAKLEY_META_GLASSES = 2,
                HYPERNOVA_GLASSES = 3
            }
        }

        /** Properties of a StatusReshare. */
        interface IStatusReshare {

            /** StatusReshare source */
            source?: (StatusAttributions.StatusAttribution.StatusReshare.Source|null);

            /** StatusReshare metadata */
            metadata?: (StatusAttributions.StatusAttribution.StatusReshare.IMetadata|null);
        }

        /** Represents a StatusReshare. */
        class StatusReshare implements IStatusReshare {

            /**
             * Constructs a new StatusReshare.
             * @param [properties] Properties to set
             */
            constructor(properties?: StatusAttributions.StatusAttribution.IStatusReshare);

            /** StatusReshare source. */
            public source: StatusAttributions.StatusAttribution.StatusReshare.Source;

            /** StatusReshare metadata. */
            public metadata?: (StatusAttributions.StatusAttribution.StatusReshare.IMetadata|null);

            /**
             * Creates a new StatusReshare instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StatusReshare instance
             */
            public static create(properties?: StatusAttributions.StatusAttribution.IStatusReshare): StatusAttributions.StatusAttribution.StatusReshare;

            /**
             * Encodes the specified StatusReshare message. Does not implicitly {@link StatusAttributions.StatusAttribution.StatusReshare.verify|verify} messages.
             * @param message StatusReshare message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: StatusAttributions.StatusAttribution.IStatusReshare, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StatusReshare message, length delimited. Does not implicitly {@link StatusAttributions.StatusAttribution.StatusReshare.verify|verify} messages.
             * @param message StatusReshare message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: StatusAttributions.StatusAttribution.IStatusReshare, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StatusReshare message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StatusReshare
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): StatusAttributions.StatusAttribution.StatusReshare;

            /**
             * Decodes a StatusReshare message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StatusReshare
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): StatusAttributions.StatusAttribution.StatusReshare;

            /**
             * Verifies a StatusReshare message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StatusReshare message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StatusReshare
             */
            public static fromObject(object: { [k: string]: any }): StatusAttributions.StatusAttribution.StatusReshare;

            /**
             * Creates a plain object from a StatusReshare message. Also converts values to other types if specified.
             * @param message StatusReshare
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: StatusAttributions.StatusAttribution.StatusReshare, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StatusReshare to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StatusReshare
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace StatusReshare {

            /** Properties of a Metadata. */
            interface IMetadata {

                /** Metadata duration */
                duration?: (number|null);

                /** Metadata channelJid */
                channelJid?: (string|null);

                /** Metadata channelMessageId */
                channelMessageId?: (number|null);

                /** Metadata hasMultipleReshares */
                hasMultipleReshares?: (boolean|null);
            }

            /** Represents a Metadata. */
            class Metadata implements IMetadata {

                /**
                 * Constructs a new Metadata.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: StatusAttributions.StatusAttribution.StatusReshare.IMetadata);

                /** Metadata duration. */
                public duration: number;

                /** Metadata channelJid. */
                public channelJid: string;

                /** Metadata channelMessageId. */
                public channelMessageId: number;

                /** Metadata hasMultipleReshares. */
                public hasMultipleReshares: boolean;

                /**
                 * Creates a new Metadata instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Metadata instance
                 */
                public static create(properties?: StatusAttributions.StatusAttribution.StatusReshare.IMetadata): StatusAttributions.StatusAttribution.StatusReshare.Metadata;

                /**
                 * Encodes the specified Metadata message. Does not implicitly {@link StatusAttributions.StatusAttribution.StatusReshare.Metadata.verify|verify} messages.
                 * @param message Metadata message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: StatusAttributions.StatusAttribution.StatusReshare.IMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Metadata message, length delimited. Does not implicitly {@link StatusAttributions.StatusAttribution.StatusReshare.Metadata.verify|verify} messages.
                 * @param message Metadata message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: StatusAttributions.StatusAttribution.StatusReshare.IMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Metadata message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Metadata
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): StatusAttributions.StatusAttribution.StatusReshare.Metadata;

                /**
                 * Decodes a Metadata message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Metadata
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): StatusAttributions.StatusAttribution.StatusReshare.Metadata;

                /**
                 * Verifies a Metadata message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Metadata message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Metadata
                 */
                public static fromObject(object: { [k: string]: any }): StatusAttributions.StatusAttribution.StatusReshare.Metadata;

                /**
                 * Creates a plain object from a Metadata message. Also converts values to other types if specified.
                 * @param message Metadata
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: StatusAttributions.StatusAttribution.StatusReshare.Metadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Metadata to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Metadata
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Source enum. */
            enum Source {
                UNKNOWN = 0,
                INTERNAL_RESHARE = 1,
                MENTION_RESHARE = 2,
                CHANNEL_RESHARE = 3,
                FORWARD = 4
            }
        }

        /** Type enum. */
        enum Type {
            UNKNOWN = 0,
            RESHARE = 1,
            EXTERNAL_SHARE = 2,
            MUSIC = 3,
            STATUS_MENTION = 4,
            GROUP_STATUS = 5,
            RL_ATTRIBUTION = 6,
            AI_CREATED = 7
        }
    }
}

/** Namespace Adv. */
export namespace Adv {

    /** Properties of a ADVSignedDeviceIdentityHMAC. */
    interface IADVSignedDeviceIdentityHMAC {

        /** ADVSignedDeviceIdentityHMAC details */
        details?: (Uint8Array|null);

        /** ADVSignedDeviceIdentityHMAC hmac */
        hmac?: (Uint8Array|null);

        /** ADVSignedDeviceIdentityHMAC accountType */
        accountType?: (Adv.ADVEncryptionType|null);
    }

    /** Represents a ADVSignedDeviceIdentityHMAC. */
    class ADVSignedDeviceIdentityHMAC implements IADVSignedDeviceIdentityHMAC {

        /**
         * Constructs a new ADVSignedDeviceIdentityHMAC.
         * @param [properties] Properties to set
         */
        constructor(properties?: Adv.IADVSignedDeviceIdentityHMAC);

        /** ADVSignedDeviceIdentityHMAC details. */
        public details: Uint8Array;

        /** ADVSignedDeviceIdentityHMAC hmac. */
        public hmac: Uint8Array;

        /** ADVSignedDeviceIdentityHMAC accountType. */
        public accountType: Adv.ADVEncryptionType;

        /**
         * Creates a new ADVSignedDeviceIdentityHMAC instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ADVSignedDeviceIdentityHMAC instance
         */
        public static create(properties?: Adv.IADVSignedDeviceIdentityHMAC): Adv.ADVSignedDeviceIdentityHMAC;

        /**
         * Encodes the specified ADVSignedDeviceIdentityHMAC message. Does not implicitly {@link Adv.ADVSignedDeviceIdentityHMAC.verify|verify} messages.
         * @param message ADVSignedDeviceIdentityHMAC message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Adv.IADVSignedDeviceIdentityHMAC, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ADVSignedDeviceIdentityHMAC message, length delimited. Does not implicitly {@link Adv.ADVSignedDeviceIdentityHMAC.verify|verify} messages.
         * @param message ADVSignedDeviceIdentityHMAC message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Adv.IADVSignedDeviceIdentityHMAC, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ADVSignedDeviceIdentityHMAC message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ADVSignedDeviceIdentityHMAC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Adv.ADVSignedDeviceIdentityHMAC;

        /**
         * Decodes a ADVSignedDeviceIdentityHMAC message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ADVSignedDeviceIdentityHMAC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Adv.ADVSignedDeviceIdentityHMAC;

        /**
         * Verifies a ADVSignedDeviceIdentityHMAC message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ADVSignedDeviceIdentityHMAC message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ADVSignedDeviceIdentityHMAC
         */
        public static fromObject(object: { [k: string]: any }): Adv.ADVSignedDeviceIdentityHMAC;

        /**
         * Creates a plain object from a ADVSignedDeviceIdentityHMAC message. Also converts values to other types if specified.
         * @param message ADVSignedDeviceIdentityHMAC
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Adv.ADVSignedDeviceIdentityHMAC, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ADVSignedDeviceIdentityHMAC to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ADVSignedDeviceIdentityHMAC
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a ADVSignedDeviceIdentity. */
    interface IADVSignedDeviceIdentity {

        /** ADVSignedDeviceIdentity details */
        details?: (Uint8Array|null);

        /** ADVSignedDeviceIdentity accountSignatureKey */
        accountSignatureKey?: (Uint8Array|null);

        /** ADVSignedDeviceIdentity accountSignature */
        accountSignature?: (Uint8Array|null);

        /** ADVSignedDeviceIdentity deviceSignature */
        deviceSignature?: (Uint8Array|null);
    }

    /** Represents a ADVSignedDeviceIdentity. */
    class ADVSignedDeviceIdentity implements IADVSignedDeviceIdentity {

        /**
         * Constructs a new ADVSignedDeviceIdentity.
         * @param [properties] Properties to set
         */
        constructor(properties?: Adv.IADVSignedDeviceIdentity);

        /** ADVSignedDeviceIdentity details. */
        public details: Uint8Array;

        /** ADVSignedDeviceIdentity accountSignatureKey. */
        public accountSignatureKey: Uint8Array;

        /** ADVSignedDeviceIdentity accountSignature. */
        public accountSignature: Uint8Array;

        /** ADVSignedDeviceIdentity deviceSignature. */
        public deviceSignature: Uint8Array;

        /**
         * Creates a new ADVSignedDeviceIdentity instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ADVSignedDeviceIdentity instance
         */
        public static create(properties?: Adv.IADVSignedDeviceIdentity): Adv.ADVSignedDeviceIdentity;

        /**
         * Encodes the specified ADVSignedDeviceIdentity message. Does not implicitly {@link Adv.ADVSignedDeviceIdentity.verify|verify} messages.
         * @param message ADVSignedDeviceIdentity message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Adv.IADVSignedDeviceIdentity, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ADVSignedDeviceIdentity message, length delimited. Does not implicitly {@link Adv.ADVSignedDeviceIdentity.verify|verify} messages.
         * @param message ADVSignedDeviceIdentity message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Adv.IADVSignedDeviceIdentity, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ADVSignedDeviceIdentity message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ADVSignedDeviceIdentity
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Adv.ADVSignedDeviceIdentity;

        /**
         * Decodes a ADVSignedDeviceIdentity message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ADVSignedDeviceIdentity
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Adv.ADVSignedDeviceIdentity;

        /**
         * Verifies a ADVSignedDeviceIdentity message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ADVSignedDeviceIdentity message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ADVSignedDeviceIdentity
         */
        public static fromObject(object: { [k: string]: any }): Adv.ADVSignedDeviceIdentity;

        /**
         * Creates a plain object from a ADVSignedDeviceIdentity message. Also converts values to other types if specified.
         * @param message ADVSignedDeviceIdentity
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Adv.ADVSignedDeviceIdentity, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ADVSignedDeviceIdentity to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ADVSignedDeviceIdentity
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a ADVDeviceIdentity. */
    interface IADVDeviceIdentity {

        /** ADVDeviceIdentity rawId */
        rawId?: (number|null);

        /** ADVDeviceIdentity timestamp */
        timestamp?: (number|Long|null);

        /** ADVDeviceIdentity keyIndex */
        keyIndex?: (number|null);

        /** ADVDeviceIdentity accountType */
        accountType?: (Adv.ADVEncryptionType|null);

        /** ADVDeviceIdentity deviceType */
        deviceType?: (Adv.ADVEncryptionType|null);
    }

    /** Represents a ADVDeviceIdentity. */
    class ADVDeviceIdentity implements IADVDeviceIdentity {

        /**
         * Constructs a new ADVDeviceIdentity.
         * @param [properties] Properties to set
         */
        constructor(properties?: Adv.IADVDeviceIdentity);

        /** ADVDeviceIdentity rawId. */
        public rawId: number;

        /** ADVDeviceIdentity timestamp. */
        public timestamp: (number|Long);

        /** ADVDeviceIdentity keyIndex. */
        public keyIndex: number;

        /** ADVDeviceIdentity accountType. */
        public accountType: Adv.ADVEncryptionType;

        /** ADVDeviceIdentity deviceType. */
        public deviceType: Adv.ADVEncryptionType;

        /**
         * Creates a new ADVDeviceIdentity instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ADVDeviceIdentity instance
         */
        public static create(properties?: Adv.IADVDeviceIdentity): Adv.ADVDeviceIdentity;

        /**
         * Encodes the specified ADVDeviceIdentity message. Does not implicitly {@link Adv.ADVDeviceIdentity.verify|verify} messages.
         * @param message ADVDeviceIdentity message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Adv.IADVDeviceIdentity, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ADVDeviceIdentity message, length delimited. Does not implicitly {@link Adv.ADVDeviceIdentity.verify|verify} messages.
         * @param message ADVDeviceIdentity message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Adv.IADVDeviceIdentity, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ADVDeviceIdentity message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ADVDeviceIdentity
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Adv.ADVDeviceIdentity;

        /**
         * Decodes a ADVDeviceIdentity message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ADVDeviceIdentity
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Adv.ADVDeviceIdentity;

        /**
         * Verifies a ADVDeviceIdentity message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ADVDeviceIdentity message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ADVDeviceIdentity
         */
        public static fromObject(object: { [k: string]: any }): Adv.ADVDeviceIdentity;

        /**
         * Creates a plain object from a ADVDeviceIdentity message. Also converts values to other types if specified.
         * @param message ADVDeviceIdentity
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Adv.ADVDeviceIdentity, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ADVDeviceIdentity to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ADVDeviceIdentity
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a ADVSignedKeyIndexList. */
    interface IADVSignedKeyIndexList {

        /** ADVSignedKeyIndexList details */
        details?: (Uint8Array|null);

        /** ADVSignedKeyIndexList accountSignature */
        accountSignature?: (Uint8Array|null);

        /** ADVSignedKeyIndexList accountSignatureKey */
        accountSignatureKey?: (Uint8Array|null);
    }

    /** Represents a ADVSignedKeyIndexList. */
    class ADVSignedKeyIndexList implements IADVSignedKeyIndexList {

        /**
         * Constructs a new ADVSignedKeyIndexList.
         * @param [properties] Properties to set
         */
        constructor(properties?: Adv.IADVSignedKeyIndexList);

        /** ADVSignedKeyIndexList details. */
        public details: Uint8Array;

        /** ADVSignedKeyIndexList accountSignature. */
        public accountSignature: Uint8Array;

        /** ADVSignedKeyIndexList accountSignatureKey. */
        public accountSignatureKey: Uint8Array;

        /**
         * Creates a new ADVSignedKeyIndexList instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ADVSignedKeyIndexList instance
         */
        public static create(properties?: Adv.IADVSignedKeyIndexList): Adv.ADVSignedKeyIndexList;

        /**
         * Encodes the specified ADVSignedKeyIndexList message. Does not implicitly {@link Adv.ADVSignedKeyIndexList.verify|verify} messages.
         * @param message ADVSignedKeyIndexList message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Adv.IADVSignedKeyIndexList, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ADVSignedKeyIndexList message, length delimited. Does not implicitly {@link Adv.ADVSignedKeyIndexList.verify|verify} messages.
         * @param message ADVSignedKeyIndexList message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Adv.IADVSignedKeyIndexList, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ADVSignedKeyIndexList message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ADVSignedKeyIndexList
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Adv.ADVSignedKeyIndexList;

        /**
         * Decodes a ADVSignedKeyIndexList message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ADVSignedKeyIndexList
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Adv.ADVSignedKeyIndexList;

        /**
         * Verifies a ADVSignedKeyIndexList message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ADVSignedKeyIndexList message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ADVSignedKeyIndexList
         */
        public static fromObject(object: { [k: string]: any }): Adv.ADVSignedKeyIndexList;

        /**
         * Creates a plain object from a ADVSignedKeyIndexList message. Also converts values to other types if specified.
         * @param message ADVSignedKeyIndexList
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Adv.ADVSignedKeyIndexList, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ADVSignedKeyIndexList to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ADVSignedKeyIndexList
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a ADVKeyIndexList. */
    interface IADVKeyIndexList {

        /** ADVKeyIndexList rawId */
        rawId?: (number|null);

        /** ADVKeyIndexList timestamp */
        timestamp?: (number|Long|null);

        /** ADVKeyIndexList currentIndex */
        currentIndex?: (number|null);

        /** ADVKeyIndexList validIndexes */
        validIndexes?: (number[]|null);

        /** ADVKeyIndexList accountType */
        accountType?: (Adv.ADVEncryptionType|null);
    }

    /** Represents a ADVKeyIndexList. */
    class ADVKeyIndexList implements IADVKeyIndexList {

        /**
         * Constructs a new ADVKeyIndexList.
         * @param [properties] Properties to set
         */
        constructor(properties?: Adv.IADVKeyIndexList);

        /** ADVKeyIndexList rawId. */
        public rawId: number;

        /** ADVKeyIndexList timestamp. */
        public timestamp: (number|Long);

        /** ADVKeyIndexList currentIndex. */
        public currentIndex: number;

        /** ADVKeyIndexList validIndexes. */
        public validIndexes: number[];

        /** ADVKeyIndexList accountType. */
        public accountType: Adv.ADVEncryptionType;

        /**
         * Creates a new ADVKeyIndexList instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ADVKeyIndexList instance
         */
        public static create(properties?: Adv.IADVKeyIndexList): Adv.ADVKeyIndexList;

        /**
         * Encodes the specified ADVKeyIndexList message. Does not implicitly {@link Adv.ADVKeyIndexList.verify|verify} messages.
         * @param message ADVKeyIndexList message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Adv.IADVKeyIndexList, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ADVKeyIndexList message, length delimited. Does not implicitly {@link Adv.ADVKeyIndexList.verify|verify} messages.
         * @param message ADVKeyIndexList message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Adv.IADVKeyIndexList, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ADVKeyIndexList message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ADVKeyIndexList
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Adv.ADVKeyIndexList;

        /**
         * Decodes a ADVKeyIndexList message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ADVKeyIndexList
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Adv.ADVKeyIndexList;

        /**
         * Verifies a ADVKeyIndexList message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ADVKeyIndexList message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ADVKeyIndexList
         */
        public static fromObject(object: { [k: string]: any }): Adv.ADVKeyIndexList;

        /**
         * Creates a plain object from a ADVKeyIndexList message. Also converts values to other types if specified.
         * @param message ADVKeyIndexList
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Adv.ADVKeyIndexList, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ADVKeyIndexList to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ADVKeyIndexList
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** ADVEncryptionType enum. */
    enum ADVEncryptionType {
        E2EE = 0,
        HOSTED = 1
    }
}

/** Namespace CompanionReg. */
export namespace CompanionReg {

    /** Properties of a ClientPairingProps. */
    interface IClientPairingProps {

        /** ClientPairingProps isChatDbLidMigrated */
        isChatDbLidMigrated?: (boolean|null);

        /** ClientPairingProps isSyncdPureLidSession */
        isSyncdPureLidSession?: (boolean|null);

        /** ClientPairingProps isSyncdSnapshotRecoveryEnabled */
        isSyncdSnapshotRecoveryEnabled?: (boolean|null);
    }

    /** Represents a ClientPairingProps. */
    class ClientPairingProps implements IClientPairingProps {

        /**
         * Constructs a new ClientPairingProps.
         * @param [properties] Properties to set
         */
        constructor(properties?: CompanionReg.IClientPairingProps);

        /** ClientPairingProps isChatDbLidMigrated. */
        public isChatDbLidMigrated: boolean;

        /** ClientPairingProps isSyncdPureLidSession. */
        public isSyncdPureLidSession: boolean;

        /** ClientPairingProps isSyncdSnapshotRecoveryEnabled. */
        public isSyncdSnapshotRecoveryEnabled: boolean;

        /**
         * Creates a new ClientPairingProps instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ClientPairingProps instance
         */
        public static create(properties?: CompanionReg.IClientPairingProps): CompanionReg.ClientPairingProps;

        /**
         * Encodes the specified ClientPairingProps message. Does not implicitly {@link CompanionReg.ClientPairingProps.verify|verify} messages.
         * @param message ClientPairingProps message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: CompanionReg.IClientPairingProps, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ClientPairingProps message, length delimited. Does not implicitly {@link CompanionReg.ClientPairingProps.verify|verify} messages.
         * @param message ClientPairingProps message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: CompanionReg.IClientPairingProps, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ClientPairingProps message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ClientPairingProps
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): CompanionReg.ClientPairingProps;

        /**
         * Decodes a ClientPairingProps message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ClientPairingProps
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): CompanionReg.ClientPairingProps;

        /**
         * Verifies a ClientPairingProps message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ClientPairingProps message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ClientPairingProps
         */
        public static fromObject(object: { [k: string]: any }): CompanionReg.ClientPairingProps;

        /**
         * Creates a plain object from a ClientPairingProps message. Also converts values to other types if specified.
         * @param message ClientPairingProps
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: CompanionReg.ClientPairingProps, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ClientPairingProps to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ClientPairingProps
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an EncryptedPairingRequest. */
    interface IEncryptedPairingRequest {

        /** EncryptedPairingRequest encryptedPayload */
        encryptedPayload?: (Uint8Array|null);

        /** EncryptedPairingRequest iv */
        iv?: (Uint8Array|null);
    }

    /** Represents an EncryptedPairingRequest. */
    class EncryptedPairingRequest implements IEncryptedPairingRequest {

        /**
         * Constructs a new EncryptedPairingRequest.
         * @param [properties] Properties to set
         */
        constructor(properties?: CompanionReg.IEncryptedPairingRequest);

        /** EncryptedPairingRequest encryptedPayload. */
        public encryptedPayload: Uint8Array;

        /** EncryptedPairingRequest iv. */
        public iv: Uint8Array;

        /**
         * Creates a new EncryptedPairingRequest instance using the specified properties.
         * @param [properties] Properties to set
         * @returns EncryptedPairingRequest instance
         */
        public static create(properties?: CompanionReg.IEncryptedPairingRequest): CompanionReg.EncryptedPairingRequest;

        /**
         * Encodes the specified EncryptedPairingRequest message. Does not implicitly {@link CompanionReg.EncryptedPairingRequest.verify|verify} messages.
         * @param message EncryptedPairingRequest message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: CompanionReg.IEncryptedPairingRequest, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified EncryptedPairingRequest message, length delimited. Does not implicitly {@link CompanionReg.EncryptedPairingRequest.verify|verify} messages.
         * @param message EncryptedPairingRequest message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: CompanionReg.IEncryptedPairingRequest, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an EncryptedPairingRequest message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns EncryptedPairingRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): CompanionReg.EncryptedPairingRequest;

        /**
         * Decodes an EncryptedPairingRequest message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns EncryptedPairingRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): CompanionReg.EncryptedPairingRequest;

        /**
         * Verifies an EncryptedPairingRequest message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an EncryptedPairingRequest message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns EncryptedPairingRequest
         */
        public static fromObject(object: { [k: string]: any }): CompanionReg.EncryptedPairingRequest;

        /**
         * Creates a plain object from an EncryptedPairingRequest message. Also converts values to other types if specified.
         * @param message EncryptedPairingRequest
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: CompanionReg.EncryptedPairingRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this EncryptedPairingRequest to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for EncryptedPairingRequest
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a PairingRequest. */
    interface IPairingRequest {

        /** PairingRequest companionPublicKey */
        companionPublicKey?: (Uint8Array|null);

        /** PairingRequest companionIdentityKey */
        companionIdentityKey?: (Uint8Array|null);

        /** PairingRequest advSecret */
        advSecret?: (Uint8Array|null);
    }

    /** Represents a PairingRequest. */
    class PairingRequest implements IPairingRequest {

        /**
         * Constructs a new PairingRequest.
         * @param [properties] Properties to set
         */
        constructor(properties?: CompanionReg.IPairingRequest);

        /** PairingRequest companionPublicKey. */
        public companionPublicKey: Uint8Array;

        /** PairingRequest companionIdentityKey. */
        public companionIdentityKey: Uint8Array;

        /** PairingRequest advSecret. */
        public advSecret: Uint8Array;

        /**
         * Creates a new PairingRequest instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PairingRequest instance
         */
        public static create(properties?: CompanionReg.IPairingRequest): CompanionReg.PairingRequest;

        /**
         * Encodes the specified PairingRequest message. Does not implicitly {@link CompanionReg.PairingRequest.verify|verify} messages.
         * @param message PairingRequest message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: CompanionReg.IPairingRequest, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PairingRequest message, length delimited. Does not implicitly {@link CompanionReg.PairingRequest.verify|verify} messages.
         * @param message PairingRequest message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: CompanionReg.IPairingRequest, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PairingRequest message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PairingRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): CompanionReg.PairingRequest;

        /**
         * Decodes a PairingRequest message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PairingRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): CompanionReg.PairingRequest;

        /**
         * Verifies a PairingRequest message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PairingRequest message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PairingRequest
         */
        public static fromObject(object: { [k: string]: any }): CompanionReg.PairingRequest;

        /**
         * Creates a plain object from a PairingRequest message. Also converts values to other types if specified.
         * @param message PairingRequest
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: CompanionReg.PairingRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PairingRequest to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PairingRequest
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a PrimaryEphemeralIdentity. */
    interface IPrimaryEphemeralIdentity {

        /** PrimaryEphemeralIdentity publicKey */
        publicKey?: (Uint8Array|null);

        /** PrimaryEphemeralIdentity nonce */
        nonce?: (Uint8Array|null);
    }

    /** Represents a PrimaryEphemeralIdentity. */
    class PrimaryEphemeralIdentity implements IPrimaryEphemeralIdentity {

        /**
         * Constructs a new PrimaryEphemeralIdentity.
         * @param [properties] Properties to set
         */
        constructor(properties?: CompanionReg.IPrimaryEphemeralIdentity);

        /** PrimaryEphemeralIdentity publicKey. */
        public publicKey: Uint8Array;

        /** PrimaryEphemeralIdentity nonce. */
        public nonce: Uint8Array;

        /**
         * Creates a new PrimaryEphemeralIdentity instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PrimaryEphemeralIdentity instance
         */
        public static create(properties?: CompanionReg.IPrimaryEphemeralIdentity): CompanionReg.PrimaryEphemeralIdentity;

        /**
         * Encodes the specified PrimaryEphemeralIdentity message. Does not implicitly {@link CompanionReg.PrimaryEphemeralIdentity.verify|verify} messages.
         * @param message PrimaryEphemeralIdentity message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: CompanionReg.IPrimaryEphemeralIdentity, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PrimaryEphemeralIdentity message, length delimited. Does not implicitly {@link CompanionReg.PrimaryEphemeralIdentity.verify|verify} messages.
         * @param message PrimaryEphemeralIdentity message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: CompanionReg.IPrimaryEphemeralIdentity, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PrimaryEphemeralIdentity message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PrimaryEphemeralIdentity
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): CompanionReg.PrimaryEphemeralIdentity;

        /**
         * Decodes a PrimaryEphemeralIdentity message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PrimaryEphemeralIdentity
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): CompanionReg.PrimaryEphemeralIdentity;

        /**
         * Verifies a PrimaryEphemeralIdentity message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PrimaryEphemeralIdentity message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PrimaryEphemeralIdentity
         */
        public static fromObject(object: { [k: string]: any }): CompanionReg.PrimaryEphemeralIdentity;

        /**
         * Creates a plain object from a PrimaryEphemeralIdentity message. Also converts values to other types if specified.
         * @param message PrimaryEphemeralIdentity
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: CompanionReg.PrimaryEphemeralIdentity, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PrimaryEphemeralIdentity to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PrimaryEphemeralIdentity
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a ProloguePayload. */
    interface IProloguePayload {

        /** ProloguePayload companionEphemeralIdentity */
        companionEphemeralIdentity?: (Uint8Array|null);

        /** ProloguePayload commitment */
        commitment?: (CompanionReg.ICompanionCommitment|null);
    }

    /** Represents a ProloguePayload. */
    class ProloguePayload implements IProloguePayload {

        /**
         * Constructs a new ProloguePayload.
         * @param [properties] Properties to set
         */
        constructor(properties?: CompanionReg.IProloguePayload);

        /** ProloguePayload companionEphemeralIdentity. */
        public companionEphemeralIdentity: Uint8Array;

        /** ProloguePayload commitment. */
        public commitment?: (CompanionReg.ICompanionCommitment|null);

        /**
         * Creates a new ProloguePayload instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ProloguePayload instance
         */
        public static create(properties?: CompanionReg.IProloguePayload): CompanionReg.ProloguePayload;

        /**
         * Encodes the specified ProloguePayload message. Does not implicitly {@link CompanionReg.ProloguePayload.verify|verify} messages.
         * @param message ProloguePayload message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: CompanionReg.IProloguePayload, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ProloguePayload message, length delimited. Does not implicitly {@link CompanionReg.ProloguePayload.verify|verify} messages.
         * @param message ProloguePayload message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: CompanionReg.IProloguePayload, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ProloguePayload message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ProloguePayload
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): CompanionReg.ProloguePayload;

        /**
         * Decodes a ProloguePayload message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ProloguePayload
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): CompanionReg.ProloguePayload;

        /**
         * Verifies a ProloguePayload message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ProloguePayload message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ProloguePayload
         */
        public static fromObject(object: { [k: string]: any }): CompanionReg.ProloguePayload;

        /**
         * Creates a plain object from a ProloguePayload message. Also converts values to other types if specified.
         * @param message ProloguePayload
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: CompanionReg.ProloguePayload, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ProloguePayload to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ProloguePayload
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a CompanionCommitment. */
    interface ICompanionCommitment {

        /** CompanionCommitment hash */
        hash?: (Uint8Array|null);
    }

    /** Represents a CompanionCommitment. */
    class CompanionCommitment implements ICompanionCommitment {

        /**
         * Constructs a new CompanionCommitment.
         * @param [properties] Properties to set
         */
        constructor(properties?: CompanionReg.ICompanionCommitment);

        /** CompanionCommitment hash. */
        public hash: Uint8Array;

        /**
         * Creates a new CompanionCommitment instance using the specified properties.
         * @param [properties] Properties to set
         * @returns CompanionCommitment instance
         */
        public static create(properties?: CompanionReg.ICompanionCommitment): CompanionReg.CompanionCommitment;

        /**
         * Encodes the specified CompanionCommitment message. Does not implicitly {@link CompanionReg.CompanionCommitment.verify|verify} messages.
         * @param message CompanionCommitment message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: CompanionReg.ICompanionCommitment, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified CompanionCommitment message, length delimited. Does not implicitly {@link CompanionReg.CompanionCommitment.verify|verify} messages.
         * @param message CompanionCommitment message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: CompanionReg.ICompanionCommitment, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a CompanionCommitment message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns CompanionCommitment
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): CompanionReg.CompanionCommitment;

        /**
         * Decodes a CompanionCommitment message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns CompanionCommitment
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): CompanionReg.CompanionCommitment;

        /**
         * Verifies a CompanionCommitment message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a CompanionCommitment message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns CompanionCommitment
         */
        public static fromObject(object: { [k: string]: any }): CompanionReg.CompanionCommitment;

        /**
         * Creates a plain object from a CompanionCommitment message. Also converts values to other types if specified.
         * @param message CompanionCommitment
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: CompanionReg.CompanionCommitment, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this CompanionCommitment to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for CompanionCommitment
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a CompanionEphemeralIdentity. */
    interface ICompanionEphemeralIdentity {

        /** CompanionEphemeralIdentity publicKey */
        publicKey?: (Uint8Array|null);

        /** CompanionEphemeralIdentity deviceType */
        deviceType?: (CompanionReg.DeviceProps.PlatformType|null);

        /** CompanionEphemeralIdentity ref */
        ref?: (string|null);
    }

    /** Represents a CompanionEphemeralIdentity. */
    class CompanionEphemeralIdentity implements ICompanionEphemeralIdentity {

        /**
         * Constructs a new CompanionEphemeralIdentity.
         * @param [properties] Properties to set
         */
        constructor(properties?: CompanionReg.ICompanionEphemeralIdentity);

        /** CompanionEphemeralIdentity publicKey. */
        public publicKey: Uint8Array;

        /** CompanionEphemeralIdentity deviceType. */
        public deviceType: CompanionReg.DeviceProps.PlatformType;

        /** CompanionEphemeralIdentity ref. */
        public ref: string;

        /**
         * Creates a new CompanionEphemeralIdentity instance using the specified properties.
         * @param [properties] Properties to set
         * @returns CompanionEphemeralIdentity instance
         */
        public static create(properties?: CompanionReg.ICompanionEphemeralIdentity): CompanionReg.CompanionEphemeralIdentity;

        /**
         * Encodes the specified CompanionEphemeralIdentity message. Does not implicitly {@link CompanionReg.CompanionEphemeralIdentity.verify|verify} messages.
         * @param message CompanionEphemeralIdentity message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: CompanionReg.ICompanionEphemeralIdentity, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified CompanionEphemeralIdentity message, length delimited. Does not implicitly {@link CompanionReg.CompanionEphemeralIdentity.verify|verify} messages.
         * @param message CompanionEphemeralIdentity message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: CompanionReg.ICompanionEphemeralIdentity, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a CompanionEphemeralIdentity message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns CompanionEphemeralIdentity
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): CompanionReg.CompanionEphemeralIdentity;

        /**
         * Decodes a CompanionEphemeralIdentity message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns CompanionEphemeralIdentity
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): CompanionReg.CompanionEphemeralIdentity;

        /**
         * Verifies a CompanionEphemeralIdentity message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a CompanionEphemeralIdentity message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns CompanionEphemeralIdentity
         */
        public static fromObject(object: { [k: string]: any }): CompanionReg.CompanionEphemeralIdentity;

        /**
         * Creates a plain object from a CompanionEphemeralIdentity message. Also converts values to other types if specified.
         * @param message CompanionEphemeralIdentity
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: CompanionReg.CompanionEphemeralIdentity, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this CompanionEphemeralIdentity to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for CompanionEphemeralIdentity
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a DeviceProps. */
    interface IDeviceProps {

        /** DeviceProps os */
        os?: (string|null);

        /** DeviceProps version */
        version?: (CompanionReg.DeviceProps.IAppVersion|null);

        /** DeviceProps platformType */
        platformType?: (CompanionReg.DeviceProps.PlatformType|null);

        /** DeviceProps requireFullSync */
        requireFullSync?: (boolean|null);

        /** DeviceProps historySyncConfig */
        historySyncConfig?: (CompanionReg.DeviceProps.IHistorySyncConfig|null);
    }

    /** Represents a DeviceProps. */
    class DeviceProps implements IDeviceProps {

        /**
         * Constructs a new DeviceProps.
         * @param [properties] Properties to set
         */
        constructor(properties?: CompanionReg.IDeviceProps);

        /** DeviceProps os. */
        public os: string;

        /** DeviceProps version. */
        public version?: (CompanionReg.DeviceProps.IAppVersion|null);

        /** DeviceProps platformType. */
        public platformType: CompanionReg.DeviceProps.PlatformType;

        /** DeviceProps requireFullSync. */
        public requireFullSync: boolean;

        /** DeviceProps historySyncConfig. */
        public historySyncConfig?: (CompanionReg.DeviceProps.IHistorySyncConfig|null);

        /**
         * Creates a new DeviceProps instance using the specified properties.
         * @param [properties] Properties to set
         * @returns DeviceProps instance
         */
        public static create(properties?: CompanionReg.IDeviceProps): CompanionReg.DeviceProps;

        /**
         * Encodes the specified DeviceProps message. Does not implicitly {@link CompanionReg.DeviceProps.verify|verify} messages.
         * @param message DeviceProps message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: CompanionReg.IDeviceProps, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified DeviceProps message, length delimited. Does not implicitly {@link CompanionReg.DeviceProps.verify|verify} messages.
         * @param message DeviceProps message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: CompanionReg.IDeviceProps, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a DeviceProps message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns DeviceProps
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): CompanionReg.DeviceProps;

        /**
         * Decodes a DeviceProps message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns DeviceProps
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): CompanionReg.DeviceProps;

        /**
         * Verifies a DeviceProps message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a DeviceProps message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns DeviceProps
         */
        public static fromObject(object: { [k: string]: any }): CompanionReg.DeviceProps;

        /**
         * Creates a plain object from a DeviceProps message. Also converts values to other types if specified.
         * @param message DeviceProps
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: CompanionReg.DeviceProps, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this DeviceProps to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for DeviceProps
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace DeviceProps {

        /** Properties of an AppVersion. */
        interface IAppVersion {

            /** AppVersion primary */
            primary?: (number|null);

            /** AppVersion secondary */
            secondary?: (number|null);

            /** AppVersion tertiary */
            tertiary?: (number|null);

            /** AppVersion quaternary */
            quaternary?: (number|null);

            /** AppVersion quinary */
            quinary?: (number|null);
        }

        /** Represents an AppVersion. */
        class AppVersion implements IAppVersion {

            /**
             * Constructs a new AppVersion.
             * @param [properties] Properties to set
             */
            constructor(properties?: CompanionReg.DeviceProps.IAppVersion);

            /** AppVersion primary. */
            public primary: number;

            /** AppVersion secondary. */
            public secondary: number;

            /** AppVersion tertiary. */
            public tertiary: number;

            /** AppVersion quaternary. */
            public quaternary: number;

            /** AppVersion quinary. */
            public quinary: number;

            /**
             * Creates a new AppVersion instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AppVersion instance
             */
            public static create(properties?: CompanionReg.DeviceProps.IAppVersion): CompanionReg.DeviceProps.AppVersion;

            /**
             * Encodes the specified AppVersion message. Does not implicitly {@link CompanionReg.DeviceProps.AppVersion.verify|verify} messages.
             * @param message AppVersion message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: CompanionReg.DeviceProps.IAppVersion, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AppVersion message, length delimited. Does not implicitly {@link CompanionReg.DeviceProps.AppVersion.verify|verify} messages.
             * @param message AppVersion message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: CompanionReg.DeviceProps.IAppVersion, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AppVersion message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AppVersion
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): CompanionReg.DeviceProps.AppVersion;

            /**
             * Decodes an AppVersion message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AppVersion
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): CompanionReg.DeviceProps.AppVersion;

            /**
             * Verifies an AppVersion message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AppVersion message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AppVersion
             */
            public static fromObject(object: { [k: string]: any }): CompanionReg.DeviceProps.AppVersion;

            /**
             * Creates a plain object from an AppVersion message. Also converts values to other types if specified.
             * @param message AppVersion
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: CompanionReg.DeviceProps.AppVersion, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AppVersion to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AppVersion
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a HistorySyncConfig. */
        interface IHistorySyncConfig {

            /** HistorySyncConfig fullSyncDaysLimit */
            fullSyncDaysLimit?: (number|null);

            /** HistorySyncConfig fullSyncSizeMbLimit */
            fullSyncSizeMbLimit?: (number|null);

            /** HistorySyncConfig storageQuotaMb */
            storageQuotaMb?: (number|null);

            /** HistorySyncConfig inlineInitialPayloadInE2EeMsg */
            inlineInitialPayloadInE2EeMsg?: (boolean|null);

            /** HistorySyncConfig recentSyncDaysLimit */
            recentSyncDaysLimit?: (number|null);

            /** HistorySyncConfig supportCallLogHistory */
            supportCallLogHistory?: (boolean|null);

            /** HistorySyncConfig supportBotUserAgentChatHistory */
            supportBotUserAgentChatHistory?: (boolean|null);

            /** HistorySyncConfig supportCagReactionsAndPolls */
            supportCagReactionsAndPolls?: (boolean|null);

            /** HistorySyncConfig supportBizHostedMsg */
            supportBizHostedMsg?: (boolean|null);

            /** HistorySyncConfig supportRecentSyncChunkMessageCountTuning */
            supportRecentSyncChunkMessageCountTuning?: (boolean|null);

            /** HistorySyncConfig supportHostedGroupMsg */
            supportHostedGroupMsg?: (boolean|null);

            /** HistorySyncConfig supportFbidBotChatHistory */
            supportFbidBotChatHistory?: (boolean|null);

            /** HistorySyncConfig supportAddOnHistorySyncMigration */
            supportAddOnHistorySyncMigration?: (boolean|null);

            /** HistorySyncConfig supportMessageAssociation */
            supportMessageAssociation?: (boolean|null);

            /** HistorySyncConfig supportGroupHistory */
            supportGroupHistory?: (boolean|null);

            /** HistorySyncConfig onDemandReady */
            onDemandReady?: (boolean|null);

            /** HistorySyncConfig supportGuestChat */
            supportGuestChat?: (boolean|null);
        }

        /** Represents a HistorySyncConfig. */
        class HistorySyncConfig implements IHistorySyncConfig {

            /**
             * Constructs a new HistorySyncConfig.
             * @param [properties] Properties to set
             */
            constructor(properties?: CompanionReg.DeviceProps.IHistorySyncConfig);

            /** HistorySyncConfig fullSyncDaysLimit. */
            public fullSyncDaysLimit: number;

            /** HistorySyncConfig fullSyncSizeMbLimit. */
            public fullSyncSizeMbLimit: number;

            /** HistorySyncConfig storageQuotaMb. */
            public storageQuotaMb: number;

            /** HistorySyncConfig inlineInitialPayloadInE2EeMsg. */
            public inlineInitialPayloadInE2EeMsg: boolean;

            /** HistorySyncConfig recentSyncDaysLimit. */
            public recentSyncDaysLimit: number;

            /** HistorySyncConfig supportCallLogHistory. */
            public supportCallLogHistory: boolean;

            /** HistorySyncConfig supportBotUserAgentChatHistory. */
            public supportBotUserAgentChatHistory: boolean;

            /** HistorySyncConfig supportCagReactionsAndPolls. */
            public supportCagReactionsAndPolls: boolean;

            /** HistorySyncConfig supportBizHostedMsg. */
            public supportBizHostedMsg: boolean;

            /** HistorySyncConfig supportRecentSyncChunkMessageCountTuning. */
            public supportRecentSyncChunkMessageCountTuning: boolean;

            /** HistorySyncConfig supportHostedGroupMsg. */
            public supportHostedGroupMsg: boolean;

            /** HistorySyncConfig supportFbidBotChatHistory. */
            public supportFbidBotChatHistory: boolean;

            /** HistorySyncConfig supportAddOnHistorySyncMigration. */
            public supportAddOnHistorySyncMigration: boolean;

            /** HistorySyncConfig supportMessageAssociation. */
            public supportMessageAssociation: boolean;

            /** HistorySyncConfig supportGroupHistory. */
            public supportGroupHistory: boolean;

            /** HistorySyncConfig onDemandReady. */
            public onDemandReady: boolean;

            /** HistorySyncConfig supportGuestChat. */
            public supportGuestChat: boolean;

            /**
             * Creates a new HistorySyncConfig instance using the specified properties.
             * @param [properties] Properties to set
             * @returns HistorySyncConfig instance
             */
            public static create(properties?: CompanionReg.DeviceProps.IHistorySyncConfig): CompanionReg.DeviceProps.HistorySyncConfig;

            /**
             * Encodes the specified HistorySyncConfig message. Does not implicitly {@link CompanionReg.DeviceProps.HistorySyncConfig.verify|verify} messages.
             * @param message HistorySyncConfig message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: CompanionReg.DeviceProps.IHistorySyncConfig, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified HistorySyncConfig message, length delimited. Does not implicitly {@link CompanionReg.DeviceProps.HistorySyncConfig.verify|verify} messages.
             * @param message HistorySyncConfig message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: CompanionReg.DeviceProps.IHistorySyncConfig, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a HistorySyncConfig message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns HistorySyncConfig
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): CompanionReg.DeviceProps.HistorySyncConfig;

            /**
             * Decodes a HistorySyncConfig message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns HistorySyncConfig
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): CompanionReg.DeviceProps.HistorySyncConfig;

            /**
             * Verifies a HistorySyncConfig message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a HistorySyncConfig message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns HistorySyncConfig
             */
            public static fromObject(object: { [k: string]: any }): CompanionReg.DeviceProps.HistorySyncConfig;

            /**
             * Creates a plain object from a HistorySyncConfig message. Also converts values to other types if specified.
             * @param message HistorySyncConfig
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: CompanionReg.DeviceProps.HistorySyncConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this HistorySyncConfig to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for HistorySyncConfig
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** PlatformType enum. */
        enum PlatformType {
            UNKNOWN = 0,
            CHROME = 1,
            FIREFOX = 2,
            IE = 3,
            OPERA = 4,
            SAFARI = 5,
            EDGE = 6,
            DESKTOP = 7,
            IPAD = 8,
            ANDROID_TABLET = 9,
            OHANA = 10,
            ALOHA = 11,
            CATALINA = 12,
            TCL_TV = 13,
            IOS_PHONE = 14,
            IOS_CATALYST = 15,
            ANDROID_PHONE = 16,
            ANDROID_AMBIGUOUS = 17,
            WEAR_OS = 18,
            AR_WRIST = 19,
            AR_DEVICE = 20,
            UWP = 21,
            VR = 22,
            CLOUD_API = 23,
            SMARTGLASSES = 24
        }
    }
}

/** Namespace MmsRetry. */
export namespace MmsRetry {

    /** Properties of a ServerErrorReceipt. */
    interface IServerErrorReceipt {

        /** ServerErrorReceipt stanzaId */
        stanzaId?: (string|null);
    }

    /** Represents a ServerErrorReceipt. */
    class ServerErrorReceipt implements IServerErrorReceipt {

        /**
         * Constructs a new ServerErrorReceipt.
         * @param [properties] Properties to set
         */
        constructor(properties?: MmsRetry.IServerErrorReceipt);

        /** ServerErrorReceipt stanzaId. */
        public stanzaId: string;

        /**
         * Creates a new ServerErrorReceipt instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ServerErrorReceipt instance
         */
        public static create(properties?: MmsRetry.IServerErrorReceipt): MmsRetry.ServerErrorReceipt;

        /**
         * Encodes the specified ServerErrorReceipt message. Does not implicitly {@link MmsRetry.ServerErrorReceipt.verify|verify} messages.
         * @param message ServerErrorReceipt message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: MmsRetry.IServerErrorReceipt, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ServerErrorReceipt message, length delimited. Does not implicitly {@link MmsRetry.ServerErrorReceipt.verify|verify} messages.
         * @param message ServerErrorReceipt message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: MmsRetry.IServerErrorReceipt, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ServerErrorReceipt message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ServerErrorReceipt
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): MmsRetry.ServerErrorReceipt;

        /**
         * Decodes a ServerErrorReceipt message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ServerErrorReceipt
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): MmsRetry.ServerErrorReceipt;

        /**
         * Verifies a ServerErrorReceipt message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ServerErrorReceipt message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ServerErrorReceipt
         */
        public static fromObject(object: { [k: string]: any }): MmsRetry.ServerErrorReceipt;

        /**
         * Creates a plain object from a ServerErrorReceipt message. Also converts values to other types if specified.
         * @param message ServerErrorReceipt
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: MmsRetry.ServerErrorReceipt, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ServerErrorReceipt to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ServerErrorReceipt
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a MediaRetryNotification. */
    interface IMediaRetryNotification {

        /** MediaRetryNotification stanzaId */
        stanzaId?: (string|null);

        /** MediaRetryNotification directPath */
        directPath?: (string|null);

        /** MediaRetryNotification result */
        result?: (MmsRetry.MediaRetryNotification.ResultType|null);

        /** MediaRetryNotification messageSecret */
        messageSecret?: (Uint8Array|null);
    }

    /** Represents a MediaRetryNotification. */
    class MediaRetryNotification implements IMediaRetryNotification {

        /**
         * Constructs a new MediaRetryNotification.
         * @param [properties] Properties to set
         */
        constructor(properties?: MmsRetry.IMediaRetryNotification);

        /** MediaRetryNotification stanzaId. */
        public stanzaId: string;

        /** MediaRetryNotification directPath. */
        public directPath: string;

        /** MediaRetryNotification result. */
        public result: MmsRetry.MediaRetryNotification.ResultType;

        /** MediaRetryNotification messageSecret. */
        public messageSecret: Uint8Array;

        /**
         * Creates a new MediaRetryNotification instance using the specified properties.
         * @param [properties] Properties to set
         * @returns MediaRetryNotification instance
         */
        public static create(properties?: MmsRetry.IMediaRetryNotification): MmsRetry.MediaRetryNotification;

        /**
         * Encodes the specified MediaRetryNotification message. Does not implicitly {@link MmsRetry.MediaRetryNotification.verify|verify} messages.
         * @param message MediaRetryNotification message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: MmsRetry.IMediaRetryNotification, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified MediaRetryNotification message, length delimited. Does not implicitly {@link MmsRetry.MediaRetryNotification.verify|verify} messages.
         * @param message MediaRetryNotification message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: MmsRetry.IMediaRetryNotification, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a MediaRetryNotification message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns MediaRetryNotification
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): MmsRetry.MediaRetryNotification;

        /**
         * Decodes a MediaRetryNotification message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns MediaRetryNotification
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): MmsRetry.MediaRetryNotification;

        /**
         * Verifies a MediaRetryNotification message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a MediaRetryNotification message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns MediaRetryNotification
         */
        public static fromObject(object: { [k: string]: any }): MmsRetry.MediaRetryNotification;

        /**
         * Creates a plain object from a MediaRetryNotification message. Also converts values to other types if specified.
         * @param message MediaRetryNotification
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: MmsRetry.MediaRetryNotification, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this MediaRetryNotification to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for MediaRetryNotification
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace MediaRetryNotification {

        /** ResultType enum. */
        enum ResultType {
            GENERAL_ERROR = 0,
            SUCCESS = 1,
            NOT_FOUND = 2,
            DECRYPTION_ERROR = 3
        }
    }
}

/** Namespace Web. */
export namespace Web {

    /** Properties of a GroupHistoryBundleMessage. */
    interface IGroupHistoryBundleMessage {

        /** GroupHistoryBundleMessage messageHistoryBundle */
        messageHistoryBundle?: (E2E.Message.IMessageHistoryBundle|null);

        /** GroupHistoryBundleMessage processState */
        processState?: (Web.GroupHistoryBundleMessage.ProcessState|null);
    }

    /** Represents a GroupHistoryBundleMessage. */
    class GroupHistoryBundleMessage implements IGroupHistoryBundleMessage {

        /**
         * Constructs a new GroupHistoryBundleMessage.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IGroupHistoryBundleMessage);

        /** GroupHistoryBundleMessage messageHistoryBundle. */
        public messageHistoryBundle?: (E2E.Message.IMessageHistoryBundle|null);

        /** GroupHistoryBundleMessage processState. */
        public processState: Web.GroupHistoryBundleMessage.ProcessState;

        /**
         * Creates a new GroupHistoryBundleMessage instance using the specified properties.
         * @param [properties] Properties to set
         * @returns GroupHistoryBundleMessage instance
         */
        public static create(properties?: Web.IGroupHistoryBundleMessage): Web.GroupHistoryBundleMessage;

        /**
         * Encodes the specified GroupHistoryBundleMessage message. Does not implicitly {@link Web.GroupHistoryBundleMessage.verify|verify} messages.
         * @param message GroupHistoryBundleMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IGroupHistoryBundleMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified GroupHistoryBundleMessage message, length delimited. Does not implicitly {@link Web.GroupHistoryBundleMessage.verify|verify} messages.
         * @param message GroupHistoryBundleMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IGroupHistoryBundleMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a GroupHistoryBundleMessage message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns GroupHistoryBundleMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.GroupHistoryBundleMessage;

        /**
         * Decodes a GroupHistoryBundleMessage message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns GroupHistoryBundleMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.GroupHistoryBundleMessage;

        /**
         * Verifies a GroupHistoryBundleMessage message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a GroupHistoryBundleMessage message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns GroupHistoryBundleMessage
         */
        public static fromObject(object: { [k: string]: any }): Web.GroupHistoryBundleMessage;

        /**
         * Creates a plain object from a GroupHistoryBundleMessage message. Also converts values to other types if specified.
         * @param message GroupHistoryBundleMessage
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.GroupHistoryBundleMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this GroupHistoryBundleMessage to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for GroupHistoryBundleMessage
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace GroupHistoryBundleMessage {

        /** ProcessState enum. */
        enum ProcessState {
            NOT_DOWNLOADED = 0,
            DOWNLOADED = 1,
            DOWNLOAD_FAILED = 2
        }
    }

    /** Properties of a GroupHistoryIndividualMessageInfo. */
    interface IGroupHistoryIndividualMessageInfo {

        /** GroupHistoryIndividualMessageInfo bundleMessageKey */
        bundleMessageKey?: (Protocol.IMessageKey|null);
    }

    /** Represents a GroupHistoryIndividualMessageInfo. */
    class GroupHistoryIndividualMessageInfo implements IGroupHistoryIndividualMessageInfo {

        /**
         * Constructs a new GroupHistoryIndividualMessageInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IGroupHistoryIndividualMessageInfo);

        /** GroupHistoryIndividualMessageInfo bundleMessageKey. */
        public bundleMessageKey?: (Protocol.IMessageKey|null);

        /**
         * Creates a new GroupHistoryIndividualMessageInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns GroupHistoryIndividualMessageInfo instance
         */
        public static create(properties?: Web.IGroupHistoryIndividualMessageInfo): Web.GroupHistoryIndividualMessageInfo;

        /**
         * Encodes the specified GroupHistoryIndividualMessageInfo message. Does not implicitly {@link Web.GroupHistoryIndividualMessageInfo.verify|verify} messages.
         * @param message GroupHistoryIndividualMessageInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IGroupHistoryIndividualMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified GroupHistoryIndividualMessageInfo message, length delimited. Does not implicitly {@link Web.GroupHistoryIndividualMessageInfo.verify|verify} messages.
         * @param message GroupHistoryIndividualMessageInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IGroupHistoryIndividualMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a GroupHistoryIndividualMessageInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns GroupHistoryIndividualMessageInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.GroupHistoryIndividualMessageInfo;

        /**
         * Decodes a GroupHistoryIndividualMessageInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns GroupHistoryIndividualMessageInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.GroupHistoryIndividualMessageInfo;

        /**
         * Verifies a GroupHistoryIndividualMessageInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a GroupHistoryIndividualMessageInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns GroupHistoryIndividualMessageInfo
         */
        public static fromObject(object: { [k: string]: any }): Web.GroupHistoryIndividualMessageInfo;

        /**
         * Creates a plain object from a GroupHistoryIndividualMessageInfo message. Also converts values to other types if specified.
         * @param message GroupHistoryIndividualMessageInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.GroupHistoryIndividualMessageInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this GroupHistoryIndividualMessageInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for GroupHistoryIndividualMessageInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a Citation. */
    interface ICitation {

        /** Citation title */
        title: string;

        /** Citation subtitle */
        subtitle: string;

        /** Citation cmsId */
        cmsId: string;

        /** Citation imageUrl */
        imageUrl: string;
    }

    /** Represents a Citation. */
    class Citation implements ICitation {

        /**
         * Constructs a new Citation.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.ICitation);

        /** Citation title. */
        public title: string;

        /** Citation subtitle. */
        public subtitle: string;

        /** Citation cmsId. */
        public cmsId: string;

        /** Citation imageUrl. */
        public imageUrl: string;

        /**
         * Creates a new Citation instance using the specified properties.
         * @param [properties] Properties to set
         * @returns Citation instance
         */
        public static create(properties?: Web.ICitation): Web.Citation;

        /**
         * Encodes the specified Citation message. Does not implicitly {@link Web.Citation.verify|verify} messages.
         * @param message Citation message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.ICitation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified Citation message, length delimited. Does not implicitly {@link Web.Citation.verify|verify} messages.
         * @param message Citation message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.ICitation, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a Citation message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Citation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.Citation;

        /**
         * Decodes a Citation message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns Citation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.Citation;

        /**
         * Verifies a Citation message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a Citation message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Citation
         */
        public static fromObject(object: { [k: string]: any }): Web.Citation;

        /**
         * Creates a plain object from a Citation message. Also converts values to other types if specified.
         * @param message Citation
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.Citation, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Citation to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for Citation
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a StatusMentionMessage. */
    interface IStatusMentionMessage {

        /** StatusMentionMessage quotedStatus */
        quotedStatus?: (E2E.IMessage|null);
    }

    /** Represents a StatusMentionMessage. */
    class StatusMentionMessage implements IStatusMentionMessage {

        /**
         * Constructs a new StatusMentionMessage.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IStatusMentionMessage);

        /** StatusMentionMessage quotedStatus. */
        public quotedStatus?: (E2E.IMessage|null);

        /**
         * Creates a new StatusMentionMessage instance using the specified properties.
         * @param [properties] Properties to set
         * @returns StatusMentionMessage instance
         */
        public static create(properties?: Web.IStatusMentionMessage): Web.StatusMentionMessage;

        /**
         * Encodes the specified StatusMentionMessage message. Does not implicitly {@link Web.StatusMentionMessage.verify|verify} messages.
         * @param message StatusMentionMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IStatusMentionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified StatusMentionMessage message, length delimited. Does not implicitly {@link Web.StatusMentionMessage.verify|verify} messages.
         * @param message StatusMentionMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IStatusMentionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a StatusMentionMessage message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns StatusMentionMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.StatusMentionMessage;

        /**
         * Decodes a StatusMentionMessage message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns StatusMentionMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.StatusMentionMessage;

        /**
         * Verifies a StatusMentionMessage message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a StatusMentionMessage message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns StatusMentionMessage
         */
        public static fromObject(object: { [k: string]: any }): Web.StatusMentionMessage;

        /**
         * Creates a plain object from a StatusMentionMessage message. Also converts values to other types if specified.
         * @param message StatusMentionMessage
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.StatusMentionMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this StatusMentionMessage to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for StatusMentionMessage
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a MessageAddOn. */
    interface IMessageAddOn {

        /** MessageAddOn messageAddOnType */
        messageAddOnType?: (Web.MessageAddOn.MessageAddOnType|null);

        /** MessageAddOn messageAddOn */
        messageAddOn?: (E2E.IMessage|null);

        /** MessageAddOn senderTimestampMs */
        senderTimestampMs?: (number|Long|null);

        /** MessageAddOn serverTimestampMs */
        serverTimestampMs?: (number|Long|null);

        /** MessageAddOn status */
        status?: (Web.WebMessageInfo.Status|null);

        /** MessageAddOn addOnContextInfo */
        addOnContextInfo?: (Web.IMessageAddOnContextInfo|null);

        /** MessageAddOn messageAddOnKey */
        messageAddOnKey?: (Protocol.IMessageKey|null);

        /** MessageAddOn legacyMessage */
        legacyMessage?: (Web.ILegacyMessage|null);
    }

    /** Represents a MessageAddOn. */
    class MessageAddOn implements IMessageAddOn {

        /**
         * Constructs a new MessageAddOn.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IMessageAddOn);

        /** MessageAddOn messageAddOnType. */
        public messageAddOnType: Web.MessageAddOn.MessageAddOnType;

        /** MessageAddOn messageAddOn. */
        public messageAddOn?: (E2E.IMessage|null);

        /** MessageAddOn senderTimestampMs. */
        public senderTimestampMs: (number|Long);

        /** MessageAddOn serverTimestampMs. */
        public serverTimestampMs: (number|Long);

        /** MessageAddOn status. */
        public status: Web.WebMessageInfo.Status;

        /** MessageAddOn addOnContextInfo. */
        public addOnContextInfo?: (Web.IMessageAddOnContextInfo|null);

        /** MessageAddOn messageAddOnKey. */
        public messageAddOnKey?: (Protocol.IMessageKey|null);

        /** MessageAddOn legacyMessage. */
        public legacyMessage?: (Web.ILegacyMessage|null);

        /**
         * Creates a new MessageAddOn instance using the specified properties.
         * @param [properties] Properties to set
         * @returns MessageAddOn instance
         */
        public static create(properties?: Web.IMessageAddOn): Web.MessageAddOn;

        /**
         * Encodes the specified MessageAddOn message. Does not implicitly {@link Web.MessageAddOn.verify|verify} messages.
         * @param message MessageAddOn message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IMessageAddOn, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified MessageAddOn message, length delimited. Does not implicitly {@link Web.MessageAddOn.verify|verify} messages.
         * @param message MessageAddOn message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IMessageAddOn, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a MessageAddOn message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns MessageAddOn
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.MessageAddOn;

        /**
         * Decodes a MessageAddOn message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns MessageAddOn
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.MessageAddOn;

        /**
         * Verifies a MessageAddOn message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a MessageAddOn message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns MessageAddOn
         */
        public static fromObject(object: { [k: string]: any }): Web.MessageAddOn;

        /**
         * Creates a plain object from a MessageAddOn message. Also converts values to other types if specified.
         * @param message MessageAddOn
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.MessageAddOn, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this MessageAddOn to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for MessageAddOn
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace MessageAddOn {

        /** MessageAddOnType enum. */
        enum MessageAddOnType {
            UNDEFINED = 0,
            REACTION = 1,
            EVENT_RESPONSE = 2,
            POLL_UPDATE = 3,
            PIN_IN_CHAT = 4
        }
    }

    /** Properties of a LegacyMessage. */
    interface ILegacyMessage {

        /** LegacyMessage eventResponseMessage */
        eventResponseMessage?: (E2E.Message.IEventResponseMessage|null);

        /** LegacyMessage pollVote */
        pollVote?: (E2E.Message.IPollVoteMessage|null);
    }

    /** Represents a LegacyMessage. */
    class LegacyMessage implements ILegacyMessage {

        /**
         * Constructs a new LegacyMessage.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.ILegacyMessage);

        /** LegacyMessage eventResponseMessage. */
        public eventResponseMessage?: (E2E.Message.IEventResponseMessage|null);

        /** LegacyMessage pollVote. */
        public pollVote?: (E2E.Message.IPollVoteMessage|null);

        /**
         * Creates a new LegacyMessage instance using the specified properties.
         * @param [properties] Properties to set
         * @returns LegacyMessage instance
         */
        public static create(properties?: Web.ILegacyMessage): Web.LegacyMessage;

        /**
         * Encodes the specified LegacyMessage message. Does not implicitly {@link Web.LegacyMessage.verify|verify} messages.
         * @param message LegacyMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.ILegacyMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified LegacyMessage message, length delimited. Does not implicitly {@link Web.LegacyMessage.verify|verify} messages.
         * @param message LegacyMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.ILegacyMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a LegacyMessage message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns LegacyMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.LegacyMessage;

        /**
         * Decodes a LegacyMessage message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns LegacyMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.LegacyMessage;

        /**
         * Verifies a LegacyMessage message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a LegacyMessage message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns LegacyMessage
         */
        public static fromObject(object: { [k: string]: any }): Web.LegacyMessage;

        /**
         * Creates a plain object from a LegacyMessage message. Also converts values to other types if specified.
         * @param message LegacyMessage
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.LegacyMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this LegacyMessage to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for LegacyMessage
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an EventResponse. */
    interface IEventResponse {

        /** EventResponse eventResponseMessageKey */
        eventResponseMessageKey?: (Protocol.IMessageKey|null);

        /** EventResponse timestampMs */
        timestampMs?: (number|Long|null);

        /** EventResponse eventResponseMessage */
        eventResponseMessage?: (E2E.Message.IEventResponseMessage|null);

        /** EventResponse unread */
        unread?: (boolean|null);
    }

    /** Represents an EventResponse. */
    class EventResponse implements IEventResponse {

        /**
         * Constructs a new EventResponse.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IEventResponse);

        /** EventResponse eventResponseMessageKey. */
        public eventResponseMessageKey?: (Protocol.IMessageKey|null);

        /** EventResponse timestampMs. */
        public timestampMs: (number|Long);

        /** EventResponse eventResponseMessage. */
        public eventResponseMessage?: (E2E.Message.IEventResponseMessage|null);

        /** EventResponse unread. */
        public unread: boolean;

        /**
         * Creates a new EventResponse instance using the specified properties.
         * @param [properties] Properties to set
         * @returns EventResponse instance
         */
        public static create(properties?: Web.IEventResponse): Web.EventResponse;

        /**
         * Encodes the specified EventResponse message. Does not implicitly {@link Web.EventResponse.verify|verify} messages.
         * @param message EventResponse message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IEventResponse, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified EventResponse message, length delimited. Does not implicitly {@link Web.EventResponse.verify|verify} messages.
         * @param message EventResponse message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IEventResponse, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an EventResponse message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns EventResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.EventResponse;

        /**
         * Decodes an EventResponse message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns EventResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.EventResponse;

        /**
         * Verifies an EventResponse message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an EventResponse message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns EventResponse
         */
        public static fromObject(object: { [k: string]: any }): Web.EventResponse;

        /**
         * Creates a plain object from an EventResponse message. Also converts values to other types if specified.
         * @param message EventResponse
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.EventResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this EventResponse to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for EventResponse
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a PremiumMessageInfo. */
    interface IPremiumMessageInfo {

        /** PremiumMessageInfo serverCampaignId */
        serverCampaignId?: (string|null);
    }

    /** Represents a PremiumMessageInfo. */
    class PremiumMessageInfo implements IPremiumMessageInfo {

        /**
         * Constructs a new PremiumMessageInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IPremiumMessageInfo);

        /** PremiumMessageInfo serverCampaignId. */
        public serverCampaignId: string;

        /**
         * Creates a new PremiumMessageInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PremiumMessageInfo instance
         */
        public static create(properties?: Web.IPremiumMessageInfo): Web.PremiumMessageInfo;

        /**
         * Encodes the specified PremiumMessageInfo message. Does not implicitly {@link Web.PremiumMessageInfo.verify|verify} messages.
         * @param message PremiumMessageInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IPremiumMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PremiumMessageInfo message, length delimited. Does not implicitly {@link Web.PremiumMessageInfo.verify|verify} messages.
         * @param message PremiumMessageInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IPremiumMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PremiumMessageInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PremiumMessageInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.PremiumMessageInfo;

        /**
         * Decodes a PremiumMessageInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PremiumMessageInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.PremiumMessageInfo;

        /**
         * Verifies a PremiumMessageInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PremiumMessageInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PremiumMessageInfo
         */
        public static fromObject(object: { [k: string]: any }): Web.PremiumMessageInfo;

        /**
         * Creates a plain object from a PremiumMessageInfo message. Also converts values to other types if specified.
         * @param message PremiumMessageInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.PremiumMessageInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PremiumMessageInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PremiumMessageInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a MessageAddOnContextInfo. */
    interface IMessageAddOnContextInfo {

        /** MessageAddOnContextInfo messageAddOnDurationInSecs */
        messageAddOnDurationInSecs?: (number|null);

        /** MessageAddOnContextInfo messageAddOnExpiryType */
        messageAddOnExpiryType?: (E2E.MessageContextInfo.MessageAddonExpiryType|null);
    }

    /** Represents a MessageAddOnContextInfo. */
    class MessageAddOnContextInfo implements IMessageAddOnContextInfo {

        /**
         * Constructs a new MessageAddOnContextInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IMessageAddOnContextInfo);

        /** MessageAddOnContextInfo messageAddOnDurationInSecs. */
        public messageAddOnDurationInSecs: number;

        /** MessageAddOnContextInfo messageAddOnExpiryType. */
        public messageAddOnExpiryType: E2E.MessageContextInfo.MessageAddonExpiryType;

        /**
         * Creates a new MessageAddOnContextInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns MessageAddOnContextInfo instance
         */
        public static create(properties?: Web.IMessageAddOnContextInfo): Web.MessageAddOnContextInfo;

        /**
         * Encodes the specified MessageAddOnContextInfo message. Does not implicitly {@link Web.MessageAddOnContextInfo.verify|verify} messages.
         * @param message MessageAddOnContextInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IMessageAddOnContextInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified MessageAddOnContextInfo message, length delimited. Does not implicitly {@link Web.MessageAddOnContextInfo.verify|verify} messages.
         * @param message MessageAddOnContextInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IMessageAddOnContextInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a MessageAddOnContextInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns MessageAddOnContextInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.MessageAddOnContextInfo;

        /**
         * Decodes a MessageAddOnContextInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns MessageAddOnContextInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.MessageAddOnContextInfo;

        /**
         * Verifies a MessageAddOnContextInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a MessageAddOnContextInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns MessageAddOnContextInfo
         */
        public static fromObject(object: { [k: string]: any }): Web.MessageAddOnContextInfo;

        /**
         * Creates a plain object from a MessageAddOnContextInfo message. Also converts values to other types if specified.
         * @param message MessageAddOnContextInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.MessageAddOnContextInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this MessageAddOnContextInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for MessageAddOnContextInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a PinInChat. */
    interface IPinInChat {

        /** PinInChat type */
        type?: (Web.PinInChat.Type|null);

        /** PinInChat key */
        key?: (Protocol.IMessageKey|null);

        /** PinInChat senderTimestampMs */
        senderTimestampMs?: (number|Long|null);

        /** PinInChat serverTimestampMs */
        serverTimestampMs?: (number|Long|null);

        /** PinInChat messageAddOnContextInfo */
        messageAddOnContextInfo?: (Web.IMessageAddOnContextInfo|null);
    }

    /** Represents a PinInChat. */
    class PinInChat implements IPinInChat {

        /**
         * Constructs a new PinInChat.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IPinInChat);

        /** PinInChat type. */
        public type: Web.PinInChat.Type;

        /** PinInChat key. */
        public key?: (Protocol.IMessageKey|null);

        /** PinInChat senderTimestampMs. */
        public senderTimestampMs: (number|Long);

        /** PinInChat serverTimestampMs. */
        public serverTimestampMs: (number|Long);

        /** PinInChat messageAddOnContextInfo. */
        public messageAddOnContextInfo?: (Web.IMessageAddOnContextInfo|null);

        /**
         * Creates a new PinInChat instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PinInChat instance
         */
        public static create(properties?: Web.IPinInChat): Web.PinInChat;

        /**
         * Encodes the specified PinInChat message. Does not implicitly {@link Web.PinInChat.verify|verify} messages.
         * @param message PinInChat message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IPinInChat, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PinInChat message, length delimited. Does not implicitly {@link Web.PinInChat.verify|verify} messages.
         * @param message PinInChat message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IPinInChat, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PinInChat message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PinInChat
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.PinInChat;

        /**
         * Decodes a PinInChat message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PinInChat
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.PinInChat;

        /**
         * Verifies a PinInChat message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PinInChat message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PinInChat
         */
        public static fromObject(object: { [k: string]: any }): Web.PinInChat;

        /**
         * Creates a plain object from a PinInChat message. Also converts values to other types if specified.
         * @param message PinInChat
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.PinInChat, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PinInChat to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PinInChat
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace PinInChat {

        /** Type enum. */
        enum Type {
            UNKNOWN_TYPE = 0,
            PIN_FOR_ALL = 1,
            UNPIN_FOR_ALL = 2
        }
    }

    /** Properties of a KeepInChat. */
    interface IKeepInChat {

        /** KeepInChat keepType */
        keepType?: (E2E.KeepType|null);

        /** KeepInChat serverTimestamp */
        serverTimestamp?: (number|Long|null);

        /** KeepInChat key */
        key?: (Protocol.IMessageKey|null);

        /** KeepInChat deviceJid */
        deviceJid?: (string|null);

        /** KeepInChat clientTimestampMs */
        clientTimestampMs?: (number|Long|null);

        /** KeepInChat serverTimestampMs */
        serverTimestampMs?: (number|Long|null);
    }

    /** Represents a KeepInChat. */
    class KeepInChat implements IKeepInChat {

        /**
         * Constructs a new KeepInChat.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IKeepInChat);

        /** KeepInChat keepType. */
        public keepType: E2E.KeepType;

        /** KeepInChat serverTimestamp. */
        public serverTimestamp: (number|Long);

        /** KeepInChat key. */
        public key?: (Protocol.IMessageKey|null);

        /** KeepInChat deviceJid. */
        public deviceJid: string;

        /** KeepInChat clientTimestampMs. */
        public clientTimestampMs: (number|Long);

        /** KeepInChat serverTimestampMs. */
        public serverTimestampMs: (number|Long);

        /**
         * Creates a new KeepInChat instance using the specified properties.
         * @param [properties] Properties to set
         * @returns KeepInChat instance
         */
        public static create(properties?: Web.IKeepInChat): Web.KeepInChat;

        /**
         * Encodes the specified KeepInChat message. Does not implicitly {@link Web.KeepInChat.verify|verify} messages.
         * @param message KeepInChat message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IKeepInChat, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified KeepInChat message, length delimited. Does not implicitly {@link Web.KeepInChat.verify|verify} messages.
         * @param message KeepInChat message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IKeepInChat, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a KeepInChat message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns KeepInChat
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.KeepInChat;

        /**
         * Decodes a KeepInChat message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns KeepInChat
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.KeepInChat;

        /**
         * Verifies a KeepInChat message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a KeepInChat message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns KeepInChat
         */
        public static fromObject(object: { [k: string]: any }): Web.KeepInChat;

        /**
         * Creates a plain object from a KeepInChat message. Also converts values to other types if specified.
         * @param message KeepInChat
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.KeepInChat, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this KeepInChat to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for KeepInChat
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of an EventAdditionalMetadata. */
    interface IEventAdditionalMetadata {

        /** EventAdditionalMetadata isStale */
        isStale?: (boolean|null);
    }

    /** Represents an EventAdditionalMetadata. */
    class EventAdditionalMetadata implements IEventAdditionalMetadata {

        /**
         * Constructs a new EventAdditionalMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IEventAdditionalMetadata);

        /** EventAdditionalMetadata isStale. */
        public isStale: boolean;

        /**
         * Creates a new EventAdditionalMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns EventAdditionalMetadata instance
         */
        public static create(properties?: Web.IEventAdditionalMetadata): Web.EventAdditionalMetadata;

        /**
         * Encodes the specified EventAdditionalMetadata message. Does not implicitly {@link Web.EventAdditionalMetadata.verify|verify} messages.
         * @param message EventAdditionalMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IEventAdditionalMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified EventAdditionalMetadata message, length delimited. Does not implicitly {@link Web.EventAdditionalMetadata.verify|verify} messages.
         * @param message EventAdditionalMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IEventAdditionalMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an EventAdditionalMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns EventAdditionalMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.EventAdditionalMetadata;

        /**
         * Decodes an EventAdditionalMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns EventAdditionalMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.EventAdditionalMetadata;

        /**
         * Verifies an EventAdditionalMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an EventAdditionalMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns EventAdditionalMetadata
         */
        public static fromObject(object: { [k: string]: any }): Web.EventAdditionalMetadata;

        /**
         * Creates a plain object from an EventAdditionalMetadata message. Also converts values to other types if specified.
         * @param message EventAdditionalMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.EventAdditionalMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this EventAdditionalMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for EventAdditionalMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a PollAdditionalMetadata. */
    interface IPollAdditionalMetadata {

        /** PollAdditionalMetadata pollInvalidated */
        pollInvalidated?: (boolean|null);
    }

    /** Represents a PollAdditionalMetadata. */
    class PollAdditionalMetadata implements IPollAdditionalMetadata {

        /**
         * Constructs a new PollAdditionalMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IPollAdditionalMetadata);

        /** PollAdditionalMetadata pollInvalidated. */
        public pollInvalidated: boolean;

        /**
         * Creates a new PollAdditionalMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PollAdditionalMetadata instance
         */
        public static create(properties?: Web.IPollAdditionalMetadata): Web.PollAdditionalMetadata;

        /**
         * Encodes the specified PollAdditionalMetadata message. Does not implicitly {@link Web.PollAdditionalMetadata.verify|verify} messages.
         * @param message PollAdditionalMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IPollAdditionalMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PollAdditionalMetadata message, length delimited. Does not implicitly {@link Web.PollAdditionalMetadata.verify|verify} messages.
         * @param message PollAdditionalMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IPollAdditionalMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PollAdditionalMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PollAdditionalMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.PollAdditionalMetadata;

        /**
         * Decodes a PollAdditionalMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PollAdditionalMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.PollAdditionalMetadata;

        /**
         * Verifies a PollAdditionalMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PollAdditionalMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PollAdditionalMetadata
         */
        public static fromObject(object: { [k: string]: any }): Web.PollAdditionalMetadata;

        /**
         * Creates a plain object from a PollAdditionalMetadata message. Also converts values to other types if specified.
         * @param message PollAdditionalMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.PollAdditionalMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PollAdditionalMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PollAdditionalMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a PollUpdate. */
    interface IPollUpdate {

        /** PollUpdate pollUpdateMessageKey */
        pollUpdateMessageKey?: (Protocol.IMessageKey|null);

        /** PollUpdate vote */
        vote?: (E2E.Message.IPollVoteMessage|null);

        /** PollUpdate senderTimestampMs */
        senderTimestampMs?: (number|Long|null);

        /** PollUpdate serverTimestampMs */
        serverTimestampMs?: (number|Long|null);

        /** PollUpdate unread */
        unread?: (boolean|null);
    }

    /** Represents a PollUpdate. */
    class PollUpdate implements IPollUpdate {

        /**
         * Constructs a new PollUpdate.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IPollUpdate);

        /** PollUpdate pollUpdateMessageKey. */
        public pollUpdateMessageKey?: (Protocol.IMessageKey|null);

        /** PollUpdate vote. */
        public vote?: (E2E.Message.IPollVoteMessage|null);

        /** PollUpdate senderTimestampMs. */
        public senderTimestampMs: (number|Long);

        /** PollUpdate serverTimestampMs. */
        public serverTimestampMs: (number|Long);

        /** PollUpdate unread. */
        public unread: boolean;

        /**
         * Creates a new PollUpdate instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PollUpdate instance
         */
        public static create(properties?: Web.IPollUpdate): Web.PollUpdate;

        /**
         * Encodes the specified PollUpdate message. Does not implicitly {@link Web.PollUpdate.verify|verify} messages.
         * @param message PollUpdate message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IPollUpdate, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PollUpdate message, length delimited. Does not implicitly {@link Web.PollUpdate.verify|verify} messages.
         * @param message PollUpdate message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IPollUpdate, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PollUpdate message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PollUpdate
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.PollUpdate;

        /**
         * Decodes a PollUpdate message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PollUpdate
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.PollUpdate;

        /**
         * Verifies a PollUpdate message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PollUpdate message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PollUpdate
         */
        public static fromObject(object: { [k: string]: any }): Web.PollUpdate;

        /**
         * Creates a plain object from a PollUpdate message. Also converts values to other types if specified.
         * @param message PollUpdate
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.PollUpdate, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PollUpdate to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PollUpdate
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a Reaction. */
    interface IReaction {

        /** Reaction key */
        key?: (Protocol.IMessageKey|null);

        /** Reaction text */
        text?: (string|null);

        /** Reaction groupingKey */
        groupingKey?: (string|null);

        /** Reaction senderTimestampMs */
        senderTimestampMs?: (number|Long|null);

        /** Reaction unread */
        unread?: (boolean|null);
    }

    /** Represents a Reaction. */
    class Reaction implements IReaction {

        /**
         * Constructs a new Reaction.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IReaction);

        /** Reaction key. */
        public key?: (Protocol.IMessageKey|null);

        /** Reaction text. */
        public text: string;

        /** Reaction groupingKey. */
        public groupingKey: string;

        /** Reaction senderTimestampMs. */
        public senderTimestampMs: (number|Long);

        /** Reaction unread. */
        public unread: boolean;

        /**
         * Creates a new Reaction instance using the specified properties.
         * @param [properties] Properties to set
         * @returns Reaction instance
         */
        public static create(properties?: Web.IReaction): Web.Reaction;

        /**
         * Encodes the specified Reaction message. Does not implicitly {@link Web.Reaction.verify|verify} messages.
         * @param message Reaction message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IReaction, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified Reaction message, length delimited. Does not implicitly {@link Web.Reaction.verify|verify} messages.
         * @param message Reaction message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IReaction, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a Reaction message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Reaction
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.Reaction;

        /**
         * Decodes a Reaction message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns Reaction
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.Reaction;

        /**
         * Verifies a Reaction message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a Reaction message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Reaction
         */
        public static fromObject(object: { [k: string]: any }): Web.Reaction;

        /**
         * Creates a plain object from a Reaction message. Also converts values to other types if specified.
         * @param message Reaction
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.Reaction, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Reaction to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for Reaction
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a UserReceipt. */
    interface IUserReceipt {

        /** UserReceipt userJid */
        userJid: string;

        /** UserReceipt receiptTimestamp */
        receiptTimestamp?: (number|Long|null);

        /** UserReceipt readTimestamp */
        readTimestamp?: (number|Long|null);

        /** UserReceipt playedTimestamp */
        playedTimestamp?: (number|Long|null);

        /** UserReceipt pendingDeviceJid */
        pendingDeviceJid?: (string[]|null);

        /** UserReceipt deliveredDeviceJid */
        deliveredDeviceJid?: (string[]|null);
    }

    /** Represents a UserReceipt. */
    class UserReceipt implements IUserReceipt {

        /**
         * Constructs a new UserReceipt.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IUserReceipt);

        /** UserReceipt userJid. */
        public userJid: string;

        /** UserReceipt receiptTimestamp. */
        public receiptTimestamp: (number|Long);

        /** UserReceipt readTimestamp. */
        public readTimestamp: (number|Long);

        /** UserReceipt playedTimestamp. */
        public playedTimestamp: (number|Long);

        /** UserReceipt pendingDeviceJid. */
        public pendingDeviceJid: string[];

        /** UserReceipt deliveredDeviceJid. */
        public deliveredDeviceJid: string[];

        /**
         * Creates a new UserReceipt instance using the specified properties.
         * @param [properties] Properties to set
         * @returns UserReceipt instance
         */
        public static create(properties?: Web.IUserReceipt): Web.UserReceipt;

        /**
         * Encodes the specified UserReceipt message. Does not implicitly {@link Web.UserReceipt.verify|verify} messages.
         * @param message UserReceipt message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IUserReceipt, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified UserReceipt message, length delimited. Does not implicitly {@link Web.UserReceipt.verify|verify} messages.
         * @param message UserReceipt message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IUserReceipt, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a UserReceipt message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns UserReceipt
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.UserReceipt;

        /**
         * Decodes a UserReceipt message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns UserReceipt
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.UserReceipt;

        /**
         * Verifies a UserReceipt message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a UserReceipt message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns UserReceipt
         */
        public static fromObject(object: { [k: string]: any }): Web.UserReceipt;

        /**
         * Creates a plain object from a UserReceipt message. Also converts values to other types if specified.
         * @param message UserReceipt
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.UserReceipt, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this UserReceipt to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for UserReceipt
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a StatusPSA. */
    interface IStatusPSA {

        /** StatusPSA campaignId */
        campaignId: (number|Long);

        /** StatusPSA campaignExpirationTimestamp */
        campaignExpirationTimestamp?: (number|Long|null);
    }

    /** Represents a StatusPSA. */
    class StatusPSA implements IStatusPSA {

        /**
         * Constructs a new StatusPSA.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IStatusPSA);

        /** StatusPSA campaignId. */
        public campaignId: (number|Long);

        /** StatusPSA campaignExpirationTimestamp. */
        public campaignExpirationTimestamp: (number|Long);

        /**
         * Creates a new StatusPSA instance using the specified properties.
         * @param [properties] Properties to set
         * @returns StatusPSA instance
         */
        public static create(properties?: Web.IStatusPSA): Web.StatusPSA;

        /**
         * Encodes the specified StatusPSA message. Does not implicitly {@link Web.StatusPSA.verify|verify} messages.
         * @param message StatusPSA message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IStatusPSA, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified StatusPSA message, length delimited. Does not implicitly {@link Web.StatusPSA.verify|verify} messages.
         * @param message StatusPSA message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IStatusPSA, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a StatusPSA message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns StatusPSA
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.StatusPSA;

        /**
         * Decodes a StatusPSA message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns StatusPSA
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.StatusPSA;

        /**
         * Verifies a StatusPSA message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a StatusPSA message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns StatusPSA
         */
        public static fromObject(object: { [k: string]: any }): Web.StatusPSA;

        /**
         * Creates a plain object from a StatusPSA message. Also converts values to other types if specified.
         * @param message StatusPSA
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.StatusPSA, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this StatusPSA to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for StatusPSA
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a PhotoChange. */
    interface IPhotoChange {

        /** PhotoChange oldPhoto */
        oldPhoto?: (Uint8Array|null);

        /** PhotoChange newPhoto */
        newPhoto?: (Uint8Array|null);

        /** PhotoChange newPhotoId */
        newPhotoId?: (number|null);
    }

    /** Represents a PhotoChange. */
    class PhotoChange implements IPhotoChange {

        /**
         * Constructs a new PhotoChange.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IPhotoChange);

        /** PhotoChange oldPhoto. */
        public oldPhoto: Uint8Array;

        /** PhotoChange newPhoto. */
        public newPhoto: Uint8Array;

        /** PhotoChange newPhotoId. */
        public newPhotoId: number;

        /**
         * Creates a new PhotoChange instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PhotoChange instance
         */
        public static create(properties?: Web.IPhotoChange): Web.PhotoChange;

        /**
         * Encodes the specified PhotoChange message. Does not implicitly {@link Web.PhotoChange.verify|verify} messages.
         * @param message PhotoChange message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IPhotoChange, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PhotoChange message, length delimited. Does not implicitly {@link Web.PhotoChange.verify|verify} messages.
         * @param message PhotoChange message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IPhotoChange, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PhotoChange message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PhotoChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.PhotoChange;

        /**
         * Decodes a PhotoChange message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PhotoChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.PhotoChange;

        /**
         * Verifies a PhotoChange message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PhotoChange message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PhotoChange
         */
        public static fromObject(object: { [k: string]: any }): Web.PhotoChange;

        /**
         * Creates a plain object from a PhotoChange message. Also converts values to other types if specified.
         * @param message PhotoChange
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.PhotoChange, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PhotoChange to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PhotoChange
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a MediaData. */
    interface IMediaData {

        /** MediaData localPath */
        localPath?: (string|null);
    }

    /** Represents a MediaData. */
    class MediaData implements IMediaData {

        /**
         * Constructs a new MediaData.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IMediaData);

        /** MediaData localPath. */
        public localPath: string;

        /**
         * Creates a new MediaData instance using the specified properties.
         * @param [properties] Properties to set
         * @returns MediaData instance
         */
        public static create(properties?: Web.IMediaData): Web.MediaData;

        /**
         * Encodes the specified MediaData message. Does not implicitly {@link Web.MediaData.verify|verify} messages.
         * @param message MediaData message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IMediaData, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified MediaData message, length delimited. Does not implicitly {@link Web.MediaData.verify|verify} messages.
         * @param message MediaData message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IMediaData, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a MediaData message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns MediaData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.MediaData;

        /**
         * Decodes a MediaData message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns MediaData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.MediaData;

        /**
         * Verifies a MediaData message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a MediaData message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns MediaData
         */
        public static fromObject(object: { [k: string]: any }): Web.MediaData;

        /**
         * Creates a plain object from a MediaData message. Also converts values to other types if specified.
         * @param message MediaData
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.MediaData, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this MediaData to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for MediaData
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a ReportingTokenInfo. */
    interface IReportingTokenInfo {

        /** ReportingTokenInfo reportingTag */
        reportingTag?: (Uint8Array|null);
    }

    /** Represents a ReportingTokenInfo. */
    class ReportingTokenInfo implements IReportingTokenInfo {

        /**
         * Constructs a new ReportingTokenInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IReportingTokenInfo);

        /** ReportingTokenInfo reportingTag. */
        public reportingTag: Uint8Array;

        /**
         * Creates a new ReportingTokenInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns ReportingTokenInfo instance
         */
        public static create(properties?: Web.IReportingTokenInfo): Web.ReportingTokenInfo;

        /**
         * Encodes the specified ReportingTokenInfo message. Does not implicitly {@link Web.ReportingTokenInfo.verify|verify} messages.
         * @param message ReportingTokenInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IReportingTokenInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified ReportingTokenInfo message, length delimited. Does not implicitly {@link Web.ReportingTokenInfo.verify|verify} messages.
         * @param message ReportingTokenInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IReportingTokenInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a ReportingTokenInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns ReportingTokenInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.ReportingTokenInfo;

        /**
         * Decodes a ReportingTokenInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns ReportingTokenInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.ReportingTokenInfo;

        /**
         * Verifies a ReportingTokenInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a ReportingTokenInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns ReportingTokenInfo
         */
        public static fromObject(object: { [k: string]: any }): Web.ReportingTokenInfo;

        /**
         * Creates a plain object from a ReportingTokenInfo message. Also converts values to other types if specified.
         * @param message ReportingTokenInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.ReportingTokenInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this ReportingTokenInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for ReportingTokenInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a WebFeatures. */
    interface IWebFeatures {

        /** WebFeatures labelsDisplay */
        labelsDisplay?: (Web.WebFeatures.Flag|null);

        /** WebFeatures voipIndividualOutgoing */
        voipIndividualOutgoing?: (Web.WebFeatures.Flag|null);

        /** WebFeatures groupsV3 */
        groupsV3?: (Web.WebFeatures.Flag|null);

        /** WebFeatures groupsV3Create */
        groupsV3Create?: (Web.WebFeatures.Flag|null);

        /** WebFeatures changeNumberV2 */
        changeNumberV2?: (Web.WebFeatures.Flag|null);

        /** WebFeatures queryStatusV3Thumbnail */
        queryStatusV3Thumbnail?: (Web.WebFeatures.Flag|null);

        /** WebFeatures liveLocations */
        liveLocations?: (Web.WebFeatures.Flag|null);

        /** WebFeatures queryVname */
        queryVname?: (Web.WebFeatures.Flag|null);

        /** WebFeatures voipIndividualIncoming */
        voipIndividualIncoming?: (Web.WebFeatures.Flag|null);

        /** WebFeatures quickRepliesQuery */
        quickRepliesQuery?: (Web.WebFeatures.Flag|null);

        /** WebFeatures payments */
        payments?: (Web.WebFeatures.Flag|null);

        /** WebFeatures stickerPackQuery */
        stickerPackQuery?: (Web.WebFeatures.Flag|null);

        /** WebFeatures liveLocationsFinal */
        liveLocationsFinal?: (Web.WebFeatures.Flag|null);

        /** WebFeatures labelsEdit */
        labelsEdit?: (Web.WebFeatures.Flag|null);

        /** WebFeatures mediaUpload */
        mediaUpload?: (Web.WebFeatures.Flag|null);

        /** WebFeatures mediaUploadRichQuickReplies */
        mediaUploadRichQuickReplies?: (Web.WebFeatures.Flag|null);

        /** WebFeatures vnameV2 */
        vnameV2?: (Web.WebFeatures.Flag|null);

        /** WebFeatures videoPlaybackUrl */
        videoPlaybackUrl?: (Web.WebFeatures.Flag|null);

        /** WebFeatures statusRanking */
        statusRanking?: (Web.WebFeatures.Flag|null);

        /** WebFeatures voipIndividualVideo */
        voipIndividualVideo?: (Web.WebFeatures.Flag|null);

        /** WebFeatures thirdPartyStickers */
        thirdPartyStickers?: (Web.WebFeatures.Flag|null);

        /** WebFeatures frequentlyForwardedSetting */
        frequentlyForwardedSetting?: (Web.WebFeatures.Flag|null);

        /** WebFeatures groupsV4JoinPermission */
        groupsV4JoinPermission?: (Web.WebFeatures.Flag|null);

        /** WebFeatures recentStickers */
        recentStickers?: (Web.WebFeatures.Flag|null);

        /** WebFeatures catalog */
        catalog?: (Web.WebFeatures.Flag|null);

        /** WebFeatures starredStickers */
        starredStickers?: (Web.WebFeatures.Flag|null);

        /** WebFeatures voipGroupCall */
        voipGroupCall?: (Web.WebFeatures.Flag|null);

        /** WebFeatures templateMessage */
        templateMessage?: (Web.WebFeatures.Flag|null);

        /** WebFeatures templateMessageInteractivity */
        templateMessageInteractivity?: (Web.WebFeatures.Flag|null);

        /** WebFeatures ephemeralMessages */
        ephemeralMessages?: (Web.WebFeatures.Flag|null);

        /** WebFeatures e2ENotificationSync */
        e2ENotificationSync?: (Web.WebFeatures.Flag|null);

        /** WebFeatures recentStickersV2 */
        recentStickersV2?: (Web.WebFeatures.Flag|null);

        /** WebFeatures recentStickersV3 */
        recentStickersV3?: (Web.WebFeatures.Flag|null);

        /** WebFeatures userNotice */
        userNotice?: (Web.WebFeatures.Flag|null);

        /** WebFeatures support */
        support?: (Web.WebFeatures.Flag|null);

        /** WebFeatures groupUiiCleanup */
        groupUiiCleanup?: (Web.WebFeatures.Flag|null);

        /** WebFeatures groupDogfoodingInternalOnly */
        groupDogfoodingInternalOnly?: (Web.WebFeatures.Flag|null);

        /** WebFeatures settingsSync */
        settingsSync?: (Web.WebFeatures.Flag|null);

        /** WebFeatures archiveV2 */
        archiveV2?: (Web.WebFeatures.Flag|null);

        /** WebFeatures ephemeralAllowGroupMembers */
        ephemeralAllowGroupMembers?: (Web.WebFeatures.Flag|null);

        /** WebFeatures ephemeral24HDuration */
        ephemeral24HDuration?: (Web.WebFeatures.Flag|null);

        /** WebFeatures mdForceUpgrade */
        mdForceUpgrade?: (Web.WebFeatures.Flag|null);

        /** WebFeatures disappearingMode */
        disappearingMode?: (Web.WebFeatures.Flag|null);

        /** WebFeatures externalMdOptInAvailable */
        externalMdOptInAvailable?: (Web.WebFeatures.Flag|null);

        /** WebFeatures noDeleteMessageTimeLimit */
        noDeleteMessageTimeLimit?: (Web.WebFeatures.Flag|null);
    }

    /** Represents a WebFeatures. */
    class WebFeatures implements IWebFeatures {

        /**
         * Constructs a new WebFeatures.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IWebFeatures);

        /** WebFeatures labelsDisplay. */
        public labelsDisplay: Web.WebFeatures.Flag;

        /** WebFeatures voipIndividualOutgoing. */
        public voipIndividualOutgoing: Web.WebFeatures.Flag;

        /** WebFeatures groupsV3. */
        public groupsV3: Web.WebFeatures.Flag;

        /** WebFeatures groupsV3Create. */
        public groupsV3Create: Web.WebFeatures.Flag;

        /** WebFeatures changeNumberV2. */
        public changeNumberV2: Web.WebFeatures.Flag;

        /** WebFeatures queryStatusV3Thumbnail. */
        public queryStatusV3Thumbnail: Web.WebFeatures.Flag;

        /** WebFeatures liveLocations. */
        public liveLocations: Web.WebFeatures.Flag;

        /** WebFeatures queryVname. */
        public queryVname: Web.WebFeatures.Flag;

        /** WebFeatures voipIndividualIncoming. */
        public voipIndividualIncoming: Web.WebFeatures.Flag;

        /** WebFeatures quickRepliesQuery. */
        public quickRepliesQuery: Web.WebFeatures.Flag;

        /** WebFeatures payments. */
        public payments: Web.WebFeatures.Flag;

        /** WebFeatures stickerPackQuery. */
        public stickerPackQuery: Web.WebFeatures.Flag;

        /** WebFeatures liveLocationsFinal. */
        public liveLocationsFinal: Web.WebFeatures.Flag;

        /** WebFeatures labelsEdit. */
        public labelsEdit: Web.WebFeatures.Flag;

        /** WebFeatures mediaUpload. */
        public mediaUpload: Web.WebFeatures.Flag;

        /** WebFeatures mediaUploadRichQuickReplies. */
        public mediaUploadRichQuickReplies: Web.WebFeatures.Flag;

        /** WebFeatures vnameV2. */
        public vnameV2: Web.WebFeatures.Flag;

        /** WebFeatures videoPlaybackUrl. */
        public videoPlaybackUrl: Web.WebFeatures.Flag;

        /** WebFeatures statusRanking. */
        public statusRanking: Web.WebFeatures.Flag;

        /** WebFeatures voipIndividualVideo. */
        public voipIndividualVideo: Web.WebFeatures.Flag;

        /** WebFeatures thirdPartyStickers. */
        public thirdPartyStickers: Web.WebFeatures.Flag;

        /** WebFeatures frequentlyForwardedSetting. */
        public frequentlyForwardedSetting: Web.WebFeatures.Flag;

        /** WebFeatures groupsV4JoinPermission. */
        public groupsV4JoinPermission: Web.WebFeatures.Flag;

        /** WebFeatures recentStickers. */
        public recentStickers: Web.WebFeatures.Flag;

        /** WebFeatures catalog. */
        public catalog: Web.WebFeatures.Flag;

        /** WebFeatures starredStickers. */
        public starredStickers: Web.WebFeatures.Flag;

        /** WebFeatures voipGroupCall. */
        public voipGroupCall: Web.WebFeatures.Flag;

        /** WebFeatures templateMessage. */
        public templateMessage: Web.WebFeatures.Flag;

        /** WebFeatures templateMessageInteractivity. */
        public templateMessageInteractivity: Web.WebFeatures.Flag;

        /** WebFeatures ephemeralMessages. */
        public ephemeralMessages: Web.WebFeatures.Flag;

        /** WebFeatures e2ENotificationSync. */
        public e2ENotificationSync: Web.WebFeatures.Flag;

        /** WebFeatures recentStickersV2. */
        public recentStickersV2: Web.WebFeatures.Flag;

        /** WebFeatures recentStickersV3. */
        public recentStickersV3: Web.WebFeatures.Flag;

        /** WebFeatures userNotice. */
        public userNotice: Web.WebFeatures.Flag;

        /** WebFeatures support. */
        public support: Web.WebFeatures.Flag;

        /** WebFeatures groupUiiCleanup. */
        public groupUiiCleanup: Web.WebFeatures.Flag;

        /** WebFeatures groupDogfoodingInternalOnly. */
        public groupDogfoodingInternalOnly: Web.WebFeatures.Flag;

        /** WebFeatures settingsSync. */
        public settingsSync: Web.WebFeatures.Flag;

        /** WebFeatures archiveV2. */
        public archiveV2: Web.WebFeatures.Flag;

        /** WebFeatures ephemeralAllowGroupMembers. */
        public ephemeralAllowGroupMembers: Web.WebFeatures.Flag;

        /** WebFeatures ephemeral24HDuration. */
        public ephemeral24HDuration: Web.WebFeatures.Flag;

        /** WebFeatures mdForceUpgrade. */
        public mdForceUpgrade: Web.WebFeatures.Flag;

        /** WebFeatures disappearingMode. */
        public disappearingMode: Web.WebFeatures.Flag;

        /** WebFeatures externalMdOptInAvailable. */
        public externalMdOptInAvailable: Web.WebFeatures.Flag;

        /** WebFeatures noDeleteMessageTimeLimit. */
        public noDeleteMessageTimeLimit: Web.WebFeatures.Flag;

        /**
         * Creates a new WebFeatures instance using the specified properties.
         * @param [properties] Properties to set
         * @returns WebFeatures instance
         */
        public static create(properties?: Web.IWebFeatures): Web.WebFeatures;

        /**
         * Encodes the specified WebFeatures message. Does not implicitly {@link Web.WebFeatures.verify|verify} messages.
         * @param message WebFeatures message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IWebFeatures, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified WebFeatures message, length delimited. Does not implicitly {@link Web.WebFeatures.verify|verify} messages.
         * @param message WebFeatures message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IWebFeatures, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a WebFeatures message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns WebFeatures
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.WebFeatures;

        /**
         * Decodes a WebFeatures message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns WebFeatures
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.WebFeatures;

        /**
         * Verifies a WebFeatures message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a WebFeatures message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns WebFeatures
         */
        public static fromObject(object: { [k: string]: any }): Web.WebFeatures;

        /**
         * Creates a plain object from a WebFeatures message. Also converts values to other types if specified.
         * @param message WebFeatures
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.WebFeatures, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this WebFeatures to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for WebFeatures
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace WebFeatures {

        /** Flag enum. */
        enum Flag {
            NOT_STARTED = 0,
            FORCE_UPGRADE = 1,
            DEVELOPMENT = 2,
            PRODUCTION = 3
        }
    }

    /** Properties of a NotificationMessageInfo. */
    interface INotificationMessageInfo {

        /** NotificationMessageInfo key */
        key?: (Protocol.IMessageKey|null);

        /** NotificationMessageInfo message */
        message?: (E2E.IMessage|null);

        /** NotificationMessageInfo messageTimestamp */
        messageTimestamp?: (number|Long|null);

        /** NotificationMessageInfo participant */
        participant?: (string|null);
    }

    /** Represents a NotificationMessageInfo. */
    class NotificationMessageInfo implements INotificationMessageInfo {

        /**
         * Constructs a new NotificationMessageInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.INotificationMessageInfo);

        /** NotificationMessageInfo key. */
        public key?: (Protocol.IMessageKey|null);

        /** NotificationMessageInfo message. */
        public message?: (E2E.IMessage|null);

        /** NotificationMessageInfo messageTimestamp. */
        public messageTimestamp: (number|Long);

        /** NotificationMessageInfo participant. */
        public participant: string;

        /**
         * Creates a new NotificationMessageInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns NotificationMessageInfo instance
         */
        public static create(properties?: Web.INotificationMessageInfo): Web.NotificationMessageInfo;

        /**
         * Encodes the specified NotificationMessageInfo message. Does not implicitly {@link Web.NotificationMessageInfo.verify|verify} messages.
         * @param message NotificationMessageInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.INotificationMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified NotificationMessageInfo message, length delimited. Does not implicitly {@link Web.NotificationMessageInfo.verify|verify} messages.
         * @param message NotificationMessageInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.INotificationMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a NotificationMessageInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns NotificationMessageInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.NotificationMessageInfo;

        /**
         * Decodes a NotificationMessageInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns NotificationMessageInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.NotificationMessageInfo;

        /**
         * Verifies a NotificationMessageInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a NotificationMessageInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns NotificationMessageInfo
         */
        public static fromObject(object: { [k: string]: any }): Web.NotificationMessageInfo;

        /**
         * Creates a plain object from a NotificationMessageInfo message. Also converts values to other types if specified.
         * @param message NotificationMessageInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.NotificationMessageInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this NotificationMessageInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for NotificationMessageInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a WebNotificationsInfo. */
    interface IWebNotificationsInfo {

        /** WebNotificationsInfo timestamp */
        timestamp?: (number|Long|null);

        /** WebNotificationsInfo unreadChats */
        unreadChats?: (number|null);

        /** WebNotificationsInfo notifyMessageCount */
        notifyMessageCount?: (number|null);

        /** WebNotificationsInfo notifyMessages */
        notifyMessages?: (Web.IWebMessageInfo[]|null);
    }

    /** Represents a WebNotificationsInfo. */
    class WebNotificationsInfo implements IWebNotificationsInfo {

        /**
         * Constructs a new WebNotificationsInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IWebNotificationsInfo);

        /** WebNotificationsInfo timestamp. */
        public timestamp: (number|Long);

        /** WebNotificationsInfo unreadChats. */
        public unreadChats: number;

        /** WebNotificationsInfo notifyMessageCount. */
        public notifyMessageCount: number;

        /** WebNotificationsInfo notifyMessages. */
        public notifyMessages: Web.IWebMessageInfo[];

        /**
         * Creates a new WebNotificationsInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns WebNotificationsInfo instance
         */
        public static create(properties?: Web.IWebNotificationsInfo): Web.WebNotificationsInfo;

        /**
         * Encodes the specified WebNotificationsInfo message. Does not implicitly {@link Web.WebNotificationsInfo.verify|verify} messages.
         * @param message WebNotificationsInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IWebNotificationsInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified WebNotificationsInfo message, length delimited. Does not implicitly {@link Web.WebNotificationsInfo.verify|verify} messages.
         * @param message WebNotificationsInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IWebNotificationsInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a WebNotificationsInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns WebNotificationsInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.WebNotificationsInfo;

        /**
         * Decodes a WebNotificationsInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns WebNotificationsInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.WebNotificationsInfo;

        /**
         * Verifies a WebNotificationsInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a WebNotificationsInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns WebNotificationsInfo
         */
        public static fromObject(object: { [k: string]: any }): Web.WebNotificationsInfo;

        /**
         * Creates a plain object from a WebNotificationsInfo message. Also converts values to other types if specified.
         * @param message WebNotificationsInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.WebNotificationsInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this WebNotificationsInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for WebNotificationsInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a PaymentInfo. */
    interface IPaymentInfo {

        /** PaymentInfo currencyDeprecated */
        currencyDeprecated?: (Web.PaymentInfo.Currency|null);

        /** PaymentInfo amount1000 */
        amount1000?: (number|Long|null);

        /** PaymentInfo receiverJid */
        receiverJid?: (string|null);

        /** PaymentInfo status */
        status?: (Web.PaymentInfo.Status|null);

        /** PaymentInfo transactionTimestamp */
        transactionTimestamp?: (number|Long|null);

        /** PaymentInfo requestMessageKey */
        requestMessageKey?: (Protocol.IMessageKey|null);

        /** PaymentInfo expiryTimestamp */
        expiryTimestamp?: (number|Long|null);

        /** PaymentInfo futureproofed */
        futureproofed?: (boolean|null);

        /** PaymentInfo currency */
        currency?: (string|null);

        /** PaymentInfo txnStatus */
        txnStatus?: (Web.PaymentInfo.TxnStatus|null);

        /** PaymentInfo useNoviFiatFormat */
        useNoviFiatFormat?: (boolean|null);

        /** PaymentInfo primaryAmount */
        primaryAmount?: (E2E.IMoney|null);

        /** PaymentInfo exchangeAmount */
        exchangeAmount?: (E2E.IMoney|null);
    }

    /** Represents a PaymentInfo. */
    class PaymentInfo implements IPaymentInfo {

        /**
         * Constructs a new PaymentInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IPaymentInfo);

        /** PaymentInfo currencyDeprecated. */
        public currencyDeprecated: Web.PaymentInfo.Currency;

        /** PaymentInfo amount1000. */
        public amount1000: (number|Long);

        /** PaymentInfo receiverJid. */
        public receiverJid: string;

        /** PaymentInfo status. */
        public status: Web.PaymentInfo.Status;

        /** PaymentInfo transactionTimestamp. */
        public transactionTimestamp: (number|Long);

        /** PaymentInfo requestMessageKey. */
        public requestMessageKey?: (Protocol.IMessageKey|null);

        /** PaymentInfo expiryTimestamp. */
        public expiryTimestamp: (number|Long);

        /** PaymentInfo futureproofed. */
        public futureproofed: boolean;

        /** PaymentInfo currency. */
        public currency: string;

        /** PaymentInfo txnStatus. */
        public txnStatus: Web.PaymentInfo.TxnStatus;

        /** PaymentInfo useNoviFiatFormat. */
        public useNoviFiatFormat: boolean;

        /** PaymentInfo primaryAmount. */
        public primaryAmount?: (E2E.IMoney|null);

        /** PaymentInfo exchangeAmount. */
        public exchangeAmount?: (E2E.IMoney|null);

        /**
         * Creates a new PaymentInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PaymentInfo instance
         */
        public static create(properties?: Web.IPaymentInfo): Web.PaymentInfo;

        /**
         * Encodes the specified PaymentInfo message. Does not implicitly {@link Web.PaymentInfo.verify|verify} messages.
         * @param message PaymentInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IPaymentInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PaymentInfo message, length delimited. Does not implicitly {@link Web.PaymentInfo.verify|verify} messages.
         * @param message PaymentInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IPaymentInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PaymentInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PaymentInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.PaymentInfo;

        /**
         * Decodes a PaymentInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PaymentInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.PaymentInfo;

        /**
         * Verifies a PaymentInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PaymentInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PaymentInfo
         */
        public static fromObject(object: { [k: string]: any }): Web.PaymentInfo;

        /**
         * Creates a plain object from a PaymentInfo message. Also converts values to other types if specified.
         * @param message PaymentInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.PaymentInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PaymentInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PaymentInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace PaymentInfo {

        /** Currency enum. */
        enum Currency {
            UNKNOWN_CURRENCY = 0,
            INR = 1
        }

        /** Status enum. */
        enum Status {
            UNKNOWN_STATUS = 0,
            PROCESSING = 1,
            SENT = 2,
            NEED_TO_ACCEPT = 3,
            COMPLETE = 4,
            COULD_NOT_COMPLETE = 5,
            REFUNDED = 6,
            EXPIRED = 7,
            REJECTED = 8,
            CANCELLED = 9,
            WAITING_FOR_PAYER = 10,
            WAITING = 11
        }

        /** TxnStatus enum. */
        enum TxnStatus {
            UNKNOWN = 0,
            PENDING_SETUP = 1,
            PENDING_RECEIVER_SETUP = 2,
            INIT = 3,
            SUCCESS = 4,
            COMPLETED = 5,
            FAILED = 6,
            FAILED_RISK = 7,
            FAILED_PROCESSING = 8,
            FAILED_RECEIVER_PROCESSING = 9,
            FAILED_DA = 10,
            FAILED_DA_FINAL = 11,
            REFUNDED_TXN = 12,
            REFUND_FAILED = 13,
            REFUND_FAILED_PROCESSING = 14,
            REFUND_FAILED_DA = 15,
            EXPIRED_TXN = 16,
            AUTH_CANCELED = 17,
            AUTH_CANCEL_FAILED_PROCESSING = 18,
            AUTH_CANCEL_FAILED = 19,
            COLLECT_INIT = 20,
            COLLECT_SUCCESS = 21,
            COLLECT_FAILED = 22,
            COLLECT_FAILED_RISK = 23,
            COLLECT_REJECTED = 24,
            COLLECT_EXPIRED = 25,
            COLLECT_CANCELED = 26,
            COLLECT_CANCELLING = 27,
            IN_REVIEW = 28,
            REVERSAL_SUCCESS = 29,
            REVERSAL_PENDING = 30,
            REFUND_PENDING = 31
        }
    }

    /** Properties of a CommentMetadata. */
    interface ICommentMetadata {

        /** CommentMetadata commentParentKey */
        commentParentKey?: (Protocol.IMessageKey|null);

        /** CommentMetadata replyCount */
        replyCount?: (number|null);
    }

    /** Represents a CommentMetadata. */
    class CommentMetadata implements ICommentMetadata {

        /**
         * Constructs a new CommentMetadata.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.ICommentMetadata);

        /** CommentMetadata commentParentKey. */
        public commentParentKey?: (Protocol.IMessageKey|null);

        /** CommentMetadata replyCount. */
        public replyCount: number;

        /**
         * Creates a new CommentMetadata instance using the specified properties.
         * @param [properties] Properties to set
         * @returns CommentMetadata instance
         */
        public static create(properties?: Web.ICommentMetadata): Web.CommentMetadata;

        /**
         * Encodes the specified CommentMetadata message. Does not implicitly {@link Web.CommentMetadata.verify|verify} messages.
         * @param message CommentMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.ICommentMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified CommentMetadata message, length delimited. Does not implicitly {@link Web.CommentMetadata.verify|verify} messages.
         * @param message CommentMetadata message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.ICommentMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a CommentMetadata message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns CommentMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.CommentMetadata;

        /**
         * Decodes a CommentMetadata message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns CommentMetadata
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.CommentMetadata;

        /**
         * Verifies a CommentMetadata message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a CommentMetadata message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns CommentMetadata
         */
        public static fromObject(object: { [k: string]: any }): Web.CommentMetadata;

        /**
         * Creates a plain object from a CommentMetadata message. Also converts values to other types if specified.
         * @param message CommentMetadata
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.CommentMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this CommentMetadata to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for CommentMetadata
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a WebMessageInfo. */
    interface IWebMessageInfo {

        /** WebMessageInfo key */
        key: Protocol.IMessageKey;

        /** WebMessageInfo message */
        message?: (E2E.IMessage|null);

        /** WebMessageInfo messageTimestamp */
        messageTimestamp?: (number|Long|null);

        /** WebMessageInfo status */
        status?: (Web.WebMessageInfo.Status|null);

        /** WebMessageInfo participant */
        participant?: (string|null);

        /** WebMessageInfo messageC2STimestamp */
        messageC2STimestamp?: (number|Long|null);

        /** WebMessageInfo ignore */
        ignore?: (boolean|null);

        /** WebMessageInfo starred */
        starred?: (boolean|null);

        /** WebMessageInfo broadcast */
        broadcast?: (boolean|null);

        /** WebMessageInfo pushName */
        pushName?: (string|null);

        /** WebMessageInfo mediaCiphertextSha256 */
        mediaCiphertextSha256?: (Uint8Array|null);

        /** WebMessageInfo multicast */
        multicast?: (boolean|null);

        /** WebMessageInfo urlText */
        urlText?: (boolean|null);

        /** WebMessageInfo urlNumber */
        urlNumber?: (boolean|null);

        /** WebMessageInfo messageStubType */
        messageStubType?: (Web.WebMessageInfo.StubType|null);

        /** WebMessageInfo clearMedia */
        clearMedia?: (boolean|null);

        /** WebMessageInfo messageStubParameters */
        messageStubParameters?: (string[]|null);

        /** WebMessageInfo duration */
        duration?: (number|null);

        /** WebMessageInfo labels */
        labels?: (string[]|null);

        /** WebMessageInfo paymentInfo */
        paymentInfo?: (Web.IPaymentInfo|null);

        /** WebMessageInfo finalLiveLocation */
        finalLiveLocation?: (E2E.Message.ILiveLocationMessage|null);

        /** WebMessageInfo quotedPaymentInfo */
        quotedPaymentInfo?: (Web.IPaymentInfo|null);

        /** WebMessageInfo ephemeralStartTimestamp */
        ephemeralStartTimestamp?: (number|Long|null);

        /** WebMessageInfo ephemeralDuration */
        ephemeralDuration?: (number|null);

        /** WebMessageInfo ephemeralOffToOn */
        ephemeralOffToOn?: (boolean|null);

        /** WebMessageInfo ephemeralOutOfSync */
        ephemeralOutOfSync?: (boolean|null);

        /** WebMessageInfo bizPrivacyStatus */
        bizPrivacyStatus?: (Web.WebMessageInfo.BizPrivacyStatus|null);

        /** WebMessageInfo verifiedBizName */
        verifiedBizName?: (string|null);

        /** WebMessageInfo mediaData */
        mediaData?: (E2E.PaymentBackground.IMediaData|null);

        /** WebMessageInfo photoChange */
        photoChange?: (Web.IPhotoChange|null);

        /** WebMessageInfo userReceipt */
        userReceipt?: (Web.IUserReceipt[]|null);

        /** WebMessageInfo reactions */
        reactions?: (Web.IReaction[]|null);

        /** WebMessageInfo quotedStickerData */
        quotedStickerData?: (E2E.PaymentBackground.IMediaData|null);

        /** WebMessageInfo futureproofData */
        futureproofData?: (Uint8Array|null);

        /** WebMessageInfo statusPsa */
        statusPsa?: (Web.IStatusPSA|null);

        /** WebMessageInfo pollUpdates */
        pollUpdates?: (Web.IPollUpdate[]|null);

        /** WebMessageInfo pollAdditionalMetadata */
        pollAdditionalMetadata?: (Web.IPollAdditionalMetadata|null);

        /** WebMessageInfo agentId */
        agentId?: (string|null);

        /** WebMessageInfo statusAlreadyViewed */
        statusAlreadyViewed?: (boolean|null);

        /** WebMessageInfo messageSecret */
        messageSecret?: (Uint8Array|null);

        /** WebMessageInfo keepInChat */
        keepInChat?: (Web.IKeepInChat|null);

        /** WebMessageInfo originalSelfAuthorUserJidString */
        originalSelfAuthorUserJidString?: (string|null);

        /** WebMessageInfo revokeMessageTimestamp */
        revokeMessageTimestamp?: (number|Long|null);

        /** WebMessageInfo pinInChat */
        pinInChat?: (Web.IPinInChat|null);

        /** WebMessageInfo premiumMessageInfo */
        premiumMessageInfo?: (Web.IPremiumMessageInfo|null);

        /** WebMessageInfo is1PBizBotMessage */
        is1PBizBotMessage?: (boolean|null);

        /** WebMessageInfo isGroupHistoryMessage */
        isGroupHistoryMessage?: (boolean|null);

        /** WebMessageInfo botMessageInvokerJid */
        botMessageInvokerJid?: (string|null);

        /** WebMessageInfo commentMetadata */
        commentMetadata?: (Web.ICommentMetadata|null);

        /** WebMessageInfo eventResponses */
        eventResponses?: (Web.IEventResponse[]|null);

        /** WebMessageInfo reportingTokenInfo */
        reportingTokenInfo?: (Web.IReportingTokenInfo|null);

        /** WebMessageInfo newsletterServerId */
        newsletterServerId?: (number|Long|null);

        /** WebMessageInfo eventAdditionalMetadata */
        eventAdditionalMetadata?: (Web.IEventAdditionalMetadata|null);

        /** WebMessageInfo isMentionedInStatus */
        isMentionedInStatus?: (boolean|null);

        /** WebMessageInfo statusMentions */
        statusMentions?: (string[]|null);

        /** WebMessageInfo targetMessageId */
        targetMessageId?: (Protocol.IMessageKey|null);

        /** WebMessageInfo messageAddOns */
        messageAddOns?: (Web.IMessageAddOn[]|null);

        /** WebMessageInfo statusMentionMessageInfo */
        statusMentionMessageInfo?: (Web.IStatusMentionMessage|null);

        /** WebMessageInfo isSupportAiMessage */
        isSupportAiMessage?: (boolean|null);

        /** WebMessageInfo statusMentionSources */
        statusMentionSources?: (string[]|null);

        /** WebMessageInfo supportAiCitations */
        supportAiCitations?: (Web.ICitation[]|null);

        /** WebMessageInfo botTargetId */
        botTargetId?: (string|null);

        /** WebMessageInfo groupHistoryIndividualMessageInfo */
        groupHistoryIndividualMessageInfo?: (Web.IGroupHistoryIndividualMessageInfo|null);

        /** WebMessageInfo groupHistoryBundleMessage */
        groupHistoryBundleMessage?: (Web.IGroupHistoryBundleMessage|null);
    }

    /** Represents a WebMessageInfo. */
    class WebMessageInfo implements IWebMessageInfo {

        /**
         * Constructs a new WebMessageInfo.
         * @param [properties] Properties to set
         */
        constructor(properties?: Web.IWebMessageInfo);

        /** WebMessageInfo key. */
        public key: Protocol.IMessageKey;

        /** WebMessageInfo message. */
        public message?: (E2E.IMessage|null);

        /** WebMessageInfo messageTimestamp. */
        public messageTimestamp: (number|Long);

        /** WebMessageInfo status. */
        public status: Web.WebMessageInfo.Status;

        /** WebMessageInfo participant. */
        public participant: string;

        /** WebMessageInfo messageC2STimestamp. */
        public messageC2STimestamp: (number|Long);

        /** WebMessageInfo ignore. */
        public ignore: boolean;

        /** WebMessageInfo starred. */
        public starred: boolean;

        /** WebMessageInfo broadcast. */
        public broadcast: boolean;

        /** WebMessageInfo pushName. */
        public pushName: string;

        /** WebMessageInfo mediaCiphertextSha256. */
        public mediaCiphertextSha256: Uint8Array;

        /** WebMessageInfo multicast. */
        public multicast: boolean;

        /** WebMessageInfo urlText. */
        public urlText: boolean;

        /** WebMessageInfo urlNumber. */
        public urlNumber: boolean;

        /** WebMessageInfo messageStubType. */
        public messageStubType: Web.WebMessageInfo.StubType;

        /** WebMessageInfo clearMedia. */
        public clearMedia: boolean;

        /** WebMessageInfo messageStubParameters. */
        public messageStubParameters: string[];

        /** WebMessageInfo duration. */
        public duration: number;

        /** WebMessageInfo labels. */
        public labels: string[];

        /** WebMessageInfo paymentInfo. */
        public paymentInfo?: (Web.IPaymentInfo|null);

        /** WebMessageInfo finalLiveLocation. */
        public finalLiveLocation?: (E2E.Message.ILiveLocationMessage|null);

        /** WebMessageInfo quotedPaymentInfo. */
        public quotedPaymentInfo?: (Web.IPaymentInfo|null);

        /** WebMessageInfo ephemeralStartTimestamp. */
        public ephemeralStartTimestamp: (number|Long);

        /** WebMessageInfo ephemeralDuration. */
        public ephemeralDuration: number;

        /** WebMessageInfo ephemeralOffToOn. */
        public ephemeralOffToOn: boolean;

        /** WebMessageInfo ephemeralOutOfSync. */
        public ephemeralOutOfSync: boolean;

        /** WebMessageInfo bizPrivacyStatus. */
        public bizPrivacyStatus: Web.WebMessageInfo.BizPrivacyStatus;

        /** WebMessageInfo verifiedBizName. */
        public verifiedBizName: string;

        /** WebMessageInfo mediaData. */
        public mediaData?: (E2E.PaymentBackground.IMediaData|null);

        /** WebMessageInfo photoChange. */
        public photoChange?: (Web.IPhotoChange|null);

        /** WebMessageInfo userReceipt. */
        public userReceipt: Web.IUserReceipt[];

        /** WebMessageInfo reactions. */
        public reactions: Web.IReaction[];

        /** WebMessageInfo quotedStickerData. */
        public quotedStickerData?: (E2E.PaymentBackground.IMediaData|null);

        /** WebMessageInfo futureproofData. */
        public futureproofData: Uint8Array;

        /** WebMessageInfo statusPsa. */
        public statusPsa?: (Web.IStatusPSA|null);

        /** WebMessageInfo pollUpdates. */
        public pollUpdates: Web.IPollUpdate[];

        /** WebMessageInfo pollAdditionalMetadata. */
        public pollAdditionalMetadata?: (Web.IPollAdditionalMetadata|null);

        /** WebMessageInfo agentId. */
        public agentId: string;

        /** WebMessageInfo statusAlreadyViewed. */
        public statusAlreadyViewed: boolean;

        /** WebMessageInfo messageSecret. */
        public messageSecret: Uint8Array;

        /** WebMessageInfo keepInChat. */
        public keepInChat?: (Web.IKeepInChat|null);

        /** WebMessageInfo originalSelfAuthorUserJidString. */
        public originalSelfAuthorUserJidString: string;

        /** WebMessageInfo revokeMessageTimestamp. */
        public revokeMessageTimestamp: (number|Long);

        /** WebMessageInfo pinInChat. */
        public pinInChat?: (Web.IPinInChat|null);

        /** WebMessageInfo premiumMessageInfo. */
        public premiumMessageInfo?: (Web.IPremiumMessageInfo|null);

        /** WebMessageInfo is1PBizBotMessage. */
        public is1PBizBotMessage: boolean;

        /** WebMessageInfo isGroupHistoryMessage. */
        public isGroupHistoryMessage: boolean;

        /** WebMessageInfo botMessageInvokerJid. */
        public botMessageInvokerJid: string;

        /** WebMessageInfo commentMetadata. */
        public commentMetadata?: (Web.ICommentMetadata|null);

        /** WebMessageInfo eventResponses. */
        public eventResponses: Web.IEventResponse[];

        /** WebMessageInfo reportingTokenInfo. */
        public reportingTokenInfo?: (Web.IReportingTokenInfo|null);

        /** WebMessageInfo newsletterServerId. */
        public newsletterServerId: (number|Long);

        /** WebMessageInfo eventAdditionalMetadata. */
        public eventAdditionalMetadata?: (Web.IEventAdditionalMetadata|null);

        /** WebMessageInfo isMentionedInStatus. */
        public isMentionedInStatus: boolean;

        /** WebMessageInfo statusMentions. */
        public statusMentions: string[];

        /** WebMessageInfo targetMessageId. */
        public targetMessageId?: (Protocol.IMessageKey|null);

        /** WebMessageInfo messageAddOns. */
        public messageAddOns: Web.IMessageAddOn[];

        /** WebMessageInfo statusMentionMessageInfo. */
        public statusMentionMessageInfo?: (Web.IStatusMentionMessage|null);

        /** WebMessageInfo isSupportAiMessage. */
        public isSupportAiMessage: boolean;

        /** WebMessageInfo statusMentionSources. */
        public statusMentionSources: string[];

        /** WebMessageInfo supportAiCitations. */
        public supportAiCitations: Web.ICitation[];

        /** WebMessageInfo botTargetId. */
        public botTargetId: string;

        /** WebMessageInfo groupHistoryIndividualMessageInfo. */
        public groupHistoryIndividualMessageInfo?: (Web.IGroupHistoryIndividualMessageInfo|null);

        /** WebMessageInfo groupHistoryBundleMessage. */
        public groupHistoryBundleMessage?: (Web.IGroupHistoryBundleMessage|null);

        /**
         * Creates a new WebMessageInfo instance using the specified properties.
         * @param [properties] Properties to set
         * @returns WebMessageInfo instance
         */
        public static create(properties?: Web.IWebMessageInfo): Web.WebMessageInfo;

        /**
         * Encodes the specified WebMessageInfo message. Does not implicitly {@link Web.WebMessageInfo.verify|verify} messages.
         * @param message WebMessageInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: Web.IWebMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified WebMessageInfo message, length delimited. Does not implicitly {@link Web.WebMessageInfo.verify|verify} messages.
         * @param message WebMessageInfo message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: Web.IWebMessageInfo, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a WebMessageInfo message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns WebMessageInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Web.WebMessageInfo;

        /**
         * Decodes a WebMessageInfo message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns WebMessageInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): Web.WebMessageInfo;

        /**
         * Verifies a WebMessageInfo message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a WebMessageInfo message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns WebMessageInfo
         */
        public static fromObject(object: { [k: string]: any }): Web.WebMessageInfo;

        /**
         * Creates a plain object from a WebMessageInfo message. Also converts values to other types if specified.
         * @param message WebMessageInfo
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: Web.WebMessageInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this WebMessageInfo to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for WebMessageInfo
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace WebMessageInfo {

        /** BizPrivacyStatus enum. */
        enum BizPrivacyStatus {
            E2EE = 0,
            FB = 2,
            BSP = 1,
            BSP_AND_FB = 3
        }

        /** Status enum. */
        enum Status {
            ERROR = 0,
            PENDING = 1,
            SERVER_ACK = 2,
            DELIVERY_ACK = 3,
            READ = 4,
            PLAYED = 5
        }

        /** StubType enum. */
        enum StubType {
            UNKNOWN = 0,
            REVOKE = 1,
            CIPHERTEXT = 2,
            FUTUREPROOF = 3,
            NON_VERIFIED_TRANSITION = 4,
            UNVERIFIED_TRANSITION = 5,
            VERIFIED_TRANSITION = 6,
            VERIFIED_LOW_UNKNOWN = 7,
            VERIFIED_HIGH = 8,
            VERIFIED_INITIAL_UNKNOWN = 9,
            VERIFIED_INITIAL_LOW = 10,
            VERIFIED_INITIAL_HIGH = 11,
            VERIFIED_TRANSITION_ANY_TO_NONE = 12,
            VERIFIED_TRANSITION_ANY_TO_HIGH = 13,
            VERIFIED_TRANSITION_HIGH_TO_LOW = 14,
            VERIFIED_TRANSITION_HIGH_TO_UNKNOWN = 15,
            VERIFIED_TRANSITION_UNKNOWN_TO_LOW = 16,
            VERIFIED_TRANSITION_LOW_TO_UNKNOWN = 17,
            VERIFIED_TRANSITION_NONE_TO_LOW = 18,
            VERIFIED_TRANSITION_NONE_TO_UNKNOWN = 19,
            GROUP_CREATE = 20,
            GROUP_CHANGE_SUBJECT = 21,
            GROUP_CHANGE_ICON = 22,
            GROUP_CHANGE_INVITE_LINK = 23,
            GROUP_CHANGE_DESCRIPTION = 24,
            GROUP_CHANGE_RESTRICT = 25,
            GROUP_CHANGE_ANNOUNCE = 26,
            GROUP_PARTICIPANT_ADD = 27,
            GROUP_PARTICIPANT_REMOVE = 28,
            GROUP_PARTICIPANT_PROMOTE = 29,
            GROUP_PARTICIPANT_DEMOTE = 30,
            GROUP_PARTICIPANT_INVITE = 31,
            GROUP_PARTICIPANT_LEAVE = 32,
            GROUP_PARTICIPANT_CHANGE_NUMBER = 33,
            BROADCAST_CREATE = 34,
            BROADCAST_ADD = 35,
            BROADCAST_REMOVE = 36,
            GENERIC_NOTIFICATION = 37,
            E2E_IDENTITY_CHANGED = 38,
            E2E_ENCRYPTED = 39,
            CALL_MISSED_VOICE = 40,
            CALL_MISSED_VIDEO = 41,
            INDIVIDUAL_CHANGE_NUMBER = 42,
            GROUP_DELETE = 43,
            GROUP_ANNOUNCE_MODE_MESSAGE_BOUNCE = 44,
            CALL_MISSED_GROUP_VOICE = 45,
            CALL_MISSED_GROUP_VIDEO = 46,
            PAYMENT_CIPHERTEXT = 47,
            PAYMENT_FUTUREPROOF = 48,
            PAYMENT_TRANSACTION_STATUS_UPDATE_FAILED = 49,
            PAYMENT_TRANSACTION_STATUS_UPDATE_REFUNDED = 50,
            PAYMENT_TRANSACTION_STATUS_UPDATE_REFUND_FAILED = 51,
            PAYMENT_TRANSACTION_STATUS_RECEIVER_PENDING_SETUP = 52,
            PAYMENT_TRANSACTION_STATUS_RECEIVER_SUCCESS_AFTER_HICCUP = 53,
            PAYMENT_ACTION_ACCOUNT_SETUP_REMINDER = 54,
            PAYMENT_ACTION_SEND_PAYMENT_REMINDER = 55,
            PAYMENT_ACTION_SEND_PAYMENT_INVITATION = 56,
            PAYMENT_ACTION_REQUEST_DECLINED = 57,
            PAYMENT_ACTION_REQUEST_EXPIRED = 58,
            PAYMENT_ACTION_REQUEST_CANCELLED = 59,
            BIZ_VERIFIED_TRANSITION_TOP_TO_BOTTOM = 60,
            BIZ_VERIFIED_TRANSITION_BOTTOM_TO_TOP = 61,
            BIZ_INTRO_TOP = 62,
            BIZ_INTRO_BOTTOM = 63,
            BIZ_NAME_CHANGE = 64,
            BIZ_MOVE_TO_CONSUMER_APP = 65,
            BIZ_TWO_TIER_MIGRATION_TOP = 66,
            BIZ_TWO_TIER_MIGRATION_BOTTOM = 67,
            OVERSIZED = 68,
            GROUP_CHANGE_NO_FREQUENTLY_FORWARDED = 69,
            GROUP_V4_ADD_INVITE_SENT = 70,
            GROUP_PARTICIPANT_ADD_REQUEST_JOIN = 71,
            CHANGE_EPHEMERAL_SETTING = 72,
            E2E_DEVICE_CHANGED = 73,
            VIEWED_ONCE = 74,
            E2E_ENCRYPTED_NOW = 75,
            BLUE_MSG_BSP_FB_TO_BSP_PREMISE = 76,
            BLUE_MSG_BSP_FB_TO_SELF_FB = 77,
            BLUE_MSG_BSP_FB_TO_SELF_PREMISE = 78,
            BLUE_MSG_BSP_FB_UNVERIFIED = 79,
            BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED = 80,
            BLUE_MSG_BSP_FB_VERIFIED = 81,
            BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED = 82,
            BLUE_MSG_BSP_PREMISE_TO_SELF_PREMISE = 83,
            BLUE_MSG_BSP_PREMISE_UNVERIFIED = 84,
            BLUE_MSG_BSP_PREMISE_UNVERIFIED_TO_SELF_PREMISE_VERIFIED = 85,
            BLUE_MSG_BSP_PREMISE_VERIFIED = 86,
            BLUE_MSG_BSP_PREMISE_VERIFIED_TO_SELF_PREMISE_UNVERIFIED = 87,
            BLUE_MSG_CONSUMER_TO_BSP_FB_UNVERIFIED = 88,
            BLUE_MSG_CONSUMER_TO_BSP_PREMISE_UNVERIFIED = 89,
            BLUE_MSG_CONSUMER_TO_SELF_FB_UNVERIFIED = 90,
            BLUE_MSG_CONSUMER_TO_SELF_PREMISE_UNVERIFIED = 91,
            BLUE_MSG_SELF_FB_TO_BSP_PREMISE = 92,
            BLUE_MSG_SELF_FB_TO_SELF_PREMISE = 93,
            BLUE_MSG_SELF_FB_UNVERIFIED = 94,
            BLUE_MSG_SELF_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED = 95,
            BLUE_MSG_SELF_FB_VERIFIED = 96,
            BLUE_MSG_SELF_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED = 97,
            BLUE_MSG_SELF_PREMISE_TO_BSP_PREMISE = 98,
            BLUE_MSG_SELF_PREMISE_UNVERIFIED = 99,
            BLUE_MSG_SELF_PREMISE_VERIFIED = 100,
            BLUE_MSG_TO_BSP_FB = 101,
            BLUE_MSG_TO_CONSUMER = 102,
            BLUE_MSG_TO_SELF_FB = 103,
            BLUE_MSG_UNVERIFIED_TO_BSP_FB_VERIFIED = 104,
            BLUE_MSG_UNVERIFIED_TO_BSP_PREMISE_VERIFIED = 105,
            BLUE_MSG_UNVERIFIED_TO_SELF_FB_VERIFIED = 106,
            BLUE_MSG_UNVERIFIED_TO_VERIFIED = 107,
            BLUE_MSG_VERIFIED_TO_BSP_FB_UNVERIFIED = 108,
            BLUE_MSG_VERIFIED_TO_BSP_PREMISE_UNVERIFIED = 109,
            BLUE_MSG_VERIFIED_TO_SELF_FB_UNVERIFIED = 110,
            BLUE_MSG_VERIFIED_TO_UNVERIFIED = 111,
            BLUE_MSG_BSP_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED = 112,
            BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_FB_VERIFIED = 113,
            BLUE_MSG_BSP_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED = 114,
            BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_FB_UNVERIFIED = 115,
            BLUE_MSG_SELF_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED = 116,
            BLUE_MSG_SELF_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED = 117,
            E2E_IDENTITY_UNAVAILABLE = 118,
            GROUP_CREATING = 119,
            GROUP_CREATE_FAILED = 120,
            GROUP_BOUNCED = 121,
            BLOCK_CONTACT = 122,
            EPHEMERAL_SETTING_NOT_APPLIED = 123,
            SYNC_FAILED = 124,
            SYNCING = 125,
            BIZ_PRIVACY_MODE_INIT_FB = 126,
            BIZ_PRIVACY_MODE_INIT_BSP = 127,
            BIZ_PRIVACY_MODE_TO_FB = 128,
            BIZ_PRIVACY_MODE_TO_BSP = 129,
            DISAPPEARING_MODE = 130,
            E2E_DEVICE_FETCH_FAILED = 131,
            ADMIN_REVOKE = 132,
            GROUP_INVITE_LINK_GROWTH_LOCKED = 133,
            COMMUNITY_LINK_PARENT_GROUP = 134,
            COMMUNITY_LINK_SIBLING_GROUP = 135,
            COMMUNITY_LINK_SUB_GROUP = 136,
            COMMUNITY_UNLINK_PARENT_GROUP = 137,
            COMMUNITY_UNLINK_SIBLING_GROUP = 138,
            COMMUNITY_UNLINK_SUB_GROUP = 139,
            GROUP_PARTICIPANT_ACCEPT = 140,
            GROUP_PARTICIPANT_LINKED_GROUP_JOIN = 141,
            COMMUNITY_CREATE = 142,
            EPHEMERAL_KEEP_IN_CHAT = 143,
            GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST = 144,
            GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE = 145,
            INTEGRITY_UNLINK_PARENT_GROUP = 146,
            COMMUNITY_PARTICIPANT_PROMOTE = 147,
            COMMUNITY_PARTICIPANT_DEMOTE = 148,
            COMMUNITY_PARENT_GROUP_DELETED = 149,
            COMMUNITY_LINK_PARENT_GROUP_MEMBERSHIP_APPROVAL = 150,
            GROUP_PARTICIPANT_JOINED_GROUP_AND_PARENT_GROUP = 151,
            MASKED_THREAD_CREATED = 152,
            MASKED_THREAD_UNMASKED = 153,
            BIZ_CHAT_ASSIGNMENT = 154,
            CHAT_PSA = 155,
            CHAT_POLL_CREATION_MESSAGE = 156,
            CAG_MASKED_THREAD_CREATED = 157,
            COMMUNITY_PARENT_GROUP_SUBJECT_CHANGED = 158,
            CAG_INVITE_AUTO_ADD = 159,
            BIZ_CHAT_ASSIGNMENT_UNASSIGN = 160,
            CAG_INVITE_AUTO_JOINED = 161,
            SCHEDULED_CALL_START_MESSAGE = 162,
            COMMUNITY_INVITE_RICH = 163,
            COMMUNITY_INVITE_AUTO_ADD_RICH = 164,
            SUB_GROUP_INVITE_RICH = 165,
            SUB_GROUP_PARTICIPANT_ADD_RICH = 166,
            COMMUNITY_LINK_PARENT_GROUP_RICH = 167,
            COMMUNITY_PARTICIPANT_ADD_RICH = 168,
            SILENCED_UNKNOWN_CALLER_AUDIO = 169,
            SILENCED_UNKNOWN_CALLER_VIDEO = 170,
            GROUP_MEMBER_ADD_MODE = 171,
            GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD = 172,
            COMMUNITY_CHANGE_DESCRIPTION = 173,
            SENDER_INVITE = 174,
            RECEIVER_INVITE = 175,
            COMMUNITY_ALLOW_MEMBER_ADDED_GROUPS = 176,
            PINNED_MESSAGE_IN_CHAT = 177,
            PAYMENT_INVITE_SETUP_INVITER = 178,
            PAYMENT_INVITE_SETUP_INVITEE_RECEIVE_ONLY = 179,
            PAYMENT_INVITE_SETUP_INVITEE_SEND_AND_RECEIVE = 180,
            LINKED_GROUP_CALL_START = 181,
            REPORT_TO_ADMIN_ENABLED_STATUS = 182,
            EMPTY_SUBGROUP_CREATE = 183,
            SCHEDULED_CALL_CANCEL = 184,
            SUBGROUP_ADMIN_TRIGGERED_AUTO_ADD_RICH = 185,
            GROUP_CHANGE_RECENT_HISTORY_SHARING = 186,
            PAID_MESSAGE_SERVER_CAMPAIGN_ID = 187,
            GENERAL_CHAT_CREATE = 188,
            GENERAL_CHAT_ADD = 189,
            GENERAL_CHAT_AUTO_ADD_DISABLED = 190,
            SUGGESTED_SUBGROUP_ANNOUNCE = 191,
            BIZ_BOT_1P_MESSAGING_ENABLED = 192,
            CHANGE_USERNAME = 193,
            BIZ_COEX_PRIVACY_INIT_SELF = 194,
            BIZ_COEX_PRIVACY_TRANSITION_SELF = 195,
            SUPPORT_AI_EDUCATION = 196,
            BIZ_BOT_3P_MESSAGING_ENABLED = 197,
            REMINDER_SETUP_MESSAGE = 198,
            REMINDER_SENT_MESSAGE = 199,
            REMINDER_CANCEL_MESSAGE = 200,
            BIZ_COEX_PRIVACY_INIT = 201,
            BIZ_COEX_PRIVACY_TRANSITION = 202,
            GROUP_DEACTIVATED = 203,
            COMMUNITY_DEACTIVATE_SIBLING_GROUP = 204,
            EVENT_UPDATED = 205,
            EVENT_CANCELED = 206,
            COMMUNITY_OWNER_UPDATED = 207,
            COMMUNITY_SUB_GROUP_VISIBILITY_HIDDEN = 208,
            CAPI_GROUP_NE2EE_SYSTEM_MESSAGE = 209,
            STATUS_MENTION = 210,
            USER_CONTROLS_SYSTEM_MESSAGE = 211,
            SUPPORT_SYSTEM_MESSAGE = 212,
            CHANGE_LID = 213,
            BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_IN_MESSAGE = 214,
            BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_OUT_MESSAGE = 215,
            CHANGE_LIMIT_SHARING = 216,
            GROUP_MEMBER_LINK_MODE = 217,
            BIZ_AUTOMATICALLY_LABELED_CHAT_SYSTEM_MESSAGE = 218,
            PHONE_NUMBER_HIDING_CHAT_DEPRECATED_MESSAGE = 219
        }
    }
}

/** Namespace SyncAction. */
export namespace SyncAction {

    /** Properties of a PatchDebugData. */
    interface IPatchDebugData {

        /** PatchDebugData currentLthash */
        currentLthash?: (Uint8Array|null);

        /** PatchDebugData newLthash */
        newLthash?: (Uint8Array|null);

        /** PatchDebugData patchVersion */
        patchVersion?: (Uint8Array|null);

        /** PatchDebugData collectionName */
        collectionName?: (Uint8Array|null);

        /** PatchDebugData firstFourBytesFromAHashOfSnapshotMacKey */
        firstFourBytesFromAHashOfSnapshotMacKey?: (Uint8Array|null);

        /** PatchDebugData newLthashSubtract */
        newLthashSubtract?: (Uint8Array|null);

        /** PatchDebugData numberAdd */
        numberAdd?: (number|null);

        /** PatchDebugData numberRemove */
        numberRemove?: (number|null);

        /** PatchDebugData numberOverride */
        numberOverride?: (number|null);

        /** PatchDebugData senderPlatform */
        senderPlatform?: (SyncAction.PatchDebugData.Platform|null);

        /** PatchDebugData isSenderPrimary */
        isSenderPrimary?: (boolean|null);
    }

    /** Represents a PatchDebugData. */
    class PatchDebugData implements IPatchDebugData {

        /**
         * Constructs a new PatchDebugData.
         * @param [properties] Properties to set
         */
        constructor(properties?: SyncAction.IPatchDebugData);

        /** PatchDebugData currentLthash. */
        public currentLthash: Uint8Array;

        /** PatchDebugData newLthash. */
        public newLthash: Uint8Array;

        /** PatchDebugData patchVersion. */
        public patchVersion: Uint8Array;

        /** PatchDebugData collectionName. */
        public collectionName: Uint8Array;

        /** PatchDebugData firstFourBytesFromAHashOfSnapshotMacKey. */
        public firstFourBytesFromAHashOfSnapshotMacKey: Uint8Array;

        /** PatchDebugData newLthashSubtract. */
        public newLthashSubtract: Uint8Array;

        /** PatchDebugData numberAdd. */
        public numberAdd: number;

        /** PatchDebugData numberRemove. */
        public numberRemove: number;

        /** PatchDebugData numberOverride. */
        public numberOverride: number;

        /** PatchDebugData senderPlatform. */
        public senderPlatform: SyncAction.PatchDebugData.Platform;

        /** PatchDebugData isSenderPrimary. */
        public isSenderPrimary: boolean;

        /**
         * Creates a new PatchDebugData instance using the specified properties.
         * @param [properties] Properties to set
         * @returns PatchDebugData instance
         */
        public static create(properties?: SyncAction.IPatchDebugData): SyncAction.PatchDebugData;

        /**
         * Encodes the specified PatchDebugData message. Does not implicitly {@link SyncAction.PatchDebugData.verify|verify} messages.
         * @param message PatchDebugData message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: SyncAction.IPatchDebugData, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified PatchDebugData message, length delimited. Does not implicitly {@link SyncAction.PatchDebugData.verify|verify} messages.
         * @param message PatchDebugData message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: SyncAction.IPatchDebugData, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a PatchDebugData message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns PatchDebugData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.PatchDebugData;

        /**
         * Decodes a PatchDebugData message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns PatchDebugData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.PatchDebugData;

        /**
         * Verifies a PatchDebugData message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a PatchDebugData message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns PatchDebugData
         */
        public static fromObject(object: { [k: string]: any }): SyncAction.PatchDebugData;

        /**
         * Creates a plain object from a PatchDebugData message. Also converts values to other types if specified.
         * @param message PatchDebugData
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: SyncAction.PatchDebugData, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this PatchDebugData to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for PatchDebugData
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace PatchDebugData {

        /** Platform enum. */
        enum Platform {
            ANDROID = 0,
            SMBA = 1,
            IPHONE = 2,
            SMBI = 3,
            WEB = 4,
            UWP = 5,
            DARWIN = 6,
            IPAD = 7,
            WEAROS = 8
        }
    }

    /** Properties of a SyncActionData. */
    interface ISyncActionData {

        /** SyncActionData index */
        index?: (Uint8Array|null);

        /** SyncActionData value */
        value?: (SyncAction.ISyncActionValue|null);

        /** SyncActionData padding */
        padding?: (Uint8Array|null);

        /** SyncActionData version */
        version?: (number|null);
    }

    /** Represents a SyncActionData. */
    class SyncActionData implements ISyncActionData {

        /**
         * Constructs a new SyncActionData.
         * @param [properties] Properties to set
         */
        constructor(properties?: SyncAction.ISyncActionData);

        /** SyncActionData index. */
        public index: Uint8Array;

        /** SyncActionData value. */
        public value?: (SyncAction.ISyncActionValue|null);

        /** SyncActionData padding. */
        public padding: Uint8Array;

        /** SyncActionData version. */
        public version: number;

        /**
         * Creates a new SyncActionData instance using the specified properties.
         * @param [properties] Properties to set
         * @returns SyncActionData instance
         */
        public static create(properties?: SyncAction.ISyncActionData): SyncAction.SyncActionData;

        /**
         * Encodes the specified SyncActionData message. Does not implicitly {@link SyncAction.SyncActionData.verify|verify} messages.
         * @param message SyncActionData message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: SyncAction.ISyncActionData, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified SyncActionData message, length delimited. Does not implicitly {@link SyncAction.SyncActionData.verify|verify} messages.
         * @param message SyncActionData message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: SyncAction.ISyncActionData, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a SyncActionData message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns SyncActionData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionData;

        /**
         * Decodes a SyncActionData message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns SyncActionData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionData;

        /**
         * Verifies a SyncActionData message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a SyncActionData message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns SyncActionData
         */
        public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionData;

        /**
         * Creates a plain object from a SyncActionData message. Also converts values to other types if specified.
         * @param message SyncActionData
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: SyncAction.SyncActionData, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this SyncActionData to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for SyncActionData
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a SyncActionValue. */
    interface ISyncActionValue {

        /** SyncActionValue timestamp */
        timestamp?: (number|Long|null);

        /** SyncActionValue starAction */
        starAction?: (SyncAction.SyncActionValue.IStarAction|null);

        /** SyncActionValue contactAction */
        contactAction?: (SyncAction.SyncActionValue.IContactAction|null);

        /** SyncActionValue muteAction */
        muteAction?: (SyncAction.SyncActionValue.IMuteAction|null);

        /** SyncActionValue pinAction */
        pinAction?: (SyncAction.SyncActionValue.IPinAction|null);

        /** SyncActionValue securityNotificationSetting */
        securityNotificationSetting?: (SyncAction.SyncActionValue.ISecurityNotificationSetting|null);

        /** SyncActionValue pushNameSetting */
        pushNameSetting?: (SyncAction.SyncActionValue.IPushNameSetting|null);

        /** SyncActionValue quickReplyAction */
        quickReplyAction?: (SyncAction.SyncActionValue.IQuickReplyAction|null);

        /** SyncActionValue recentEmojiWeightsAction */
        recentEmojiWeightsAction?: (SyncAction.SyncActionValue.IRecentEmojiWeightsAction|null);

        /** SyncActionValue labelEditAction */
        labelEditAction?: (SyncAction.SyncActionValue.ILabelEditAction|null);

        /** SyncActionValue labelAssociationAction */
        labelAssociationAction?: (SyncAction.SyncActionValue.ILabelAssociationAction|null);

        /** SyncActionValue localeSetting */
        localeSetting?: (SyncAction.SyncActionValue.ILocaleSetting|null);

        /** SyncActionValue archiveChatAction */
        archiveChatAction?: (SyncAction.SyncActionValue.IArchiveChatAction|null);

        /** SyncActionValue deleteMessageForMeAction */
        deleteMessageForMeAction?: (SyncAction.SyncActionValue.IDeleteMessageForMeAction|null);

        /** SyncActionValue keyExpiration */
        keyExpiration?: (SyncAction.SyncActionValue.IKeyExpiration|null);

        /** SyncActionValue markChatAsReadAction */
        markChatAsReadAction?: (SyncAction.SyncActionValue.IMarkChatAsReadAction|null);

        /** SyncActionValue clearChatAction */
        clearChatAction?: (SyncAction.SyncActionValue.IClearChatAction|null);

        /** SyncActionValue deleteChatAction */
        deleteChatAction?: (SyncAction.SyncActionValue.IDeleteChatAction|null);

        /** SyncActionValue unarchiveChatsSetting */
        unarchiveChatsSetting?: (SyncAction.SyncActionValue.IUnarchiveChatsSetting|null);

        /** SyncActionValue primaryFeature */
        primaryFeature?: (SyncAction.SyncActionValue.IPrimaryFeature|null);

        /** SyncActionValue androidUnsupportedActions */
        androidUnsupportedActions?: (SyncAction.SyncActionValue.IAndroidUnsupportedActions|null);

        /** SyncActionValue agentAction */
        agentAction?: (SyncAction.SyncActionValue.IAgentAction|null);

        /** SyncActionValue subscriptionAction */
        subscriptionAction?: (SyncAction.SyncActionValue.ISubscriptionAction|null);

        /** SyncActionValue userStatusMuteAction */
        userStatusMuteAction?: (SyncAction.SyncActionValue.IUserStatusMuteAction|null);

        /** SyncActionValue timeFormatAction */
        timeFormatAction?: (SyncAction.SyncActionValue.ITimeFormatAction|null);

        /** SyncActionValue nuxAction */
        nuxAction?: (SyncAction.SyncActionValue.INuxAction|null);

        /** SyncActionValue primaryVersionAction */
        primaryVersionAction?: (SyncAction.SyncActionValue.IPrimaryVersionAction|null);

        /** SyncActionValue stickerAction */
        stickerAction?: (SyncAction.SyncActionValue.IStickerAction|null);

        /** SyncActionValue removeRecentStickerAction */
        removeRecentStickerAction?: (SyncAction.SyncActionValue.IRemoveRecentStickerAction|null);

        /** SyncActionValue chatAssignment */
        chatAssignment?: (SyncAction.SyncActionValue.IChatAssignmentAction|null);

        /** SyncActionValue chatAssignmentOpenedStatus */
        chatAssignmentOpenedStatus?: (SyncAction.SyncActionValue.IChatAssignmentOpenedStatusAction|null);

        /** SyncActionValue pnForLidChatAction */
        pnForLidChatAction?: (SyncAction.SyncActionValue.IPnForLidChatAction|null);

        /** SyncActionValue marketingMessageAction */
        marketingMessageAction?: (SyncAction.SyncActionValue.IMarketingMessageAction|null);

        /** SyncActionValue marketingMessageBroadcastAction */
        marketingMessageBroadcastAction?: (SyncAction.SyncActionValue.IMarketingMessageBroadcastAction|null);

        /** SyncActionValue externalWebBetaAction */
        externalWebBetaAction?: (SyncAction.SyncActionValue.IExternalWebBetaAction|null);

        /** SyncActionValue privacySettingRelayAllCalls */
        privacySettingRelayAllCalls?: (SyncAction.SyncActionValue.IPrivacySettingRelayAllCalls|null);

        /** SyncActionValue callLogAction */
        callLogAction?: (SyncAction.SyncActionValue.ICallLogAction|null);

        /** SyncActionValue statusPrivacy */
        statusPrivacy?: (SyncAction.SyncActionValue.IStatusPrivacyAction|null);

        /** SyncActionValue botWelcomeRequestAction */
        botWelcomeRequestAction?: (SyncAction.SyncActionValue.IBotWelcomeRequestAction|null);

        /** SyncActionValue deleteIndividualCallLog */
        deleteIndividualCallLog?: (SyncAction.SyncActionValue.IDeleteIndividualCallLogAction|null);

        /** SyncActionValue labelReorderingAction */
        labelReorderingAction?: (SyncAction.SyncActionValue.ILabelReorderingAction|null);

        /** SyncActionValue paymentInfoAction */
        paymentInfoAction?: (SyncAction.SyncActionValue.IPaymentInfoAction|null);

        /** SyncActionValue customPaymentMethodsAction */
        customPaymentMethodsAction?: (SyncAction.SyncActionValue.ICustomPaymentMethodsAction|null);

        /** SyncActionValue lockChatAction */
        lockChatAction?: (SyncAction.SyncActionValue.ILockChatAction|null);

        /** SyncActionValue chatLockSettings */
        chatLockSettings?: (ChatLockSettings.IChatLockSettings|null);

        /** SyncActionValue wamoUserIdentifierAction */
        wamoUserIdentifierAction?: (SyncAction.SyncActionValue.IWamoUserIdentifierAction|null);

        /** SyncActionValue privacySettingDisableLinkPreviewsAction */
        privacySettingDisableLinkPreviewsAction?: (SyncAction.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction|null);

        /** SyncActionValue deviceCapabilities */
        deviceCapabilities?: (DeviceCapabilities.IDeviceCapabilities|null);

        /** SyncActionValue noteEditAction */
        noteEditAction?: (SyncAction.SyncActionValue.INoteEditAction|null);

        /** SyncActionValue favoritesAction */
        favoritesAction?: (SyncAction.SyncActionValue.IFavoritesAction|null);

        /** SyncActionValue merchantPaymentPartnerAction */
        merchantPaymentPartnerAction?: (SyncAction.SyncActionValue.IMerchantPaymentPartnerAction|null);

        /** SyncActionValue waffleAccountLinkStateAction */
        waffleAccountLinkStateAction?: (SyncAction.SyncActionValue.IWaffleAccountLinkStateAction|null);

        /** SyncActionValue usernameChatStartMode */
        usernameChatStartMode?: (SyncAction.SyncActionValue.IUsernameChatStartModeAction|null);

        /** SyncActionValue notificationActivitySettingAction */
        notificationActivitySettingAction?: (SyncAction.SyncActionValue.INotificationActivitySettingAction|null);

        /** SyncActionValue lidContactAction */
        lidContactAction?: (SyncAction.SyncActionValue.ILidContactAction|null);

        /** SyncActionValue ctwaPerCustomerDataSharingAction */
        ctwaPerCustomerDataSharingAction?: (SyncAction.SyncActionValue.ICtwaPerCustomerDataSharingAction|null);

        /** SyncActionValue paymentTosAction */
        paymentTosAction?: (SyncAction.SyncActionValue.IPaymentTosAction|null);

        /** SyncActionValue privacySettingChannelsPersonalisedRecommendationAction */
        privacySettingChannelsPersonalisedRecommendationAction?: (SyncAction.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction|null);

        /** SyncActionValue businessBroadcastAssociationAction */
        businessBroadcastAssociationAction?: (SyncAction.SyncActionValue.IBusinessBroadcastAssociationAction|null);

        /** SyncActionValue detectedOutcomesStatusAction */
        detectedOutcomesStatusAction?: (SyncAction.SyncActionValue.IDetectedOutcomesStatusAction|null);

        /** SyncActionValue maibaAiFeaturesControlAction */
        maibaAiFeaturesControlAction?: (SyncAction.SyncActionValue.IMaibaAIFeaturesControlAction|null);

        /** SyncActionValue businessBroadcastListAction */
        businessBroadcastListAction?: (SyncAction.SyncActionValue.IBusinessBroadcastListAction|null);

        /** SyncActionValue musicUserIdAction */
        musicUserIdAction?: (SyncAction.SyncActionValue.IMusicUserIdAction|null);

        /** SyncActionValue statusPostOptInNotificationPreferencesAction */
        statusPostOptInNotificationPreferencesAction?: (SyncAction.SyncActionValue.IStatusPostOptInNotificationPreferencesAction|null);
    }

    /** Represents a SyncActionValue. */
    class SyncActionValue implements ISyncActionValue {

        /**
         * Constructs a new SyncActionValue.
         * @param [properties] Properties to set
         */
        constructor(properties?: SyncAction.ISyncActionValue);

        /** SyncActionValue timestamp. */
        public timestamp: (number|Long);

        /** SyncActionValue starAction. */
        public starAction?: (SyncAction.SyncActionValue.IStarAction|null);

        /** SyncActionValue contactAction. */
        public contactAction?: (SyncAction.SyncActionValue.IContactAction|null);

        /** SyncActionValue muteAction. */
        public muteAction?: (SyncAction.SyncActionValue.IMuteAction|null);

        /** SyncActionValue pinAction. */
        public pinAction?: (SyncAction.SyncActionValue.IPinAction|null);

        /** SyncActionValue securityNotificationSetting. */
        public securityNotificationSetting?: (SyncAction.SyncActionValue.ISecurityNotificationSetting|null);

        /** SyncActionValue pushNameSetting. */
        public pushNameSetting?: (SyncAction.SyncActionValue.IPushNameSetting|null);

        /** SyncActionValue quickReplyAction. */
        public quickReplyAction?: (SyncAction.SyncActionValue.IQuickReplyAction|null);

        /** SyncActionValue recentEmojiWeightsAction. */
        public recentEmojiWeightsAction?: (SyncAction.SyncActionValue.IRecentEmojiWeightsAction|null);

        /** SyncActionValue labelEditAction. */
        public labelEditAction?: (SyncAction.SyncActionValue.ILabelEditAction|null);

        /** SyncActionValue labelAssociationAction. */
        public labelAssociationAction?: (SyncAction.SyncActionValue.ILabelAssociationAction|null);

        /** SyncActionValue localeSetting. */
        public localeSetting?: (SyncAction.SyncActionValue.ILocaleSetting|null);

        /** SyncActionValue archiveChatAction. */
        public archiveChatAction?: (SyncAction.SyncActionValue.IArchiveChatAction|null);

        /** SyncActionValue deleteMessageForMeAction. */
        public deleteMessageForMeAction?: (SyncAction.SyncActionValue.IDeleteMessageForMeAction|null);

        /** SyncActionValue keyExpiration. */
        public keyExpiration?: (SyncAction.SyncActionValue.IKeyExpiration|null);

        /** SyncActionValue markChatAsReadAction. */
        public markChatAsReadAction?: (SyncAction.SyncActionValue.IMarkChatAsReadAction|null);

        /** SyncActionValue clearChatAction. */
        public clearChatAction?: (SyncAction.SyncActionValue.IClearChatAction|null);

        /** SyncActionValue deleteChatAction. */
        public deleteChatAction?: (SyncAction.SyncActionValue.IDeleteChatAction|null);

        /** SyncActionValue unarchiveChatsSetting. */
        public unarchiveChatsSetting?: (SyncAction.SyncActionValue.IUnarchiveChatsSetting|null);

        /** SyncActionValue primaryFeature. */
        public primaryFeature?: (SyncAction.SyncActionValue.IPrimaryFeature|null);

        /** SyncActionValue androidUnsupportedActions. */
        public androidUnsupportedActions?: (SyncAction.SyncActionValue.IAndroidUnsupportedActions|null);

        /** SyncActionValue agentAction. */
        public agentAction?: (SyncAction.SyncActionValue.IAgentAction|null);

        /** SyncActionValue subscriptionAction. */
        public subscriptionAction?: (SyncAction.SyncActionValue.ISubscriptionAction|null);

        /** SyncActionValue userStatusMuteAction. */
        public userStatusMuteAction?: (SyncAction.SyncActionValue.IUserStatusMuteAction|null);

        /** SyncActionValue timeFormatAction. */
        public timeFormatAction?: (SyncAction.SyncActionValue.ITimeFormatAction|null);

        /** SyncActionValue nuxAction. */
        public nuxAction?: (SyncAction.SyncActionValue.INuxAction|null);

        /** SyncActionValue primaryVersionAction. */
        public primaryVersionAction?: (SyncAction.SyncActionValue.IPrimaryVersionAction|null);

        /** SyncActionValue stickerAction. */
        public stickerAction?: (SyncAction.SyncActionValue.IStickerAction|null);

        /** SyncActionValue removeRecentStickerAction. */
        public removeRecentStickerAction?: (SyncAction.SyncActionValue.IRemoveRecentStickerAction|null);

        /** SyncActionValue chatAssignment. */
        public chatAssignment?: (SyncAction.SyncActionValue.IChatAssignmentAction|null);

        /** SyncActionValue chatAssignmentOpenedStatus. */
        public chatAssignmentOpenedStatus?: (SyncAction.SyncActionValue.IChatAssignmentOpenedStatusAction|null);

        /** SyncActionValue pnForLidChatAction. */
        public pnForLidChatAction?: (SyncAction.SyncActionValue.IPnForLidChatAction|null);

        /** SyncActionValue marketingMessageAction. */
        public marketingMessageAction?: (SyncAction.SyncActionValue.IMarketingMessageAction|null);

        /** SyncActionValue marketingMessageBroadcastAction. */
        public marketingMessageBroadcastAction?: (SyncAction.SyncActionValue.IMarketingMessageBroadcastAction|null);

        /** SyncActionValue externalWebBetaAction. */
        public externalWebBetaAction?: (SyncAction.SyncActionValue.IExternalWebBetaAction|null);

        /** SyncActionValue privacySettingRelayAllCalls. */
        public privacySettingRelayAllCalls?: (SyncAction.SyncActionValue.IPrivacySettingRelayAllCalls|null);

        /** SyncActionValue callLogAction. */
        public callLogAction?: (SyncAction.SyncActionValue.ICallLogAction|null);

        /** SyncActionValue statusPrivacy. */
        public statusPrivacy?: (SyncAction.SyncActionValue.IStatusPrivacyAction|null);

        /** SyncActionValue botWelcomeRequestAction. */
        public botWelcomeRequestAction?: (SyncAction.SyncActionValue.IBotWelcomeRequestAction|null);

        /** SyncActionValue deleteIndividualCallLog. */
        public deleteIndividualCallLog?: (SyncAction.SyncActionValue.IDeleteIndividualCallLogAction|null);

        /** SyncActionValue labelReorderingAction. */
        public labelReorderingAction?: (SyncAction.SyncActionValue.ILabelReorderingAction|null);

        /** SyncActionValue paymentInfoAction. */
        public paymentInfoAction?: (SyncAction.SyncActionValue.IPaymentInfoAction|null);

        /** SyncActionValue customPaymentMethodsAction. */
        public customPaymentMethodsAction?: (SyncAction.SyncActionValue.ICustomPaymentMethodsAction|null);

        /** SyncActionValue lockChatAction. */
        public lockChatAction?: (SyncAction.SyncActionValue.ILockChatAction|null);

        /** SyncActionValue chatLockSettings. */
        public chatLockSettings?: (ChatLockSettings.IChatLockSettings|null);

        /** SyncActionValue wamoUserIdentifierAction. */
        public wamoUserIdentifierAction?: (SyncAction.SyncActionValue.IWamoUserIdentifierAction|null);

        /** SyncActionValue privacySettingDisableLinkPreviewsAction. */
        public privacySettingDisableLinkPreviewsAction?: (SyncAction.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction|null);

        /** SyncActionValue deviceCapabilities. */
        public deviceCapabilities?: (DeviceCapabilities.IDeviceCapabilities|null);

        /** SyncActionValue noteEditAction. */
        public noteEditAction?: (SyncAction.SyncActionValue.INoteEditAction|null);

        /** SyncActionValue favoritesAction. */
        public favoritesAction?: (SyncAction.SyncActionValue.IFavoritesAction|null);

        /** SyncActionValue merchantPaymentPartnerAction. */
        public merchantPaymentPartnerAction?: (SyncAction.SyncActionValue.IMerchantPaymentPartnerAction|null);

        /** SyncActionValue waffleAccountLinkStateAction. */
        public waffleAccountLinkStateAction?: (SyncAction.SyncActionValue.IWaffleAccountLinkStateAction|null);

        /** SyncActionValue usernameChatStartMode. */
        public usernameChatStartMode?: (SyncAction.SyncActionValue.IUsernameChatStartModeAction|null);

        /** SyncActionValue notificationActivitySettingAction. */
        public notificationActivitySettingAction?: (SyncAction.SyncActionValue.INotificationActivitySettingAction|null);

        /** SyncActionValue lidContactAction. */
        public lidContactAction?: (SyncAction.SyncActionValue.ILidContactAction|null);

        /** SyncActionValue ctwaPerCustomerDataSharingAction. */
        public ctwaPerCustomerDataSharingAction?: (SyncAction.SyncActionValue.ICtwaPerCustomerDataSharingAction|null);

        /** SyncActionValue paymentTosAction. */
        public paymentTosAction?: (SyncAction.SyncActionValue.IPaymentTosAction|null);

        /** SyncActionValue privacySettingChannelsPersonalisedRecommendationAction. */
        public privacySettingChannelsPersonalisedRecommendationAction?: (SyncAction.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction|null);

        /** SyncActionValue businessBroadcastAssociationAction. */
        public businessBroadcastAssociationAction?: (SyncAction.SyncActionValue.IBusinessBroadcastAssociationAction|null);

        /** SyncActionValue detectedOutcomesStatusAction. */
        public detectedOutcomesStatusAction?: (SyncAction.SyncActionValue.IDetectedOutcomesStatusAction|null);

        /** SyncActionValue maibaAiFeaturesControlAction. */
        public maibaAiFeaturesControlAction?: (SyncAction.SyncActionValue.IMaibaAIFeaturesControlAction|null);

        /** SyncActionValue businessBroadcastListAction. */
        public businessBroadcastListAction?: (SyncAction.SyncActionValue.IBusinessBroadcastListAction|null);

        /** SyncActionValue musicUserIdAction. */
        public musicUserIdAction?: (SyncAction.SyncActionValue.IMusicUserIdAction|null);

        /** SyncActionValue statusPostOptInNotificationPreferencesAction. */
        public statusPostOptInNotificationPreferencesAction?: (SyncAction.SyncActionValue.IStatusPostOptInNotificationPreferencesAction|null);

        /**
         * Creates a new SyncActionValue instance using the specified properties.
         * @param [properties] Properties to set
         * @returns SyncActionValue instance
         */
        public static create(properties?: SyncAction.ISyncActionValue): SyncAction.SyncActionValue;

        /**
         * Encodes the specified SyncActionValue message. Does not implicitly {@link SyncAction.SyncActionValue.verify|verify} messages.
         * @param message SyncActionValue message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: SyncAction.ISyncActionValue, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified SyncActionValue message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.verify|verify} messages.
         * @param message SyncActionValue message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: SyncAction.ISyncActionValue, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a SyncActionValue message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns SyncActionValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue;

        /**
         * Decodes a SyncActionValue message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns SyncActionValue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue;

        /**
         * Verifies a SyncActionValue message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a SyncActionValue message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns SyncActionValue
         */
        public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue;

        /**
         * Creates a plain object from a SyncActionValue message. Also converts values to other types if specified.
         * @param message SyncActionValue
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: SyncAction.SyncActionValue, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this SyncActionValue to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for SyncActionValue
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace SyncActionValue {

        /** Properties of an AgentAction. */
        interface IAgentAction {

            /** AgentAction name */
            name?: (string|null);

            /** AgentAction deviceID */
            deviceID?: (number|null);

            /** AgentAction isDeleted */
            isDeleted?: (boolean|null);
        }

        /** Represents an AgentAction. */
        class AgentAction implements IAgentAction {

            /**
             * Constructs a new AgentAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IAgentAction);

            /** AgentAction name. */
            public name: string;

            /** AgentAction deviceID. */
            public deviceID: number;

            /** AgentAction isDeleted. */
            public isDeleted: boolean;

            /**
             * Creates a new AgentAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AgentAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IAgentAction): SyncAction.SyncActionValue.AgentAction;

            /**
             * Encodes the specified AgentAction message. Does not implicitly {@link SyncAction.SyncActionValue.AgentAction.verify|verify} messages.
             * @param message AgentAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IAgentAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AgentAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.AgentAction.verify|verify} messages.
             * @param message AgentAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IAgentAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AgentAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AgentAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.AgentAction;

            /**
             * Decodes an AgentAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AgentAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.AgentAction;

            /**
             * Verifies an AgentAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AgentAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AgentAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.AgentAction;

            /**
             * Creates a plain object from an AgentAction message. Also converts values to other types if specified.
             * @param message AgentAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.AgentAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AgentAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AgentAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an AndroidUnsupportedActions. */
        interface IAndroidUnsupportedActions {

            /** AndroidUnsupportedActions allowed */
            allowed?: (boolean|null);
        }

        /** Represents an AndroidUnsupportedActions. */
        class AndroidUnsupportedActions implements IAndroidUnsupportedActions {

            /**
             * Constructs a new AndroidUnsupportedActions.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IAndroidUnsupportedActions);

            /** AndroidUnsupportedActions allowed. */
            public allowed: boolean;

            /**
             * Creates a new AndroidUnsupportedActions instance using the specified properties.
             * @param [properties] Properties to set
             * @returns AndroidUnsupportedActions instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IAndroidUnsupportedActions): SyncAction.SyncActionValue.AndroidUnsupportedActions;

            /**
             * Encodes the specified AndroidUnsupportedActions message. Does not implicitly {@link SyncAction.SyncActionValue.AndroidUnsupportedActions.verify|verify} messages.
             * @param message AndroidUnsupportedActions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IAndroidUnsupportedActions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified AndroidUnsupportedActions message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.AndroidUnsupportedActions.verify|verify} messages.
             * @param message AndroidUnsupportedActions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IAndroidUnsupportedActions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an AndroidUnsupportedActions message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns AndroidUnsupportedActions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.AndroidUnsupportedActions;

            /**
             * Decodes an AndroidUnsupportedActions message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns AndroidUnsupportedActions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.AndroidUnsupportedActions;

            /**
             * Verifies an AndroidUnsupportedActions message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an AndroidUnsupportedActions message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns AndroidUnsupportedActions
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.AndroidUnsupportedActions;

            /**
             * Creates a plain object from an AndroidUnsupportedActions message. Also converts values to other types if specified.
             * @param message AndroidUnsupportedActions
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.AndroidUnsupportedActions, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this AndroidUnsupportedActions to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for AndroidUnsupportedActions
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an ArchiveChatAction. */
        interface IArchiveChatAction {

            /** ArchiveChatAction archived */
            archived?: (boolean|null);

            /** ArchiveChatAction messageRange */
            messageRange?: (SyncAction.SyncActionValue.ISyncActionMessageRange|null);
        }

        /** Represents an ArchiveChatAction. */
        class ArchiveChatAction implements IArchiveChatAction {

            /**
             * Constructs a new ArchiveChatAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IArchiveChatAction);

            /** ArchiveChatAction archived. */
            public archived: boolean;

            /** ArchiveChatAction messageRange. */
            public messageRange?: (SyncAction.SyncActionValue.ISyncActionMessageRange|null);

            /**
             * Creates a new ArchiveChatAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ArchiveChatAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IArchiveChatAction): SyncAction.SyncActionValue.ArchiveChatAction;

            /**
             * Encodes the specified ArchiveChatAction message. Does not implicitly {@link SyncAction.SyncActionValue.ArchiveChatAction.verify|verify} messages.
             * @param message ArchiveChatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IArchiveChatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ArchiveChatAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.ArchiveChatAction.verify|verify} messages.
             * @param message ArchiveChatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IArchiveChatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an ArchiveChatAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ArchiveChatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.ArchiveChatAction;

            /**
             * Decodes an ArchiveChatAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ArchiveChatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.ArchiveChatAction;

            /**
             * Verifies an ArchiveChatAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an ArchiveChatAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ArchiveChatAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.ArchiveChatAction;

            /**
             * Creates a plain object from an ArchiveChatAction message. Also converts values to other types if specified.
             * @param message ArchiveChatAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.ArchiveChatAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ArchiveChatAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ArchiveChatAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a BotWelcomeRequestAction. */
        interface IBotWelcomeRequestAction {

            /** BotWelcomeRequestAction isSent */
            isSent?: (boolean|null);
        }

        /** Represents a BotWelcomeRequestAction. */
        class BotWelcomeRequestAction implements IBotWelcomeRequestAction {

            /**
             * Constructs a new BotWelcomeRequestAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IBotWelcomeRequestAction);

            /** BotWelcomeRequestAction isSent. */
            public isSent: boolean;

            /**
             * Creates a new BotWelcomeRequestAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns BotWelcomeRequestAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IBotWelcomeRequestAction): SyncAction.SyncActionValue.BotWelcomeRequestAction;

            /**
             * Encodes the specified BotWelcomeRequestAction message. Does not implicitly {@link SyncAction.SyncActionValue.BotWelcomeRequestAction.verify|verify} messages.
             * @param message BotWelcomeRequestAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IBotWelcomeRequestAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified BotWelcomeRequestAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.BotWelcomeRequestAction.verify|verify} messages.
             * @param message BotWelcomeRequestAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IBotWelcomeRequestAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a BotWelcomeRequestAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns BotWelcomeRequestAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.BotWelcomeRequestAction;

            /**
             * Decodes a BotWelcomeRequestAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns BotWelcomeRequestAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.BotWelcomeRequestAction;

            /**
             * Verifies a BotWelcomeRequestAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a BotWelcomeRequestAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns BotWelcomeRequestAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.BotWelcomeRequestAction;

            /**
             * Creates a plain object from a BotWelcomeRequestAction message. Also converts values to other types if specified.
             * @param message BotWelcomeRequestAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.BotWelcomeRequestAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this BotWelcomeRequestAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for BotWelcomeRequestAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a BroadcastListParticipant. */
        interface IBroadcastListParticipant {

            /** BroadcastListParticipant lidJid */
            lidJid: string;

            /** BroadcastListParticipant pnJid */
            pnJid?: (string|null);
        }

        /** Represents a BroadcastListParticipant. */
        class BroadcastListParticipant implements IBroadcastListParticipant {

            /**
             * Constructs a new BroadcastListParticipant.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IBroadcastListParticipant);

            /** BroadcastListParticipant lidJid. */
            public lidJid: string;

            /** BroadcastListParticipant pnJid. */
            public pnJid: string;

            /**
             * Creates a new BroadcastListParticipant instance using the specified properties.
             * @param [properties] Properties to set
             * @returns BroadcastListParticipant instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IBroadcastListParticipant): SyncAction.SyncActionValue.BroadcastListParticipant;

            /**
             * Encodes the specified BroadcastListParticipant message. Does not implicitly {@link SyncAction.SyncActionValue.BroadcastListParticipant.verify|verify} messages.
             * @param message BroadcastListParticipant message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IBroadcastListParticipant, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified BroadcastListParticipant message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.BroadcastListParticipant.verify|verify} messages.
             * @param message BroadcastListParticipant message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IBroadcastListParticipant, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a BroadcastListParticipant message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns BroadcastListParticipant
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.BroadcastListParticipant;

            /**
             * Decodes a BroadcastListParticipant message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns BroadcastListParticipant
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.BroadcastListParticipant;

            /**
             * Verifies a BroadcastListParticipant message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a BroadcastListParticipant message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns BroadcastListParticipant
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.BroadcastListParticipant;

            /**
             * Creates a plain object from a BroadcastListParticipant message. Also converts values to other types if specified.
             * @param message BroadcastListParticipant
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.BroadcastListParticipant, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this BroadcastListParticipant to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for BroadcastListParticipant
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a BusinessBroadcastAssociationAction. */
        interface IBusinessBroadcastAssociationAction {

            /** BusinessBroadcastAssociationAction deleted */
            deleted?: (boolean|null);
        }

        /** Represents a BusinessBroadcastAssociationAction. */
        class BusinessBroadcastAssociationAction implements IBusinessBroadcastAssociationAction {

            /**
             * Constructs a new BusinessBroadcastAssociationAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IBusinessBroadcastAssociationAction);

            /** BusinessBroadcastAssociationAction deleted. */
            public deleted: boolean;

            /**
             * Creates a new BusinessBroadcastAssociationAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns BusinessBroadcastAssociationAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IBusinessBroadcastAssociationAction): SyncAction.SyncActionValue.BusinessBroadcastAssociationAction;

            /**
             * Encodes the specified BusinessBroadcastAssociationAction message. Does not implicitly {@link SyncAction.SyncActionValue.BusinessBroadcastAssociationAction.verify|verify} messages.
             * @param message BusinessBroadcastAssociationAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IBusinessBroadcastAssociationAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified BusinessBroadcastAssociationAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.BusinessBroadcastAssociationAction.verify|verify} messages.
             * @param message BusinessBroadcastAssociationAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IBusinessBroadcastAssociationAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a BusinessBroadcastAssociationAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns BusinessBroadcastAssociationAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.BusinessBroadcastAssociationAction;

            /**
             * Decodes a BusinessBroadcastAssociationAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns BusinessBroadcastAssociationAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.BusinessBroadcastAssociationAction;

            /**
             * Verifies a BusinessBroadcastAssociationAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a BusinessBroadcastAssociationAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns BusinessBroadcastAssociationAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.BusinessBroadcastAssociationAction;

            /**
             * Creates a plain object from a BusinessBroadcastAssociationAction message. Also converts values to other types if specified.
             * @param message BusinessBroadcastAssociationAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.BusinessBroadcastAssociationAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this BusinessBroadcastAssociationAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for BusinessBroadcastAssociationAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a BusinessBroadcastListAction. */
        interface IBusinessBroadcastListAction {

            /** BusinessBroadcastListAction deleted */
            deleted?: (boolean|null);

            /** BusinessBroadcastListAction participants */
            participants?: (SyncAction.SyncActionValue.IBroadcastListParticipant[]|null);

            /** BusinessBroadcastListAction listName */
            listName?: (string|null);
        }

        /** Represents a BusinessBroadcastListAction. */
        class BusinessBroadcastListAction implements IBusinessBroadcastListAction {

            /**
             * Constructs a new BusinessBroadcastListAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IBusinessBroadcastListAction);

            /** BusinessBroadcastListAction deleted. */
            public deleted: boolean;

            /** BusinessBroadcastListAction participants. */
            public participants: SyncAction.SyncActionValue.IBroadcastListParticipant[];

            /** BusinessBroadcastListAction listName. */
            public listName: string;

            /**
             * Creates a new BusinessBroadcastListAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns BusinessBroadcastListAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IBusinessBroadcastListAction): SyncAction.SyncActionValue.BusinessBroadcastListAction;

            /**
             * Encodes the specified BusinessBroadcastListAction message. Does not implicitly {@link SyncAction.SyncActionValue.BusinessBroadcastListAction.verify|verify} messages.
             * @param message BusinessBroadcastListAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IBusinessBroadcastListAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified BusinessBroadcastListAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.BusinessBroadcastListAction.verify|verify} messages.
             * @param message BusinessBroadcastListAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IBusinessBroadcastListAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a BusinessBroadcastListAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns BusinessBroadcastListAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.BusinessBroadcastListAction;

            /**
             * Decodes a BusinessBroadcastListAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns BusinessBroadcastListAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.BusinessBroadcastListAction;

            /**
             * Verifies a BusinessBroadcastListAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a BusinessBroadcastListAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns BusinessBroadcastListAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.BusinessBroadcastListAction;

            /**
             * Creates a plain object from a BusinessBroadcastListAction message. Also converts values to other types if specified.
             * @param message BusinessBroadcastListAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.BusinessBroadcastListAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this BusinessBroadcastListAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for BusinessBroadcastListAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a CallLogAction. */
        interface ICallLogAction {

            /** CallLogAction callLogRecord */
            callLogRecord?: (SyncAction.ICallLogRecord|null);
        }

        /** Represents a CallLogAction. */
        class CallLogAction implements ICallLogAction {

            /**
             * Constructs a new CallLogAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ICallLogAction);

            /** CallLogAction callLogRecord. */
            public callLogRecord?: (SyncAction.ICallLogRecord|null);

            /**
             * Creates a new CallLogAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CallLogAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ICallLogAction): SyncAction.SyncActionValue.CallLogAction;

            /**
             * Encodes the specified CallLogAction message. Does not implicitly {@link SyncAction.SyncActionValue.CallLogAction.verify|verify} messages.
             * @param message CallLogAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ICallLogAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CallLogAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.CallLogAction.verify|verify} messages.
             * @param message CallLogAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ICallLogAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CallLogAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CallLogAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.CallLogAction;

            /**
             * Decodes a CallLogAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CallLogAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.CallLogAction;

            /**
             * Verifies a CallLogAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CallLogAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CallLogAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.CallLogAction;

            /**
             * Creates a plain object from a CallLogAction message. Also converts values to other types if specified.
             * @param message CallLogAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.CallLogAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CallLogAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CallLogAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ChatAssignmentAction. */
        interface IChatAssignmentAction {

            /** ChatAssignmentAction deviceAgentID */
            deviceAgentID?: (string|null);
        }

        /** Represents a ChatAssignmentAction. */
        class ChatAssignmentAction implements IChatAssignmentAction {

            /**
             * Constructs a new ChatAssignmentAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IChatAssignmentAction);

            /** ChatAssignmentAction deviceAgentID. */
            public deviceAgentID: string;

            /**
             * Creates a new ChatAssignmentAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ChatAssignmentAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IChatAssignmentAction): SyncAction.SyncActionValue.ChatAssignmentAction;

            /**
             * Encodes the specified ChatAssignmentAction message. Does not implicitly {@link SyncAction.SyncActionValue.ChatAssignmentAction.verify|verify} messages.
             * @param message ChatAssignmentAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IChatAssignmentAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ChatAssignmentAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.ChatAssignmentAction.verify|verify} messages.
             * @param message ChatAssignmentAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IChatAssignmentAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ChatAssignmentAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ChatAssignmentAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.ChatAssignmentAction;

            /**
             * Decodes a ChatAssignmentAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ChatAssignmentAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.ChatAssignmentAction;

            /**
             * Verifies a ChatAssignmentAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ChatAssignmentAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ChatAssignmentAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.ChatAssignmentAction;

            /**
             * Creates a plain object from a ChatAssignmentAction message. Also converts values to other types if specified.
             * @param message ChatAssignmentAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.ChatAssignmentAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ChatAssignmentAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ChatAssignmentAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ChatAssignmentOpenedStatusAction. */
        interface IChatAssignmentOpenedStatusAction {

            /** ChatAssignmentOpenedStatusAction chatOpened */
            chatOpened?: (boolean|null);
        }

        /** Represents a ChatAssignmentOpenedStatusAction. */
        class ChatAssignmentOpenedStatusAction implements IChatAssignmentOpenedStatusAction {

            /**
             * Constructs a new ChatAssignmentOpenedStatusAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IChatAssignmentOpenedStatusAction);

            /** ChatAssignmentOpenedStatusAction chatOpened. */
            public chatOpened: boolean;

            /**
             * Creates a new ChatAssignmentOpenedStatusAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ChatAssignmentOpenedStatusAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IChatAssignmentOpenedStatusAction): SyncAction.SyncActionValue.ChatAssignmentOpenedStatusAction;

            /**
             * Encodes the specified ChatAssignmentOpenedStatusAction message. Does not implicitly {@link SyncAction.SyncActionValue.ChatAssignmentOpenedStatusAction.verify|verify} messages.
             * @param message ChatAssignmentOpenedStatusAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IChatAssignmentOpenedStatusAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ChatAssignmentOpenedStatusAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.ChatAssignmentOpenedStatusAction.verify|verify} messages.
             * @param message ChatAssignmentOpenedStatusAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IChatAssignmentOpenedStatusAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ChatAssignmentOpenedStatusAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ChatAssignmentOpenedStatusAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.ChatAssignmentOpenedStatusAction;

            /**
             * Decodes a ChatAssignmentOpenedStatusAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ChatAssignmentOpenedStatusAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.ChatAssignmentOpenedStatusAction;

            /**
             * Verifies a ChatAssignmentOpenedStatusAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ChatAssignmentOpenedStatusAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ChatAssignmentOpenedStatusAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.ChatAssignmentOpenedStatusAction;

            /**
             * Creates a plain object from a ChatAssignmentOpenedStatusAction message. Also converts values to other types if specified.
             * @param message ChatAssignmentOpenedStatusAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.ChatAssignmentOpenedStatusAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ChatAssignmentOpenedStatusAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ChatAssignmentOpenedStatusAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ClearChatAction. */
        interface IClearChatAction {

            /** ClearChatAction messageRange */
            messageRange?: (SyncAction.SyncActionValue.ISyncActionMessageRange|null);
        }

        /** Represents a ClearChatAction. */
        class ClearChatAction implements IClearChatAction {

            /**
             * Constructs a new ClearChatAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IClearChatAction);

            /** ClearChatAction messageRange. */
            public messageRange?: (SyncAction.SyncActionValue.ISyncActionMessageRange|null);

            /**
             * Creates a new ClearChatAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ClearChatAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IClearChatAction): SyncAction.SyncActionValue.ClearChatAction;

            /**
             * Encodes the specified ClearChatAction message. Does not implicitly {@link SyncAction.SyncActionValue.ClearChatAction.verify|verify} messages.
             * @param message ClearChatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IClearChatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ClearChatAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.ClearChatAction.verify|verify} messages.
             * @param message ClearChatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IClearChatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ClearChatAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ClearChatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.ClearChatAction;

            /**
             * Decodes a ClearChatAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ClearChatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.ClearChatAction;

            /**
             * Verifies a ClearChatAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ClearChatAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ClearChatAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.ClearChatAction;

            /**
             * Creates a plain object from a ClearChatAction message. Also converts values to other types if specified.
             * @param message ClearChatAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.ClearChatAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ClearChatAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ClearChatAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ContactAction. */
        interface IContactAction {

            /** ContactAction fullName */
            fullName?: (string|null);

            /** ContactAction firstName */
            firstName?: (string|null);

            /** ContactAction lidJid */
            lidJid?: (string|null);

            /** ContactAction saveOnPrimaryAddressbook */
            saveOnPrimaryAddressbook?: (boolean|null);

            /** ContactAction pnJid */
            pnJid?: (string|null);

            /** ContactAction username */
            username?: (string|null);
        }

        /** Represents a ContactAction. */
        class ContactAction implements IContactAction {

            /**
             * Constructs a new ContactAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IContactAction);

            /** ContactAction fullName. */
            public fullName: string;

            /** ContactAction firstName. */
            public firstName: string;

            /** ContactAction lidJid. */
            public lidJid: string;

            /** ContactAction saveOnPrimaryAddressbook. */
            public saveOnPrimaryAddressbook: boolean;

            /** ContactAction pnJid. */
            public pnJid: string;

            /** ContactAction username. */
            public username: string;

            /**
             * Creates a new ContactAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ContactAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IContactAction): SyncAction.SyncActionValue.ContactAction;

            /**
             * Encodes the specified ContactAction message. Does not implicitly {@link SyncAction.SyncActionValue.ContactAction.verify|verify} messages.
             * @param message ContactAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IContactAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ContactAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.ContactAction.verify|verify} messages.
             * @param message ContactAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IContactAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ContactAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ContactAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.ContactAction;

            /**
             * Decodes a ContactAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ContactAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.ContactAction;

            /**
             * Verifies a ContactAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ContactAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ContactAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.ContactAction;

            /**
             * Creates a plain object from a ContactAction message. Also converts values to other types if specified.
             * @param message ContactAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.ContactAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ContactAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ContactAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a CtwaPerCustomerDataSharingAction. */
        interface ICtwaPerCustomerDataSharingAction {

            /** CtwaPerCustomerDataSharingAction isCtwaPerCustomerDataSharingEnabled */
            isCtwaPerCustomerDataSharingEnabled?: (boolean|null);
        }

        /** Represents a CtwaPerCustomerDataSharingAction. */
        class CtwaPerCustomerDataSharingAction implements ICtwaPerCustomerDataSharingAction {

            /**
             * Constructs a new CtwaPerCustomerDataSharingAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ICtwaPerCustomerDataSharingAction);

            /** CtwaPerCustomerDataSharingAction isCtwaPerCustomerDataSharingEnabled. */
            public isCtwaPerCustomerDataSharingEnabled: boolean;

            /**
             * Creates a new CtwaPerCustomerDataSharingAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CtwaPerCustomerDataSharingAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ICtwaPerCustomerDataSharingAction): SyncAction.SyncActionValue.CtwaPerCustomerDataSharingAction;

            /**
             * Encodes the specified CtwaPerCustomerDataSharingAction message. Does not implicitly {@link SyncAction.SyncActionValue.CtwaPerCustomerDataSharingAction.verify|verify} messages.
             * @param message CtwaPerCustomerDataSharingAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ICtwaPerCustomerDataSharingAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CtwaPerCustomerDataSharingAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.CtwaPerCustomerDataSharingAction.verify|verify} messages.
             * @param message CtwaPerCustomerDataSharingAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ICtwaPerCustomerDataSharingAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CtwaPerCustomerDataSharingAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CtwaPerCustomerDataSharingAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.CtwaPerCustomerDataSharingAction;

            /**
             * Decodes a CtwaPerCustomerDataSharingAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CtwaPerCustomerDataSharingAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.CtwaPerCustomerDataSharingAction;

            /**
             * Verifies a CtwaPerCustomerDataSharingAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CtwaPerCustomerDataSharingAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CtwaPerCustomerDataSharingAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.CtwaPerCustomerDataSharingAction;

            /**
             * Creates a plain object from a CtwaPerCustomerDataSharingAction message. Also converts values to other types if specified.
             * @param message CtwaPerCustomerDataSharingAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.CtwaPerCustomerDataSharingAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CtwaPerCustomerDataSharingAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CtwaPerCustomerDataSharingAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a CustomPaymentMethod. */
        interface ICustomPaymentMethod {

            /** CustomPaymentMethod credentialId */
            credentialId: string;

            /** CustomPaymentMethod country */
            country: string;

            /** CustomPaymentMethod type */
            type: string;

            /** CustomPaymentMethod metadata */
            metadata?: (SyncAction.SyncActionValue.ICustomPaymentMethodMetadata[]|null);
        }

        /** Represents a CustomPaymentMethod. */
        class CustomPaymentMethod implements ICustomPaymentMethod {

            /**
             * Constructs a new CustomPaymentMethod.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ICustomPaymentMethod);

            /** CustomPaymentMethod credentialId. */
            public credentialId: string;

            /** CustomPaymentMethod country. */
            public country: string;

            /** CustomPaymentMethod type. */
            public type: string;

            /** CustomPaymentMethod metadata. */
            public metadata: SyncAction.SyncActionValue.ICustomPaymentMethodMetadata[];

            /**
             * Creates a new CustomPaymentMethod instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CustomPaymentMethod instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ICustomPaymentMethod): SyncAction.SyncActionValue.CustomPaymentMethod;

            /**
             * Encodes the specified CustomPaymentMethod message. Does not implicitly {@link SyncAction.SyncActionValue.CustomPaymentMethod.verify|verify} messages.
             * @param message CustomPaymentMethod message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ICustomPaymentMethod, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CustomPaymentMethod message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.CustomPaymentMethod.verify|verify} messages.
             * @param message CustomPaymentMethod message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ICustomPaymentMethod, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CustomPaymentMethod message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CustomPaymentMethod
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.CustomPaymentMethod;

            /**
             * Decodes a CustomPaymentMethod message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CustomPaymentMethod
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.CustomPaymentMethod;

            /**
             * Verifies a CustomPaymentMethod message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CustomPaymentMethod message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CustomPaymentMethod
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.CustomPaymentMethod;

            /**
             * Creates a plain object from a CustomPaymentMethod message. Also converts values to other types if specified.
             * @param message CustomPaymentMethod
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.CustomPaymentMethod, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CustomPaymentMethod to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CustomPaymentMethod
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a CustomPaymentMethodMetadata. */
        interface ICustomPaymentMethodMetadata {

            /** CustomPaymentMethodMetadata key */
            key: string;

            /** CustomPaymentMethodMetadata value */
            value: string;
        }

        /** Represents a CustomPaymentMethodMetadata. */
        class CustomPaymentMethodMetadata implements ICustomPaymentMethodMetadata {

            /**
             * Constructs a new CustomPaymentMethodMetadata.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ICustomPaymentMethodMetadata);

            /** CustomPaymentMethodMetadata key. */
            public key: string;

            /** CustomPaymentMethodMetadata value. */
            public value: string;

            /**
             * Creates a new CustomPaymentMethodMetadata instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CustomPaymentMethodMetadata instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ICustomPaymentMethodMetadata): SyncAction.SyncActionValue.CustomPaymentMethodMetadata;

            /**
             * Encodes the specified CustomPaymentMethodMetadata message. Does not implicitly {@link SyncAction.SyncActionValue.CustomPaymentMethodMetadata.verify|verify} messages.
             * @param message CustomPaymentMethodMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ICustomPaymentMethodMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CustomPaymentMethodMetadata message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.CustomPaymentMethodMetadata.verify|verify} messages.
             * @param message CustomPaymentMethodMetadata message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ICustomPaymentMethodMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CustomPaymentMethodMetadata message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CustomPaymentMethodMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.CustomPaymentMethodMetadata;

            /**
             * Decodes a CustomPaymentMethodMetadata message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CustomPaymentMethodMetadata
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.CustomPaymentMethodMetadata;

            /**
             * Verifies a CustomPaymentMethodMetadata message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CustomPaymentMethodMetadata message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CustomPaymentMethodMetadata
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.CustomPaymentMethodMetadata;

            /**
             * Creates a plain object from a CustomPaymentMethodMetadata message. Also converts values to other types if specified.
             * @param message CustomPaymentMethodMetadata
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.CustomPaymentMethodMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CustomPaymentMethodMetadata to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CustomPaymentMethodMetadata
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a CustomPaymentMethodsAction. */
        interface ICustomPaymentMethodsAction {

            /** CustomPaymentMethodsAction customPaymentMethods */
            customPaymentMethods?: (SyncAction.SyncActionValue.ICustomPaymentMethod[]|null);
        }

        /** Represents a CustomPaymentMethodsAction. */
        class CustomPaymentMethodsAction implements ICustomPaymentMethodsAction {

            /**
             * Constructs a new CustomPaymentMethodsAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ICustomPaymentMethodsAction);

            /** CustomPaymentMethodsAction customPaymentMethods. */
            public customPaymentMethods: SyncAction.SyncActionValue.ICustomPaymentMethod[];

            /**
             * Creates a new CustomPaymentMethodsAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CustomPaymentMethodsAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ICustomPaymentMethodsAction): SyncAction.SyncActionValue.CustomPaymentMethodsAction;

            /**
             * Encodes the specified CustomPaymentMethodsAction message. Does not implicitly {@link SyncAction.SyncActionValue.CustomPaymentMethodsAction.verify|verify} messages.
             * @param message CustomPaymentMethodsAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ICustomPaymentMethodsAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CustomPaymentMethodsAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.CustomPaymentMethodsAction.verify|verify} messages.
             * @param message CustomPaymentMethodsAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ICustomPaymentMethodsAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CustomPaymentMethodsAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CustomPaymentMethodsAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.CustomPaymentMethodsAction;

            /**
             * Decodes a CustomPaymentMethodsAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CustomPaymentMethodsAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.CustomPaymentMethodsAction;

            /**
             * Verifies a CustomPaymentMethodsAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CustomPaymentMethodsAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CustomPaymentMethodsAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.CustomPaymentMethodsAction;

            /**
             * Creates a plain object from a CustomPaymentMethodsAction message. Also converts values to other types if specified.
             * @param message CustomPaymentMethodsAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.CustomPaymentMethodsAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CustomPaymentMethodsAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CustomPaymentMethodsAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a DeleteChatAction. */
        interface IDeleteChatAction {

            /** DeleteChatAction messageRange */
            messageRange?: (SyncAction.SyncActionValue.ISyncActionMessageRange|null);
        }

        /** Represents a DeleteChatAction. */
        class DeleteChatAction implements IDeleteChatAction {

            /**
             * Constructs a new DeleteChatAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IDeleteChatAction);

            /** DeleteChatAction messageRange. */
            public messageRange?: (SyncAction.SyncActionValue.ISyncActionMessageRange|null);

            /**
             * Creates a new DeleteChatAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns DeleteChatAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IDeleteChatAction): SyncAction.SyncActionValue.DeleteChatAction;

            /**
             * Encodes the specified DeleteChatAction message. Does not implicitly {@link SyncAction.SyncActionValue.DeleteChatAction.verify|verify} messages.
             * @param message DeleteChatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IDeleteChatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified DeleteChatAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.DeleteChatAction.verify|verify} messages.
             * @param message DeleteChatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IDeleteChatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a DeleteChatAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns DeleteChatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.DeleteChatAction;

            /**
             * Decodes a DeleteChatAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns DeleteChatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.DeleteChatAction;

            /**
             * Verifies a DeleteChatAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a DeleteChatAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns DeleteChatAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.DeleteChatAction;

            /**
             * Creates a plain object from a DeleteChatAction message. Also converts values to other types if specified.
             * @param message DeleteChatAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.DeleteChatAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this DeleteChatAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for DeleteChatAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a DeleteIndividualCallLogAction. */
        interface IDeleteIndividualCallLogAction {

            /** DeleteIndividualCallLogAction peerJid */
            peerJid?: (string|null);

            /** DeleteIndividualCallLogAction isIncoming */
            isIncoming?: (boolean|null);
        }

        /** Represents a DeleteIndividualCallLogAction. */
        class DeleteIndividualCallLogAction implements IDeleteIndividualCallLogAction {

            /**
             * Constructs a new DeleteIndividualCallLogAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IDeleteIndividualCallLogAction);

            /** DeleteIndividualCallLogAction peerJid. */
            public peerJid: string;

            /** DeleteIndividualCallLogAction isIncoming. */
            public isIncoming: boolean;

            /**
             * Creates a new DeleteIndividualCallLogAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns DeleteIndividualCallLogAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IDeleteIndividualCallLogAction): SyncAction.SyncActionValue.DeleteIndividualCallLogAction;

            /**
             * Encodes the specified DeleteIndividualCallLogAction message. Does not implicitly {@link SyncAction.SyncActionValue.DeleteIndividualCallLogAction.verify|verify} messages.
             * @param message DeleteIndividualCallLogAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IDeleteIndividualCallLogAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified DeleteIndividualCallLogAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.DeleteIndividualCallLogAction.verify|verify} messages.
             * @param message DeleteIndividualCallLogAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IDeleteIndividualCallLogAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a DeleteIndividualCallLogAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns DeleteIndividualCallLogAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.DeleteIndividualCallLogAction;

            /**
             * Decodes a DeleteIndividualCallLogAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns DeleteIndividualCallLogAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.DeleteIndividualCallLogAction;

            /**
             * Verifies a DeleteIndividualCallLogAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a DeleteIndividualCallLogAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns DeleteIndividualCallLogAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.DeleteIndividualCallLogAction;

            /**
             * Creates a plain object from a DeleteIndividualCallLogAction message. Also converts values to other types if specified.
             * @param message DeleteIndividualCallLogAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.DeleteIndividualCallLogAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this DeleteIndividualCallLogAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for DeleteIndividualCallLogAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a DeleteMessageForMeAction. */
        interface IDeleteMessageForMeAction {

            /** DeleteMessageForMeAction deleteMedia */
            deleteMedia?: (boolean|null);

            /** DeleteMessageForMeAction messageTimestamp */
            messageTimestamp?: (number|Long|null);
        }

        /** Represents a DeleteMessageForMeAction. */
        class DeleteMessageForMeAction implements IDeleteMessageForMeAction {

            /**
             * Constructs a new DeleteMessageForMeAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IDeleteMessageForMeAction);

            /** DeleteMessageForMeAction deleteMedia. */
            public deleteMedia: boolean;

            /** DeleteMessageForMeAction messageTimestamp. */
            public messageTimestamp: (number|Long);

            /**
             * Creates a new DeleteMessageForMeAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns DeleteMessageForMeAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IDeleteMessageForMeAction): SyncAction.SyncActionValue.DeleteMessageForMeAction;

            /**
             * Encodes the specified DeleteMessageForMeAction message. Does not implicitly {@link SyncAction.SyncActionValue.DeleteMessageForMeAction.verify|verify} messages.
             * @param message DeleteMessageForMeAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IDeleteMessageForMeAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified DeleteMessageForMeAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.DeleteMessageForMeAction.verify|verify} messages.
             * @param message DeleteMessageForMeAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IDeleteMessageForMeAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a DeleteMessageForMeAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns DeleteMessageForMeAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.DeleteMessageForMeAction;

            /**
             * Decodes a DeleteMessageForMeAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns DeleteMessageForMeAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.DeleteMessageForMeAction;

            /**
             * Verifies a DeleteMessageForMeAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a DeleteMessageForMeAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns DeleteMessageForMeAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.DeleteMessageForMeAction;

            /**
             * Creates a plain object from a DeleteMessageForMeAction message. Also converts values to other types if specified.
             * @param message DeleteMessageForMeAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.DeleteMessageForMeAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this DeleteMessageForMeAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for DeleteMessageForMeAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a DetectedOutcomesStatusAction. */
        interface IDetectedOutcomesStatusAction {

            /** DetectedOutcomesStatusAction isEnabled */
            isEnabled?: (boolean|null);
        }

        /** Represents a DetectedOutcomesStatusAction. */
        class DetectedOutcomesStatusAction implements IDetectedOutcomesStatusAction {

            /**
             * Constructs a new DetectedOutcomesStatusAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IDetectedOutcomesStatusAction);

            /** DetectedOutcomesStatusAction isEnabled. */
            public isEnabled: boolean;

            /**
             * Creates a new DetectedOutcomesStatusAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns DetectedOutcomesStatusAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IDetectedOutcomesStatusAction): SyncAction.SyncActionValue.DetectedOutcomesStatusAction;

            /**
             * Encodes the specified DetectedOutcomesStatusAction message. Does not implicitly {@link SyncAction.SyncActionValue.DetectedOutcomesStatusAction.verify|verify} messages.
             * @param message DetectedOutcomesStatusAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IDetectedOutcomesStatusAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified DetectedOutcomesStatusAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.DetectedOutcomesStatusAction.verify|verify} messages.
             * @param message DetectedOutcomesStatusAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IDetectedOutcomesStatusAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a DetectedOutcomesStatusAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns DetectedOutcomesStatusAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.DetectedOutcomesStatusAction;

            /**
             * Decodes a DetectedOutcomesStatusAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns DetectedOutcomesStatusAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.DetectedOutcomesStatusAction;

            /**
             * Verifies a DetectedOutcomesStatusAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a DetectedOutcomesStatusAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns DetectedOutcomesStatusAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.DetectedOutcomesStatusAction;

            /**
             * Creates a plain object from a DetectedOutcomesStatusAction message. Also converts values to other types if specified.
             * @param message DetectedOutcomesStatusAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.DetectedOutcomesStatusAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this DetectedOutcomesStatusAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for DetectedOutcomesStatusAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an ExternalWebBetaAction. */
        interface IExternalWebBetaAction {

            /** ExternalWebBetaAction isOptIn */
            isOptIn?: (boolean|null);
        }

        /** Represents an ExternalWebBetaAction. */
        class ExternalWebBetaAction implements IExternalWebBetaAction {

            /**
             * Constructs a new ExternalWebBetaAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IExternalWebBetaAction);

            /** ExternalWebBetaAction isOptIn. */
            public isOptIn: boolean;

            /**
             * Creates a new ExternalWebBetaAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ExternalWebBetaAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IExternalWebBetaAction): SyncAction.SyncActionValue.ExternalWebBetaAction;

            /**
             * Encodes the specified ExternalWebBetaAction message. Does not implicitly {@link SyncAction.SyncActionValue.ExternalWebBetaAction.verify|verify} messages.
             * @param message ExternalWebBetaAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IExternalWebBetaAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ExternalWebBetaAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.ExternalWebBetaAction.verify|verify} messages.
             * @param message ExternalWebBetaAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IExternalWebBetaAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an ExternalWebBetaAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ExternalWebBetaAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.ExternalWebBetaAction;

            /**
             * Decodes an ExternalWebBetaAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ExternalWebBetaAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.ExternalWebBetaAction;

            /**
             * Verifies an ExternalWebBetaAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an ExternalWebBetaAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ExternalWebBetaAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.ExternalWebBetaAction;

            /**
             * Creates a plain object from an ExternalWebBetaAction message. Also converts values to other types if specified.
             * @param message ExternalWebBetaAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.ExternalWebBetaAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ExternalWebBetaAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ExternalWebBetaAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a FavoritesAction. */
        interface IFavoritesAction {

            /** FavoritesAction favorites */
            favorites?: (SyncAction.SyncActionValue.FavoritesAction.IFavorite[]|null);
        }

        /** Represents a FavoritesAction. */
        class FavoritesAction implements IFavoritesAction {

            /**
             * Constructs a new FavoritesAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IFavoritesAction);

            /** FavoritesAction favorites. */
            public favorites: SyncAction.SyncActionValue.FavoritesAction.IFavorite[];

            /**
             * Creates a new FavoritesAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FavoritesAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IFavoritesAction): SyncAction.SyncActionValue.FavoritesAction;

            /**
             * Encodes the specified FavoritesAction message. Does not implicitly {@link SyncAction.SyncActionValue.FavoritesAction.verify|verify} messages.
             * @param message FavoritesAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IFavoritesAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FavoritesAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.FavoritesAction.verify|verify} messages.
             * @param message FavoritesAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IFavoritesAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FavoritesAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FavoritesAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.FavoritesAction;

            /**
             * Decodes a FavoritesAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FavoritesAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.FavoritesAction;

            /**
             * Verifies a FavoritesAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FavoritesAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FavoritesAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.FavoritesAction;

            /**
             * Creates a plain object from a FavoritesAction message. Also converts values to other types if specified.
             * @param message FavoritesAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.FavoritesAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FavoritesAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FavoritesAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace FavoritesAction {

            /** Properties of a Favorite. */
            interface IFavorite {

                /** Favorite id */
                id?: (string|null);
            }

            /** Represents a Favorite. */
            class Favorite implements IFavorite {

                /**
                 * Constructs a new Favorite.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: SyncAction.SyncActionValue.FavoritesAction.IFavorite);

                /** Favorite id. */
                public id: string;

                /**
                 * Creates a new Favorite instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Favorite instance
                 */
                public static create(properties?: SyncAction.SyncActionValue.FavoritesAction.IFavorite): SyncAction.SyncActionValue.FavoritesAction.Favorite;

                /**
                 * Encodes the specified Favorite message. Does not implicitly {@link SyncAction.SyncActionValue.FavoritesAction.Favorite.verify|verify} messages.
                 * @param message Favorite message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: SyncAction.SyncActionValue.FavoritesAction.IFavorite, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Favorite message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.FavoritesAction.Favorite.verify|verify} messages.
                 * @param message Favorite message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: SyncAction.SyncActionValue.FavoritesAction.IFavorite, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Favorite message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Favorite
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.FavoritesAction.Favorite;

                /**
                 * Decodes a Favorite message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Favorite
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.FavoritesAction.Favorite;

                /**
                 * Verifies a Favorite message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Favorite message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Favorite
                 */
                public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.FavoritesAction.Favorite;

                /**
                 * Creates a plain object from a Favorite message. Also converts values to other types if specified.
                 * @param message Favorite
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: SyncAction.SyncActionValue.FavoritesAction.Favorite, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Favorite to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Favorite
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a KeyExpiration. */
        interface IKeyExpiration {

            /** KeyExpiration expiredKeyEpoch */
            expiredKeyEpoch?: (number|null);
        }

        /** Represents a KeyExpiration. */
        class KeyExpiration implements IKeyExpiration {

            /**
             * Constructs a new KeyExpiration.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IKeyExpiration);

            /** KeyExpiration expiredKeyEpoch. */
            public expiredKeyEpoch: number;

            /**
             * Creates a new KeyExpiration instance using the specified properties.
             * @param [properties] Properties to set
             * @returns KeyExpiration instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IKeyExpiration): SyncAction.SyncActionValue.KeyExpiration;

            /**
             * Encodes the specified KeyExpiration message. Does not implicitly {@link SyncAction.SyncActionValue.KeyExpiration.verify|verify} messages.
             * @param message KeyExpiration message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IKeyExpiration, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified KeyExpiration message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.KeyExpiration.verify|verify} messages.
             * @param message KeyExpiration message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IKeyExpiration, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a KeyExpiration message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns KeyExpiration
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.KeyExpiration;

            /**
             * Decodes a KeyExpiration message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns KeyExpiration
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.KeyExpiration;

            /**
             * Verifies a KeyExpiration message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a KeyExpiration message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns KeyExpiration
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.KeyExpiration;

            /**
             * Creates a plain object from a KeyExpiration message. Also converts values to other types if specified.
             * @param message KeyExpiration
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.KeyExpiration, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this KeyExpiration to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for KeyExpiration
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a LabelAssociationAction. */
        interface ILabelAssociationAction {

            /** LabelAssociationAction labeled */
            labeled?: (boolean|null);
        }

        /** Represents a LabelAssociationAction. */
        class LabelAssociationAction implements ILabelAssociationAction {

            /**
             * Constructs a new LabelAssociationAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ILabelAssociationAction);

            /** LabelAssociationAction labeled. */
            public labeled: boolean;

            /**
             * Creates a new LabelAssociationAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns LabelAssociationAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ILabelAssociationAction): SyncAction.SyncActionValue.LabelAssociationAction;

            /**
             * Encodes the specified LabelAssociationAction message. Does not implicitly {@link SyncAction.SyncActionValue.LabelAssociationAction.verify|verify} messages.
             * @param message LabelAssociationAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ILabelAssociationAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified LabelAssociationAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.LabelAssociationAction.verify|verify} messages.
             * @param message LabelAssociationAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ILabelAssociationAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a LabelAssociationAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns LabelAssociationAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.LabelAssociationAction;

            /**
             * Decodes a LabelAssociationAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns LabelAssociationAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.LabelAssociationAction;

            /**
             * Verifies a LabelAssociationAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a LabelAssociationAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns LabelAssociationAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.LabelAssociationAction;

            /**
             * Creates a plain object from a LabelAssociationAction message. Also converts values to other types if specified.
             * @param message LabelAssociationAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.LabelAssociationAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this LabelAssociationAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for LabelAssociationAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a LabelEditAction. */
        interface ILabelEditAction {

            /** LabelEditAction name */
            name?: (string|null);

            /** LabelEditAction color */
            color?: (number|null);

            /** LabelEditAction predefinedId */
            predefinedId?: (number|null);

            /** LabelEditAction deleted */
            deleted?: (boolean|null);

            /** LabelEditAction orderIndex */
            orderIndex?: (number|null);

            /** LabelEditAction isActive */
            isActive?: (boolean|null);

            /** LabelEditAction type */
            type?: (SyncAction.SyncActionValue.LabelEditAction.ListType|null);

            /** LabelEditAction isImmutable */
            isImmutable?: (boolean|null);
        }

        /** Represents a LabelEditAction. */
        class LabelEditAction implements ILabelEditAction {

            /**
             * Constructs a new LabelEditAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ILabelEditAction);

            /** LabelEditAction name. */
            public name: string;

            /** LabelEditAction color. */
            public color: number;

            /** LabelEditAction predefinedId. */
            public predefinedId: number;

            /** LabelEditAction deleted. */
            public deleted: boolean;

            /** LabelEditAction orderIndex. */
            public orderIndex: number;

            /** LabelEditAction isActive. */
            public isActive: boolean;

            /** LabelEditAction type. */
            public type: SyncAction.SyncActionValue.LabelEditAction.ListType;

            /** LabelEditAction isImmutable. */
            public isImmutable: boolean;

            /**
             * Creates a new LabelEditAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns LabelEditAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ILabelEditAction): SyncAction.SyncActionValue.LabelEditAction;

            /**
             * Encodes the specified LabelEditAction message. Does not implicitly {@link SyncAction.SyncActionValue.LabelEditAction.verify|verify} messages.
             * @param message LabelEditAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ILabelEditAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified LabelEditAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.LabelEditAction.verify|verify} messages.
             * @param message LabelEditAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ILabelEditAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a LabelEditAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns LabelEditAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.LabelEditAction;

            /**
             * Decodes a LabelEditAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns LabelEditAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.LabelEditAction;

            /**
             * Verifies a LabelEditAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a LabelEditAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns LabelEditAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.LabelEditAction;

            /**
             * Creates a plain object from a LabelEditAction message. Also converts values to other types if specified.
             * @param message LabelEditAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.LabelEditAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this LabelEditAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for LabelEditAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace LabelEditAction {

            /** ListType enum. */
            enum ListType {
                NONE = 0,
                UNREAD = 1,
                GROUPS = 2,
                FAVORITES = 3,
                PREDEFINED = 4,
                CUSTOM = 5,
                COMMUNITY = 6,
                SERVER_ASSIGNED = 7
            }
        }

        /** Properties of a LabelReorderingAction. */
        interface ILabelReorderingAction {

            /** LabelReorderingAction sortedLabelIds */
            sortedLabelIds?: (number[]|null);
        }

        /** Represents a LabelReorderingAction. */
        class LabelReorderingAction implements ILabelReorderingAction {

            /**
             * Constructs a new LabelReorderingAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ILabelReorderingAction);

            /** LabelReorderingAction sortedLabelIds. */
            public sortedLabelIds: number[];

            /**
             * Creates a new LabelReorderingAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns LabelReorderingAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ILabelReorderingAction): SyncAction.SyncActionValue.LabelReorderingAction;

            /**
             * Encodes the specified LabelReorderingAction message. Does not implicitly {@link SyncAction.SyncActionValue.LabelReorderingAction.verify|verify} messages.
             * @param message LabelReorderingAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ILabelReorderingAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified LabelReorderingAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.LabelReorderingAction.verify|verify} messages.
             * @param message LabelReorderingAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ILabelReorderingAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a LabelReorderingAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns LabelReorderingAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.LabelReorderingAction;

            /**
             * Decodes a LabelReorderingAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns LabelReorderingAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.LabelReorderingAction;

            /**
             * Verifies a LabelReorderingAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a LabelReorderingAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns LabelReorderingAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.LabelReorderingAction;

            /**
             * Creates a plain object from a LabelReorderingAction message. Also converts values to other types if specified.
             * @param message LabelReorderingAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.LabelReorderingAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this LabelReorderingAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for LabelReorderingAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a LidContactAction. */
        interface ILidContactAction {

            /** LidContactAction fullName */
            fullName?: (string|null);

            /** LidContactAction firstName */
            firstName?: (string|null);

            /** LidContactAction username */
            username?: (string|null);

            /** LidContactAction saveOnPrimaryAddressbook */
            saveOnPrimaryAddressbook?: (boolean|null);
        }

        /** Represents a LidContactAction. */
        class LidContactAction implements ILidContactAction {

            /**
             * Constructs a new LidContactAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ILidContactAction);

            /** LidContactAction fullName. */
            public fullName: string;

            /** LidContactAction firstName. */
            public firstName: string;

            /** LidContactAction username. */
            public username: string;

            /** LidContactAction saveOnPrimaryAddressbook. */
            public saveOnPrimaryAddressbook: boolean;

            /**
             * Creates a new LidContactAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns LidContactAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ILidContactAction): SyncAction.SyncActionValue.LidContactAction;

            /**
             * Encodes the specified LidContactAction message. Does not implicitly {@link SyncAction.SyncActionValue.LidContactAction.verify|verify} messages.
             * @param message LidContactAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ILidContactAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified LidContactAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.LidContactAction.verify|verify} messages.
             * @param message LidContactAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ILidContactAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a LidContactAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns LidContactAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.LidContactAction;

            /**
             * Decodes a LidContactAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns LidContactAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.LidContactAction;

            /**
             * Verifies a LidContactAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a LidContactAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns LidContactAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.LidContactAction;

            /**
             * Creates a plain object from a LidContactAction message. Also converts values to other types if specified.
             * @param message LidContactAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.LidContactAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this LidContactAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for LidContactAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a LocaleSetting. */
        interface ILocaleSetting {

            /** LocaleSetting locale */
            locale?: (string|null);
        }

        /** Represents a LocaleSetting. */
        class LocaleSetting implements ILocaleSetting {

            /**
             * Constructs a new LocaleSetting.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ILocaleSetting);

            /** LocaleSetting locale. */
            public locale: string;

            /**
             * Creates a new LocaleSetting instance using the specified properties.
             * @param [properties] Properties to set
             * @returns LocaleSetting instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ILocaleSetting): SyncAction.SyncActionValue.LocaleSetting;

            /**
             * Encodes the specified LocaleSetting message. Does not implicitly {@link SyncAction.SyncActionValue.LocaleSetting.verify|verify} messages.
             * @param message LocaleSetting message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ILocaleSetting, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified LocaleSetting message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.LocaleSetting.verify|verify} messages.
             * @param message LocaleSetting message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ILocaleSetting, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a LocaleSetting message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns LocaleSetting
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.LocaleSetting;

            /**
             * Decodes a LocaleSetting message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns LocaleSetting
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.LocaleSetting;

            /**
             * Verifies a LocaleSetting message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a LocaleSetting message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns LocaleSetting
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.LocaleSetting;

            /**
             * Creates a plain object from a LocaleSetting message. Also converts values to other types if specified.
             * @param message LocaleSetting
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.LocaleSetting, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this LocaleSetting to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for LocaleSetting
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a LockChatAction. */
        interface ILockChatAction {

            /** LockChatAction locked */
            locked?: (boolean|null);
        }

        /** Represents a LockChatAction. */
        class LockChatAction implements ILockChatAction {

            /**
             * Constructs a new LockChatAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ILockChatAction);

            /** LockChatAction locked. */
            public locked: boolean;

            /**
             * Creates a new LockChatAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns LockChatAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ILockChatAction): SyncAction.SyncActionValue.LockChatAction;

            /**
             * Encodes the specified LockChatAction message. Does not implicitly {@link SyncAction.SyncActionValue.LockChatAction.verify|verify} messages.
             * @param message LockChatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ILockChatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified LockChatAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.LockChatAction.verify|verify} messages.
             * @param message LockChatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ILockChatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a LockChatAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns LockChatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.LockChatAction;

            /**
             * Decodes a LockChatAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns LockChatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.LockChatAction;

            /**
             * Verifies a LockChatAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a LockChatAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns LockChatAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.LockChatAction;

            /**
             * Creates a plain object from a LockChatAction message. Also converts values to other types if specified.
             * @param message LockChatAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.LockChatAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this LockChatAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for LockChatAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a MaibaAIFeaturesControlAction. */
        interface IMaibaAIFeaturesControlAction {

            /** MaibaAIFeaturesControlAction aiFeatureStatus */
            aiFeatureStatus?: (SyncAction.SyncActionValue.MaibaAIFeaturesControlAction.MaibaAIFeatureStatus|null);
        }

        /** Represents a MaibaAIFeaturesControlAction. */
        class MaibaAIFeaturesControlAction implements IMaibaAIFeaturesControlAction {

            /**
             * Constructs a new MaibaAIFeaturesControlAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IMaibaAIFeaturesControlAction);

            /** MaibaAIFeaturesControlAction aiFeatureStatus. */
            public aiFeatureStatus: SyncAction.SyncActionValue.MaibaAIFeaturesControlAction.MaibaAIFeatureStatus;

            /**
             * Creates a new MaibaAIFeaturesControlAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MaibaAIFeaturesControlAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IMaibaAIFeaturesControlAction): SyncAction.SyncActionValue.MaibaAIFeaturesControlAction;

            /**
             * Encodes the specified MaibaAIFeaturesControlAction message. Does not implicitly {@link SyncAction.SyncActionValue.MaibaAIFeaturesControlAction.verify|verify} messages.
             * @param message MaibaAIFeaturesControlAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IMaibaAIFeaturesControlAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MaibaAIFeaturesControlAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.MaibaAIFeaturesControlAction.verify|verify} messages.
             * @param message MaibaAIFeaturesControlAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IMaibaAIFeaturesControlAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MaibaAIFeaturesControlAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MaibaAIFeaturesControlAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.MaibaAIFeaturesControlAction;

            /**
             * Decodes a MaibaAIFeaturesControlAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MaibaAIFeaturesControlAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.MaibaAIFeaturesControlAction;

            /**
             * Verifies a MaibaAIFeaturesControlAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MaibaAIFeaturesControlAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MaibaAIFeaturesControlAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.MaibaAIFeaturesControlAction;

            /**
             * Creates a plain object from a MaibaAIFeaturesControlAction message. Also converts values to other types if specified.
             * @param message MaibaAIFeaturesControlAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.MaibaAIFeaturesControlAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MaibaAIFeaturesControlAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MaibaAIFeaturesControlAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace MaibaAIFeaturesControlAction {

            /** MaibaAIFeatureStatus enum. */
            enum MaibaAIFeatureStatus {
                ENABLED = 0,
                ENABLED_HAS_LEARNING = 1,
                DISABLED = 2
            }
        }

        /** Properties of a MarkChatAsReadAction. */
        interface IMarkChatAsReadAction {

            /** MarkChatAsReadAction read */
            read?: (boolean|null);

            /** MarkChatAsReadAction messageRange */
            messageRange?: (SyncAction.SyncActionValue.ISyncActionMessageRange|null);
        }

        /** Represents a MarkChatAsReadAction. */
        class MarkChatAsReadAction implements IMarkChatAsReadAction {

            /**
             * Constructs a new MarkChatAsReadAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IMarkChatAsReadAction);

            /** MarkChatAsReadAction read. */
            public read: boolean;

            /** MarkChatAsReadAction messageRange. */
            public messageRange?: (SyncAction.SyncActionValue.ISyncActionMessageRange|null);

            /**
             * Creates a new MarkChatAsReadAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MarkChatAsReadAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IMarkChatAsReadAction): SyncAction.SyncActionValue.MarkChatAsReadAction;

            /**
             * Encodes the specified MarkChatAsReadAction message. Does not implicitly {@link SyncAction.SyncActionValue.MarkChatAsReadAction.verify|verify} messages.
             * @param message MarkChatAsReadAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IMarkChatAsReadAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MarkChatAsReadAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.MarkChatAsReadAction.verify|verify} messages.
             * @param message MarkChatAsReadAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IMarkChatAsReadAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MarkChatAsReadAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MarkChatAsReadAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.MarkChatAsReadAction;

            /**
             * Decodes a MarkChatAsReadAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MarkChatAsReadAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.MarkChatAsReadAction;

            /**
             * Verifies a MarkChatAsReadAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MarkChatAsReadAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MarkChatAsReadAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.MarkChatAsReadAction;

            /**
             * Creates a plain object from a MarkChatAsReadAction message. Also converts values to other types if specified.
             * @param message MarkChatAsReadAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.MarkChatAsReadAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MarkChatAsReadAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MarkChatAsReadAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a MarketingMessageAction. */
        interface IMarketingMessageAction {

            /** MarketingMessageAction name */
            name?: (string|null);

            /** MarketingMessageAction message */
            message?: (string|null);

            /** MarketingMessageAction type */
            type?: (SyncAction.SyncActionValue.MarketingMessageAction.MarketingMessagePrototypeType|null);

            /** MarketingMessageAction createdAt */
            createdAt?: (number|Long|null);

            /** MarketingMessageAction lastSentAt */
            lastSentAt?: (number|Long|null);

            /** MarketingMessageAction isDeleted */
            isDeleted?: (boolean|null);

            /** MarketingMessageAction mediaId */
            mediaId?: (string|null);
        }

        /** Represents a MarketingMessageAction. */
        class MarketingMessageAction implements IMarketingMessageAction {

            /**
             * Constructs a new MarketingMessageAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IMarketingMessageAction);

            /** MarketingMessageAction name. */
            public name: string;

            /** MarketingMessageAction message. */
            public message: string;

            /** MarketingMessageAction type. */
            public type: SyncAction.SyncActionValue.MarketingMessageAction.MarketingMessagePrototypeType;

            /** MarketingMessageAction createdAt. */
            public createdAt: (number|Long);

            /** MarketingMessageAction lastSentAt. */
            public lastSentAt: (number|Long);

            /** MarketingMessageAction isDeleted. */
            public isDeleted: boolean;

            /** MarketingMessageAction mediaId. */
            public mediaId: string;

            /**
             * Creates a new MarketingMessageAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MarketingMessageAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IMarketingMessageAction): SyncAction.SyncActionValue.MarketingMessageAction;

            /**
             * Encodes the specified MarketingMessageAction message. Does not implicitly {@link SyncAction.SyncActionValue.MarketingMessageAction.verify|verify} messages.
             * @param message MarketingMessageAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IMarketingMessageAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MarketingMessageAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.MarketingMessageAction.verify|verify} messages.
             * @param message MarketingMessageAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IMarketingMessageAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MarketingMessageAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MarketingMessageAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.MarketingMessageAction;

            /**
             * Decodes a MarketingMessageAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MarketingMessageAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.MarketingMessageAction;

            /**
             * Verifies a MarketingMessageAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MarketingMessageAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MarketingMessageAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.MarketingMessageAction;

            /**
             * Creates a plain object from a MarketingMessageAction message. Also converts values to other types if specified.
             * @param message MarketingMessageAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.MarketingMessageAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MarketingMessageAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MarketingMessageAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace MarketingMessageAction {

            /** MarketingMessagePrototypeType enum. */
            enum MarketingMessagePrototypeType {
                PERSONALIZED = 0
            }
        }

        /** Properties of a MarketingMessageBroadcastAction. */
        interface IMarketingMessageBroadcastAction {

            /** MarketingMessageBroadcastAction repliedCount */
            repliedCount?: (number|null);
        }

        /** Represents a MarketingMessageBroadcastAction. */
        class MarketingMessageBroadcastAction implements IMarketingMessageBroadcastAction {

            /**
             * Constructs a new MarketingMessageBroadcastAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IMarketingMessageBroadcastAction);

            /** MarketingMessageBroadcastAction repliedCount. */
            public repliedCount: number;

            /**
             * Creates a new MarketingMessageBroadcastAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MarketingMessageBroadcastAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IMarketingMessageBroadcastAction): SyncAction.SyncActionValue.MarketingMessageBroadcastAction;

            /**
             * Encodes the specified MarketingMessageBroadcastAction message. Does not implicitly {@link SyncAction.SyncActionValue.MarketingMessageBroadcastAction.verify|verify} messages.
             * @param message MarketingMessageBroadcastAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IMarketingMessageBroadcastAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MarketingMessageBroadcastAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.MarketingMessageBroadcastAction.verify|verify} messages.
             * @param message MarketingMessageBroadcastAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IMarketingMessageBroadcastAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MarketingMessageBroadcastAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MarketingMessageBroadcastAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.MarketingMessageBroadcastAction;

            /**
             * Decodes a MarketingMessageBroadcastAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MarketingMessageBroadcastAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.MarketingMessageBroadcastAction;

            /**
             * Verifies a MarketingMessageBroadcastAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MarketingMessageBroadcastAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MarketingMessageBroadcastAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.MarketingMessageBroadcastAction;

            /**
             * Creates a plain object from a MarketingMessageBroadcastAction message. Also converts values to other types if specified.
             * @param message MarketingMessageBroadcastAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.MarketingMessageBroadcastAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MarketingMessageBroadcastAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MarketingMessageBroadcastAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a MerchantPaymentPartnerAction. */
        interface IMerchantPaymentPartnerAction {

            /** MerchantPaymentPartnerAction status */
            status: SyncAction.SyncActionValue.MerchantPaymentPartnerAction.Status;

            /** MerchantPaymentPartnerAction country */
            country: string;

            /** MerchantPaymentPartnerAction gatewayName */
            gatewayName?: (string|null);

            /** MerchantPaymentPartnerAction credentialId */
            credentialId?: (string|null);
        }

        /** Represents a MerchantPaymentPartnerAction. */
        class MerchantPaymentPartnerAction implements IMerchantPaymentPartnerAction {

            /**
             * Constructs a new MerchantPaymentPartnerAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IMerchantPaymentPartnerAction);

            /** MerchantPaymentPartnerAction status. */
            public status: SyncAction.SyncActionValue.MerchantPaymentPartnerAction.Status;

            /** MerchantPaymentPartnerAction country. */
            public country: string;

            /** MerchantPaymentPartnerAction gatewayName. */
            public gatewayName: string;

            /** MerchantPaymentPartnerAction credentialId. */
            public credentialId: string;

            /**
             * Creates a new MerchantPaymentPartnerAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MerchantPaymentPartnerAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IMerchantPaymentPartnerAction): SyncAction.SyncActionValue.MerchantPaymentPartnerAction;

            /**
             * Encodes the specified MerchantPaymentPartnerAction message. Does not implicitly {@link SyncAction.SyncActionValue.MerchantPaymentPartnerAction.verify|verify} messages.
             * @param message MerchantPaymentPartnerAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IMerchantPaymentPartnerAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MerchantPaymentPartnerAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.MerchantPaymentPartnerAction.verify|verify} messages.
             * @param message MerchantPaymentPartnerAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IMerchantPaymentPartnerAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MerchantPaymentPartnerAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MerchantPaymentPartnerAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.MerchantPaymentPartnerAction;

            /**
             * Decodes a MerchantPaymentPartnerAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MerchantPaymentPartnerAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.MerchantPaymentPartnerAction;

            /**
             * Verifies a MerchantPaymentPartnerAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MerchantPaymentPartnerAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MerchantPaymentPartnerAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.MerchantPaymentPartnerAction;

            /**
             * Creates a plain object from a MerchantPaymentPartnerAction message. Also converts values to other types if specified.
             * @param message MerchantPaymentPartnerAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.MerchantPaymentPartnerAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MerchantPaymentPartnerAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MerchantPaymentPartnerAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace MerchantPaymentPartnerAction {

            /** Status enum. */
            enum Status {
                ACTIVE = 0,
                INACTIVE = 1
            }
        }

        /** Properties of a MusicUserIdAction. */
        interface IMusicUserIdAction {

            /** MusicUserIdAction musicUserId */
            musicUserId?: (string|null);
        }

        /** Represents a MusicUserIdAction. */
        class MusicUserIdAction implements IMusicUserIdAction {

            /**
             * Constructs a new MusicUserIdAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IMusicUserIdAction);

            /** MusicUserIdAction musicUserId. */
            public musicUserId: string;

            /**
             * Creates a new MusicUserIdAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MusicUserIdAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IMusicUserIdAction): SyncAction.SyncActionValue.MusicUserIdAction;

            /**
             * Encodes the specified MusicUserIdAction message. Does not implicitly {@link SyncAction.SyncActionValue.MusicUserIdAction.verify|verify} messages.
             * @param message MusicUserIdAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IMusicUserIdAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MusicUserIdAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.MusicUserIdAction.verify|verify} messages.
             * @param message MusicUserIdAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IMusicUserIdAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MusicUserIdAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MusicUserIdAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.MusicUserIdAction;

            /**
             * Decodes a MusicUserIdAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MusicUserIdAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.MusicUserIdAction;

            /**
             * Verifies a MusicUserIdAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MusicUserIdAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MusicUserIdAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.MusicUserIdAction;

            /**
             * Creates a plain object from a MusicUserIdAction message. Also converts values to other types if specified.
             * @param message MusicUserIdAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.MusicUserIdAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MusicUserIdAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MusicUserIdAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a MuteAction. */
        interface IMuteAction {

            /** MuteAction muted */
            muted?: (boolean|null);

            /** MuteAction muteEndTimestamp */
            muteEndTimestamp?: (number|Long|null);

            /** MuteAction autoMuted */
            autoMuted?: (boolean|null);
        }

        /** Represents a MuteAction. */
        class MuteAction implements IMuteAction {

            /**
             * Constructs a new MuteAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IMuteAction);

            /** MuteAction muted. */
            public muted: boolean;

            /** MuteAction muteEndTimestamp. */
            public muteEndTimestamp: (number|Long);

            /** MuteAction autoMuted. */
            public autoMuted: boolean;

            /**
             * Creates a new MuteAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MuteAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IMuteAction): SyncAction.SyncActionValue.MuteAction;

            /**
             * Encodes the specified MuteAction message. Does not implicitly {@link SyncAction.SyncActionValue.MuteAction.verify|verify} messages.
             * @param message MuteAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IMuteAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MuteAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.MuteAction.verify|verify} messages.
             * @param message MuteAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IMuteAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MuteAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MuteAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.MuteAction;

            /**
             * Decodes a MuteAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MuteAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.MuteAction;

            /**
             * Verifies a MuteAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MuteAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MuteAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.MuteAction;

            /**
             * Creates a plain object from a MuteAction message. Also converts values to other types if specified.
             * @param message MuteAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.MuteAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MuteAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MuteAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a NoteEditAction. */
        interface INoteEditAction {

            /** NoteEditAction type */
            type?: (SyncAction.SyncActionValue.NoteEditAction.NoteType|null);

            /** NoteEditAction chatJid */
            chatJid?: (string|null);

            /** NoteEditAction createdAt */
            createdAt?: (number|Long|null);

            /** NoteEditAction deleted */
            deleted?: (boolean|null);

            /** NoteEditAction unstructuredContent */
            unstructuredContent?: (string|null);
        }

        /** Represents a NoteEditAction. */
        class NoteEditAction implements INoteEditAction {

            /**
             * Constructs a new NoteEditAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.INoteEditAction);

            /** NoteEditAction type. */
            public type: SyncAction.SyncActionValue.NoteEditAction.NoteType;

            /** NoteEditAction chatJid. */
            public chatJid: string;

            /** NoteEditAction createdAt. */
            public createdAt: (number|Long);

            /** NoteEditAction deleted. */
            public deleted: boolean;

            /** NoteEditAction unstructuredContent. */
            public unstructuredContent: string;

            /**
             * Creates a new NoteEditAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns NoteEditAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.INoteEditAction): SyncAction.SyncActionValue.NoteEditAction;

            /**
             * Encodes the specified NoteEditAction message. Does not implicitly {@link SyncAction.SyncActionValue.NoteEditAction.verify|verify} messages.
             * @param message NoteEditAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.INoteEditAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified NoteEditAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.NoteEditAction.verify|verify} messages.
             * @param message NoteEditAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.INoteEditAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a NoteEditAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns NoteEditAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.NoteEditAction;

            /**
             * Decodes a NoteEditAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns NoteEditAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.NoteEditAction;

            /**
             * Verifies a NoteEditAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a NoteEditAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns NoteEditAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.NoteEditAction;

            /**
             * Creates a plain object from a NoteEditAction message. Also converts values to other types if specified.
             * @param message NoteEditAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.NoteEditAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this NoteEditAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for NoteEditAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace NoteEditAction {

            /** NoteType enum. */
            enum NoteType {
                UNSTRUCTURED = 1,
                STRUCTURED = 2
            }
        }

        /** Properties of a NotificationActivitySettingAction. */
        interface INotificationActivitySettingAction {

            /** NotificationActivitySettingAction notificationActivitySetting */
            notificationActivitySetting?: (SyncAction.SyncActionValue.NotificationActivitySettingAction.NotificationActivitySetting|null);
        }

        /** Represents a NotificationActivitySettingAction. */
        class NotificationActivitySettingAction implements INotificationActivitySettingAction {

            /**
             * Constructs a new NotificationActivitySettingAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.INotificationActivitySettingAction);

            /** NotificationActivitySettingAction notificationActivitySetting. */
            public notificationActivitySetting: SyncAction.SyncActionValue.NotificationActivitySettingAction.NotificationActivitySetting;

            /**
             * Creates a new NotificationActivitySettingAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns NotificationActivitySettingAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.INotificationActivitySettingAction): SyncAction.SyncActionValue.NotificationActivitySettingAction;

            /**
             * Encodes the specified NotificationActivitySettingAction message. Does not implicitly {@link SyncAction.SyncActionValue.NotificationActivitySettingAction.verify|verify} messages.
             * @param message NotificationActivitySettingAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.INotificationActivitySettingAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified NotificationActivitySettingAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.NotificationActivitySettingAction.verify|verify} messages.
             * @param message NotificationActivitySettingAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.INotificationActivitySettingAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a NotificationActivitySettingAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns NotificationActivitySettingAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.NotificationActivitySettingAction;

            /**
             * Decodes a NotificationActivitySettingAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns NotificationActivitySettingAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.NotificationActivitySettingAction;

            /**
             * Verifies a NotificationActivitySettingAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a NotificationActivitySettingAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns NotificationActivitySettingAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.NotificationActivitySettingAction;

            /**
             * Creates a plain object from a NotificationActivitySettingAction message. Also converts values to other types if specified.
             * @param message NotificationActivitySettingAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.NotificationActivitySettingAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this NotificationActivitySettingAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for NotificationActivitySettingAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace NotificationActivitySettingAction {

            /** NotificationActivitySetting enum. */
            enum NotificationActivitySetting {
                DEFAULT_ALL_MESSAGES = 0,
                ALL_MESSAGES = 1,
                HIGHLIGHTS = 2,
                DEFAULT_HIGHLIGHTS = 3
            }
        }

        /** Properties of a NuxAction. */
        interface INuxAction {

            /** NuxAction acknowledged */
            acknowledged?: (boolean|null);
        }

        /** Represents a NuxAction. */
        class NuxAction implements INuxAction {

            /**
             * Constructs a new NuxAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.INuxAction);

            /** NuxAction acknowledged. */
            public acknowledged: boolean;

            /**
             * Creates a new NuxAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns NuxAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.INuxAction): SyncAction.SyncActionValue.NuxAction;

            /**
             * Encodes the specified NuxAction message. Does not implicitly {@link SyncAction.SyncActionValue.NuxAction.verify|verify} messages.
             * @param message NuxAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.INuxAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified NuxAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.NuxAction.verify|verify} messages.
             * @param message NuxAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.INuxAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a NuxAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns NuxAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.NuxAction;

            /**
             * Decodes a NuxAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns NuxAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.NuxAction;

            /**
             * Verifies a NuxAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a NuxAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns NuxAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.NuxAction;

            /**
             * Creates a plain object from a NuxAction message. Also converts values to other types if specified.
             * @param message NuxAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.NuxAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this NuxAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for NuxAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PaymentInfoAction. */
        interface IPaymentInfoAction {

            /** PaymentInfoAction cpi */
            cpi?: (string|null);
        }

        /** Represents a PaymentInfoAction. */
        class PaymentInfoAction implements IPaymentInfoAction {

            /**
             * Constructs a new PaymentInfoAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IPaymentInfoAction);

            /** PaymentInfoAction cpi. */
            public cpi: string;

            /**
             * Creates a new PaymentInfoAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PaymentInfoAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IPaymentInfoAction): SyncAction.SyncActionValue.PaymentInfoAction;

            /**
             * Encodes the specified PaymentInfoAction message. Does not implicitly {@link SyncAction.SyncActionValue.PaymentInfoAction.verify|verify} messages.
             * @param message PaymentInfoAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IPaymentInfoAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PaymentInfoAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.PaymentInfoAction.verify|verify} messages.
             * @param message PaymentInfoAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IPaymentInfoAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PaymentInfoAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PaymentInfoAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.PaymentInfoAction;

            /**
             * Decodes a PaymentInfoAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PaymentInfoAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.PaymentInfoAction;

            /**
             * Verifies a PaymentInfoAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PaymentInfoAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PaymentInfoAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.PaymentInfoAction;

            /**
             * Creates a plain object from a PaymentInfoAction message. Also converts values to other types if specified.
             * @param message PaymentInfoAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.PaymentInfoAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PaymentInfoAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PaymentInfoAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PaymentTosAction. */
        interface IPaymentTosAction {

            /** PaymentTosAction paymentNotice */
            paymentNotice: SyncAction.SyncActionValue.PaymentTosAction.PaymentNotice;

            /** PaymentTosAction accepted */
            accepted: boolean;
        }

        /** Represents a PaymentTosAction. */
        class PaymentTosAction implements IPaymentTosAction {

            /**
             * Constructs a new PaymentTosAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IPaymentTosAction);

            /** PaymentTosAction paymentNotice. */
            public paymentNotice: SyncAction.SyncActionValue.PaymentTosAction.PaymentNotice;

            /** PaymentTosAction accepted. */
            public accepted: boolean;

            /**
             * Creates a new PaymentTosAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PaymentTosAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IPaymentTosAction): SyncAction.SyncActionValue.PaymentTosAction;

            /**
             * Encodes the specified PaymentTosAction message. Does not implicitly {@link SyncAction.SyncActionValue.PaymentTosAction.verify|verify} messages.
             * @param message PaymentTosAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IPaymentTosAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PaymentTosAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.PaymentTosAction.verify|verify} messages.
             * @param message PaymentTosAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IPaymentTosAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PaymentTosAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PaymentTosAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.PaymentTosAction;

            /**
             * Decodes a PaymentTosAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PaymentTosAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.PaymentTosAction;

            /**
             * Verifies a PaymentTosAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PaymentTosAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PaymentTosAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.PaymentTosAction;

            /**
             * Creates a plain object from a PaymentTosAction message. Also converts values to other types if specified.
             * @param message PaymentTosAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.PaymentTosAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PaymentTosAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PaymentTosAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace PaymentTosAction {

            /** PaymentNotice enum. */
            enum PaymentNotice {
                BR_PAY_PRIVACY_POLICY = 0
            }
        }

        /** Properties of a PinAction. */
        interface IPinAction {

            /** PinAction pinned */
            pinned?: (boolean|null);
        }

        /** Represents a PinAction. */
        class PinAction implements IPinAction {

            /**
             * Constructs a new PinAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IPinAction);

            /** PinAction pinned. */
            public pinned: boolean;

            /**
             * Creates a new PinAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PinAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IPinAction): SyncAction.SyncActionValue.PinAction;

            /**
             * Encodes the specified PinAction message. Does not implicitly {@link SyncAction.SyncActionValue.PinAction.verify|verify} messages.
             * @param message PinAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IPinAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PinAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.PinAction.verify|verify} messages.
             * @param message PinAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IPinAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PinAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PinAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.PinAction;

            /**
             * Decodes a PinAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PinAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.PinAction;

            /**
             * Verifies a PinAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PinAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PinAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.PinAction;

            /**
             * Creates a plain object from a PinAction message. Also converts values to other types if specified.
             * @param message PinAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.PinAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PinAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PinAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PnForLidChatAction. */
        interface IPnForLidChatAction {

            /** PnForLidChatAction pnJid */
            pnJid?: (string|null);
        }

        /** Represents a PnForLidChatAction. */
        class PnForLidChatAction implements IPnForLidChatAction {

            /**
             * Constructs a new PnForLidChatAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IPnForLidChatAction);

            /** PnForLidChatAction pnJid. */
            public pnJid: string;

            /**
             * Creates a new PnForLidChatAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PnForLidChatAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IPnForLidChatAction): SyncAction.SyncActionValue.PnForLidChatAction;

            /**
             * Encodes the specified PnForLidChatAction message. Does not implicitly {@link SyncAction.SyncActionValue.PnForLidChatAction.verify|verify} messages.
             * @param message PnForLidChatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IPnForLidChatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PnForLidChatAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.PnForLidChatAction.verify|verify} messages.
             * @param message PnForLidChatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IPnForLidChatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PnForLidChatAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PnForLidChatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.PnForLidChatAction;

            /**
             * Decodes a PnForLidChatAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PnForLidChatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.PnForLidChatAction;

            /**
             * Verifies a PnForLidChatAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PnForLidChatAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PnForLidChatAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.PnForLidChatAction;

            /**
             * Creates a plain object from a PnForLidChatAction message. Also converts values to other types if specified.
             * @param message PnForLidChatAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.PnForLidChatAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PnForLidChatAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PnForLidChatAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PrimaryFeature. */
        interface IPrimaryFeature {

            /** PrimaryFeature flags */
            flags?: (string[]|null);
        }

        /** Represents a PrimaryFeature. */
        class PrimaryFeature implements IPrimaryFeature {

            /**
             * Constructs a new PrimaryFeature.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IPrimaryFeature);

            /** PrimaryFeature flags. */
            public flags: string[];

            /**
             * Creates a new PrimaryFeature instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PrimaryFeature instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IPrimaryFeature): SyncAction.SyncActionValue.PrimaryFeature;

            /**
             * Encodes the specified PrimaryFeature message. Does not implicitly {@link SyncAction.SyncActionValue.PrimaryFeature.verify|verify} messages.
             * @param message PrimaryFeature message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IPrimaryFeature, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PrimaryFeature message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.PrimaryFeature.verify|verify} messages.
             * @param message PrimaryFeature message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IPrimaryFeature, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PrimaryFeature message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PrimaryFeature
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.PrimaryFeature;

            /**
             * Decodes a PrimaryFeature message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PrimaryFeature
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.PrimaryFeature;

            /**
             * Verifies a PrimaryFeature message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PrimaryFeature message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PrimaryFeature
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.PrimaryFeature;

            /**
             * Creates a plain object from a PrimaryFeature message. Also converts values to other types if specified.
             * @param message PrimaryFeature
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.PrimaryFeature, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PrimaryFeature to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PrimaryFeature
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PrimaryVersionAction. */
        interface IPrimaryVersionAction {

            /** PrimaryVersionAction version */
            version?: (string|null);
        }

        /** Represents a PrimaryVersionAction. */
        class PrimaryVersionAction implements IPrimaryVersionAction {

            /**
             * Constructs a new PrimaryVersionAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IPrimaryVersionAction);

            /** PrimaryVersionAction version. */
            public version: string;

            /**
             * Creates a new PrimaryVersionAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PrimaryVersionAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IPrimaryVersionAction): SyncAction.SyncActionValue.PrimaryVersionAction;

            /**
             * Encodes the specified PrimaryVersionAction message. Does not implicitly {@link SyncAction.SyncActionValue.PrimaryVersionAction.verify|verify} messages.
             * @param message PrimaryVersionAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IPrimaryVersionAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PrimaryVersionAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.PrimaryVersionAction.verify|verify} messages.
             * @param message PrimaryVersionAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IPrimaryVersionAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PrimaryVersionAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PrimaryVersionAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.PrimaryVersionAction;

            /**
             * Decodes a PrimaryVersionAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PrimaryVersionAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.PrimaryVersionAction;

            /**
             * Verifies a PrimaryVersionAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PrimaryVersionAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PrimaryVersionAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.PrimaryVersionAction;

            /**
             * Creates a plain object from a PrimaryVersionAction message. Also converts values to other types if specified.
             * @param message PrimaryVersionAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.PrimaryVersionAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PrimaryVersionAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PrimaryVersionAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PrivacySettingChannelsPersonalisedRecommendationAction. */
        interface IPrivacySettingChannelsPersonalisedRecommendationAction {

            /** PrivacySettingChannelsPersonalisedRecommendationAction isUserOptedOut */
            isUserOptedOut?: (boolean|null);
        }

        /** Represents a PrivacySettingChannelsPersonalisedRecommendationAction. */
        class PrivacySettingChannelsPersonalisedRecommendationAction implements IPrivacySettingChannelsPersonalisedRecommendationAction {

            /**
             * Constructs a new PrivacySettingChannelsPersonalisedRecommendationAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction);

            /** PrivacySettingChannelsPersonalisedRecommendationAction isUserOptedOut. */
            public isUserOptedOut: boolean;

            /**
             * Creates a new PrivacySettingChannelsPersonalisedRecommendationAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PrivacySettingChannelsPersonalisedRecommendationAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction): SyncAction.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction;

            /**
             * Encodes the specified PrivacySettingChannelsPersonalisedRecommendationAction message. Does not implicitly {@link SyncAction.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction.verify|verify} messages.
             * @param message PrivacySettingChannelsPersonalisedRecommendationAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PrivacySettingChannelsPersonalisedRecommendationAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction.verify|verify} messages.
             * @param message PrivacySettingChannelsPersonalisedRecommendationAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PrivacySettingChannelsPersonalisedRecommendationAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PrivacySettingChannelsPersonalisedRecommendationAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction;

            /**
             * Decodes a PrivacySettingChannelsPersonalisedRecommendationAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PrivacySettingChannelsPersonalisedRecommendationAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction;

            /**
             * Verifies a PrivacySettingChannelsPersonalisedRecommendationAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PrivacySettingChannelsPersonalisedRecommendationAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PrivacySettingChannelsPersonalisedRecommendationAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction;

            /**
             * Creates a plain object from a PrivacySettingChannelsPersonalisedRecommendationAction message. Also converts values to other types if specified.
             * @param message PrivacySettingChannelsPersonalisedRecommendationAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PrivacySettingChannelsPersonalisedRecommendationAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PrivacySettingChannelsPersonalisedRecommendationAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PrivacySettingDisableLinkPreviewsAction. */
        interface IPrivacySettingDisableLinkPreviewsAction {

            /** PrivacySettingDisableLinkPreviewsAction isPreviewsDisabled */
            isPreviewsDisabled?: (boolean|null);
        }

        /** Represents a PrivacySettingDisableLinkPreviewsAction. */
        class PrivacySettingDisableLinkPreviewsAction implements IPrivacySettingDisableLinkPreviewsAction {

            /**
             * Constructs a new PrivacySettingDisableLinkPreviewsAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction);

            /** PrivacySettingDisableLinkPreviewsAction isPreviewsDisabled. */
            public isPreviewsDisabled: boolean;

            /**
             * Creates a new PrivacySettingDisableLinkPreviewsAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PrivacySettingDisableLinkPreviewsAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction): SyncAction.SyncActionValue.PrivacySettingDisableLinkPreviewsAction;

            /**
             * Encodes the specified PrivacySettingDisableLinkPreviewsAction message. Does not implicitly {@link SyncAction.SyncActionValue.PrivacySettingDisableLinkPreviewsAction.verify|verify} messages.
             * @param message PrivacySettingDisableLinkPreviewsAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PrivacySettingDisableLinkPreviewsAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.PrivacySettingDisableLinkPreviewsAction.verify|verify} messages.
             * @param message PrivacySettingDisableLinkPreviewsAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PrivacySettingDisableLinkPreviewsAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PrivacySettingDisableLinkPreviewsAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.PrivacySettingDisableLinkPreviewsAction;

            /**
             * Decodes a PrivacySettingDisableLinkPreviewsAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PrivacySettingDisableLinkPreviewsAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.PrivacySettingDisableLinkPreviewsAction;

            /**
             * Verifies a PrivacySettingDisableLinkPreviewsAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PrivacySettingDisableLinkPreviewsAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PrivacySettingDisableLinkPreviewsAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.PrivacySettingDisableLinkPreviewsAction;

            /**
             * Creates a plain object from a PrivacySettingDisableLinkPreviewsAction message. Also converts values to other types if specified.
             * @param message PrivacySettingDisableLinkPreviewsAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.PrivacySettingDisableLinkPreviewsAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PrivacySettingDisableLinkPreviewsAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PrivacySettingDisableLinkPreviewsAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PrivacySettingRelayAllCalls. */
        interface IPrivacySettingRelayAllCalls {

            /** PrivacySettingRelayAllCalls isEnabled */
            isEnabled?: (boolean|null);
        }

        /** Represents a PrivacySettingRelayAllCalls. */
        class PrivacySettingRelayAllCalls implements IPrivacySettingRelayAllCalls {

            /**
             * Constructs a new PrivacySettingRelayAllCalls.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IPrivacySettingRelayAllCalls);

            /** PrivacySettingRelayAllCalls isEnabled. */
            public isEnabled: boolean;

            /**
             * Creates a new PrivacySettingRelayAllCalls instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PrivacySettingRelayAllCalls instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IPrivacySettingRelayAllCalls): SyncAction.SyncActionValue.PrivacySettingRelayAllCalls;

            /**
             * Encodes the specified PrivacySettingRelayAllCalls message. Does not implicitly {@link SyncAction.SyncActionValue.PrivacySettingRelayAllCalls.verify|verify} messages.
             * @param message PrivacySettingRelayAllCalls message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IPrivacySettingRelayAllCalls, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PrivacySettingRelayAllCalls message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.PrivacySettingRelayAllCalls.verify|verify} messages.
             * @param message PrivacySettingRelayAllCalls message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IPrivacySettingRelayAllCalls, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PrivacySettingRelayAllCalls message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PrivacySettingRelayAllCalls
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.PrivacySettingRelayAllCalls;

            /**
             * Decodes a PrivacySettingRelayAllCalls message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PrivacySettingRelayAllCalls
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.PrivacySettingRelayAllCalls;

            /**
             * Verifies a PrivacySettingRelayAllCalls message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PrivacySettingRelayAllCalls message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PrivacySettingRelayAllCalls
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.PrivacySettingRelayAllCalls;

            /**
             * Creates a plain object from a PrivacySettingRelayAllCalls message. Also converts values to other types if specified.
             * @param message PrivacySettingRelayAllCalls
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.PrivacySettingRelayAllCalls, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PrivacySettingRelayAllCalls to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PrivacySettingRelayAllCalls
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PushNameSetting. */
        interface IPushNameSetting {

            /** PushNameSetting name */
            name?: (string|null);
        }

        /** Represents a PushNameSetting. */
        class PushNameSetting implements IPushNameSetting {

            /**
             * Constructs a new PushNameSetting.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IPushNameSetting);

            /** PushNameSetting name. */
            public name: string;

            /**
             * Creates a new PushNameSetting instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PushNameSetting instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IPushNameSetting): SyncAction.SyncActionValue.PushNameSetting;

            /**
             * Encodes the specified PushNameSetting message. Does not implicitly {@link SyncAction.SyncActionValue.PushNameSetting.verify|verify} messages.
             * @param message PushNameSetting message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IPushNameSetting, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PushNameSetting message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.PushNameSetting.verify|verify} messages.
             * @param message PushNameSetting message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IPushNameSetting, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PushNameSetting message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PushNameSetting
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.PushNameSetting;

            /**
             * Decodes a PushNameSetting message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PushNameSetting
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.PushNameSetting;

            /**
             * Verifies a PushNameSetting message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PushNameSetting message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PushNameSetting
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.PushNameSetting;

            /**
             * Creates a plain object from a PushNameSetting message. Also converts values to other types if specified.
             * @param message PushNameSetting
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.PushNameSetting, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PushNameSetting to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PushNameSetting
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a QuickReplyAction. */
        interface IQuickReplyAction {

            /** QuickReplyAction shortcut */
            shortcut?: (string|null);

            /** QuickReplyAction message */
            message?: (string|null);

            /** QuickReplyAction keywords */
            keywords?: (string[]|null);

            /** QuickReplyAction count */
            count?: (number|null);

            /** QuickReplyAction deleted */
            deleted?: (boolean|null);
        }

        /** Represents a QuickReplyAction. */
        class QuickReplyAction implements IQuickReplyAction {

            /**
             * Constructs a new QuickReplyAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IQuickReplyAction);

            /** QuickReplyAction shortcut. */
            public shortcut: string;

            /** QuickReplyAction message. */
            public message: string;

            /** QuickReplyAction keywords. */
            public keywords: string[];

            /** QuickReplyAction count. */
            public count: number;

            /** QuickReplyAction deleted. */
            public deleted: boolean;

            /**
             * Creates a new QuickReplyAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns QuickReplyAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IQuickReplyAction): SyncAction.SyncActionValue.QuickReplyAction;

            /**
             * Encodes the specified QuickReplyAction message. Does not implicitly {@link SyncAction.SyncActionValue.QuickReplyAction.verify|verify} messages.
             * @param message QuickReplyAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IQuickReplyAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified QuickReplyAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.QuickReplyAction.verify|verify} messages.
             * @param message QuickReplyAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IQuickReplyAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a QuickReplyAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns QuickReplyAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.QuickReplyAction;

            /**
             * Decodes a QuickReplyAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns QuickReplyAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.QuickReplyAction;

            /**
             * Verifies a QuickReplyAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a QuickReplyAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns QuickReplyAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.QuickReplyAction;

            /**
             * Creates a plain object from a QuickReplyAction message. Also converts values to other types if specified.
             * @param message QuickReplyAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.QuickReplyAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this QuickReplyAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for QuickReplyAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a RecentEmojiWeightsAction. */
        interface IRecentEmojiWeightsAction {

            /** RecentEmojiWeightsAction weights */
            weights?: (SyncAction.IRecentEmojiWeight[]|null);
        }

        /** Represents a RecentEmojiWeightsAction. */
        class RecentEmojiWeightsAction implements IRecentEmojiWeightsAction {

            /**
             * Constructs a new RecentEmojiWeightsAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IRecentEmojiWeightsAction);

            /** RecentEmojiWeightsAction weights. */
            public weights: SyncAction.IRecentEmojiWeight[];

            /**
             * Creates a new RecentEmojiWeightsAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns RecentEmojiWeightsAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IRecentEmojiWeightsAction): SyncAction.SyncActionValue.RecentEmojiWeightsAction;

            /**
             * Encodes the specified RecentEmojiWeightsAction message. Does not implicitly {@link SyncAction.SyncActionValue.RecentEmojiWeightsAction.verify|verify} messages.
             * @param message RecentEmojiWeightsAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IRecentEmojiWeightsAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified RecentEmojiWeightsAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.RecentEmojiWeightsAction.verify|verify} messages.
             * @param message RecentEmojiWeightsAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IRecentEmojiWeightsAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a RecentEmojiWeightsAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns RecentEmojiWeightsAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.RecentEmojiWeightsAction;

            /**
             * Decodes a RecentEmojiWeightsAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns RecentEmojiWeightsAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.RecentEmojiWeightsAction;

            /**
             * Verifies a RecentEmojiWeightsAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a RecentEmojiWeightsAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns RecentEmojiWeightsAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.RecentEmojiWeightsAction;

            /**
             * Creates a plain object from a RecentEmojiWeightsAction message. Also converts values to other types if specified.
             * @param message RecentEmojiWeightsAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.RecentEmojiWeightsAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this RecentEmojiWeightsAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for RecentEmojiWeightsAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a RemoveRecentStickerAction. */
        interface IRemoveRecentStickerAction {

            /** RemoveRecentStickerAction lastStickerSentTs */
            lastStickerSentTs?: (number|Long|null);
        }

        /** Represents a RemoveRecentStickerAction. */
        class RemoveRecentStickerAction implements IRemoveRecentStickerAction {

            /**
             * Constructs a new RemoveRecentStickerAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IRemoveRecentStickerAction);

            /** RemoveRecentStickerAction lastStickerSentTs. */
            public lastStickerSentTs: (number|Long);

            /**
             * Creates a new RemoveRecentStickerAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns RemoveRecentStickerAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IRemoveRecentStickerAction): SyncAction.SyncActionValue.RemoveRecentStickerAction;

            /**
             * Encodes the specified RemoveRecentStickerAction message. Does not implicitly {@link SyncAction.SyncActionValue.RemoveRecentStickerAction.verify|verify} messages.
             * @param message RemoveRecentStickerAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IRemoveRecentStickerAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified RemoveRecentStickerAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.RemoveRecentStickerAction.verify|verify} messages.
             * @param message RemoveRecentStickerAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IRemoveRecentStickerAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a RemoveRecentStickerAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns RemoveRecentStickerAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.RemoveRecentStickerAction;

            /**
             * Decodes a RemoveRecentStickerAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns RemoveRecentStickerAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.RemoveRecentStickerAction;

            /**
             * Verifies a RemoveRecentStickerAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a RemoveRecentStickerAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns RemoveRecentStickerAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.RemoveRecentStickerAction;

            /**
             * Creates a plain object from a RemoveRecentStickerAction message. Also converts values to other types if specified.
             * @param message RemoveRecentStickerAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.RemoveRecentStickerAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this RemoveRecentStickerAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for RemoveRecentStickerAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a SecurityNotificationSetting. */
        interface ISecurityNotificationSetting {

            /** SecurityNotificationSetting showNotification */
            showNotification?: (boolean|null);
        }

        /** Represents a SecurityNotificationSetting. */
        class SecurityNotificationSetting implements ISecurityNotificationSetting {

            /**
             * Constructs a new SecurityNotificationSetting.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ISecurityNotificationSetting);

            /** SecurityNotificationSetting showNotification. */
            public showNotification: boolean;

            /**
             * Creates a new SecurityNotificationSetting instance using the specified properties.
             * @param [properties] Properties to set
             * @returns SecurityNotificationSetting instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ISecurityNotificationSetting): SyncAction.SyncActionValue.SecurityNotificationSetting;

            /**
             * Encodes the specified SecurityNotificationSetting message. Does not implicitly {@link SyncAction.SyncActionValue.SecurityNotificationSetting.verify|verify} messages.
             * @param message SecurityNotificationSetting message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ISecurityNotificationSetting, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified SecurityNotificationSetting message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.SecurityNotificationSetting.verify|verify} messages.
             * @param message SecurityNotificationSetting message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ISecurityNotificationSetting, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a SecurityNotificationSetting message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns SecurityNotificationSetting
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.SecurityNotificationSetting;

            /**
             * Decodes a SecurityNotificationSetting message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns SecurityNotificationSetting
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.SecurityNotificationSetting;

            /**
             * Verifies a SecurityNotificationSetting message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a SecurityNotificationSetting message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns SecurityNotificationSetting
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.SecurityNotificationSetting;

            /**
             * Creates a plain object from a SecurityNotificationSetting message. Also converts values to other types if specified.
             * @param message SecurityNotificationSetting
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.SecurityNotificationSetting, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this SecurityNotificationSetting to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for SecurityNotificationSetting
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a StarAction. */
        interface IStarAction {

            /** StarAction starred */
            starred?: (boolean|null);
        }

        /** Represents a StarAction. */
        class StarAction implements IStarAction {

            /**
             * Constructs a new StarAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IStarAction);

            /** StarAction starred. */
            public starred: boolean;

            /**
             * Creates a new StarAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StarAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IStarAction): SyncAction.SyncActionValue.StarAction;

            /**
             * Encodes the specified StarAction message. Does not implicitly {@link SyncAction.SyncActionValue.StarAction.verify|verify} messages.
             * @param message StarAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IStarAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StarAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.StarAction.verify|verify} messages.
             * @param message StarAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IStarAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StarAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StarAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.StarAction;

            /**
             * Decodes a StarAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StarAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.StarAction;

            /**
             * Verifies a StarAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StarAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StarAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.StarAction;

            /**
             * Creates a plain object from a StarAction message. Also converts values to other types if specified.
             * @param message StarAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.StarAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StarAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StarAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a StatusPostOptInNotificationPreferencesAction. */
        interface IStatusPostOptInNotificationPreferencesAction {

            /** StatusPostOptInNotificationPreferencesAction enabled */
            enabled?: (boolean|null);
        }

        /** Represents a StatusPostOptInNotificationPreferencesAction. */
        class StatusPostOptInNotificationPreferencesAction implements IStatusPostOptInNotificationPreferencesAction {

            /**
             * Constructs a new StatusPostOptInNotificationPreferencesAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IStatusPostOptInNotificationPreferencesAction);

            /** StatusPostOptInNotificationPreferencesAction enabled. */
            public enabled: boolean;

            /**
             * Creates a new StatusPostOptInNotificationPreferencesAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StatusPostOptInNotificationPreferencesAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IStatusPostOptInNotificationPreferencesAction): SyncAction.SyncActionValue.StatusPostOptInNotificationPreferencesAction;

            /**
             * Encodes the specified StatusPostOptInNotificationPreferencesAction message. Does not implicitly {@link SyncAction.SyncActionValue.StatusPostOptInNotificationPreferencesAction.verify|verify} messages.
             * @param message StatusPostOptInNotificationPreferencesAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IStatusPostOptInNotificationPreferencesAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StatusPostOptInNotificationPreferencesAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.StatusPostOptInNotificationPreferencesAction.verify|verify} messages.
             * @param message StatusPostOptInNotificationPreferencesAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IStatusPostOptInNotificationPreferencesAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StatusPostOptInNotificationPreferencesAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StatusPostOptInNotificationPreferencesAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.StatusPostOptInNotificationPreferencesAction;

            /**
             * Decodes a StatusPostOptInNotificationPreferencesAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StatusPostOptInNotificationPreferencesAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.StatusPostOptInNotificationPreferencesAction;

            /**
             * Verifies a StatusPostOptInNotificationPreferencesAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StatusPostOptInNotificationPreferencesAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StatusPostOptInNotificationPreferencesAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.StatusPostOptInNotificationPreferencesAction;

            /**
             * Creates a plain object from a StatusPostOptInNotificationPreferencesAction message. Also converts values to other types if specified.
             * @param message StatusPostOptInNotificationPreferencesAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.StatusPostOptInNotificationPreferencesAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StatusPostOptInNotificationPreferencesAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StatusPostOptInNotificationPreferencesAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a StatusPrivacyAction. */
        interface IStatusPrivacyAction {

            /** StatusPrivacyAction mode */
            mode?: (SyncAction.SyncActionValue.StatusPrivacyAction.StatusDistributionMode|null);

            /** StatusPrivacyAction userJid */
            userJid?: (string[]|null);
        }

        /** Represents a StatusPrivacyAction. */
        class StatusPrivacyAction implements IStatusPrivacyAction {

            /**
             * Constructs a new StatusPrivacyAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IStatusPrivacyAction);

            /** StatusPrivacyAction mode. */
            public mode: SyncAction.SyncActionValue.StatusPrivacyAction.StatusDistributionMode;

            /** StatusPrivacyAction userJid. */
            public userJid: string[];

            /**
             * Creates a new StatusPrivacyAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StatusPrivacyAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IStatusPrivacyAction): SyncAction.SyncActionValue.StatusPrivacyAction;

            /**
             * Encodes the specified StatusPrivacyAction message. Does not implicitly {@link SyncAction.SyncActionValue.StatusPrivacyAction.verify|verify} messages.
             * @param message StatusPrivacyAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IStatusPrivacyAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StatusPrivacyAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.StatusPrivacyAction.verify|verify} messages.
             * @param message StatusPrivacyAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IStatusPrivacyAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StatusPrivacyAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StatusPrivacyAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.StatusPrivacyAction;

            /**
             * Decodes a StatusPrivacyAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StatusPrivacyAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.StatusPrivacyAction;

            /**
             * Verifies a StatusPrivacyAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StatusPrivacyAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StatusPrivacyAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.StatusPrivacyAction;

            /**
             * Creates a plain object from a StatusPrivacyAction message. Also converts values to other types if specified.
             * @param message StatusPrivacyAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.StatusPrivacyAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StatusPrivacyAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StatusPrivacyAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace StatusPrivacyAction {

            /** StatusDistributionMode enum. */
            enum StatusDistributionMode {
                ALLOW_LIST = 0,
                DENY_LIST = 1,
                CONTACTS = 2
            }
        }

        /** Properties of a StickerAction. */
        interface IStickerAction {

            /** StickerAction url */
            url?: (string|null);

            /** StickerAction fileEncSha256 */
            fileEncSha256?: (Uint8Array|null);

            /** StickerAction mediaKey */
            mediaKey?: (Uint8Array|null);

            /** StickerAction mimetype */
            mimetype?: (string|null);

            /** StickerAction height */
            height?: (number|null);

            /** StickerAction width */
            width?: (number|null);

            /** StickerAction directPath */
            directPath?: (string|null);

            /** StickerAction fileLength */
            fileLength?: (number|Long|null);

            /** StickerAction isFavorite */
            isFavorite?: (boolean|null);

            /** StickerAction deviceIdHint */
            deviceIdHint?: (number|null);

            /** StickerAction isLottie */
            isLottie?: (boolean|null);

            /** StickerAction imageHash */
            imageHash?: (string|null);

            /** StickerAction isAvatarSticker */
            isAvatarSticker?: (boolean|null);
        }

        /** Represents a StickerAction. */
        class StickerAction implements IStickerAction {

            /**
             * Constructs a new StickerAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IStickerAction);

            /** StickerAction url. */
            public url: string;

            /** StickerAction fileEncSha256. */
            public fileEncSha256: Uint8Array;

            /** StickerAction mediaKey. */
            public mediaKey: Uint8Array;

            /** StickerAction mimetype. */
            public mimetype: string;

            /** StickerAction height. */
            public height: number;

            /** StickerAction width. */
            public width: number;

            /** StickerAction directPath. */
            public directPath: string;

            /** StickerAction fileLength. */
            public fileLength: (number|Long);

            /** StickerAction isFavorite. */
            public isFavorite: boolean;

            /** StickerAction deviceIdHint. */
            public deviceIdHint: number;

            /** StickerAction isLottie. */
            public isLottie: boolean;

            /** StickerAction imageHash. */
            public imageHash: string;

            /** StickerAction isAvatarSticker. */
            public isAvatarSticker: boolean;

            /**
             * Creates a new StickerAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns StickerAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IStickerAction): SyncAction.SyncActionValue.StickerAction;

            /**
             * Encodes the specified StickerAction message. Does not implicitly {@link SyncAction.SyncActionValue.StickerAction.verify|verify} messages.
             * @param message StickerAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IStickerAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified StickerAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.StickerAction.verify|verify} messages.
             * @param message StickerAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IStickerAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a StickerAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns StickerAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.StickerAction;

            /**
             * Decodes a StickerAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns StickerAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.StickerAction;

            /**
             * Verifies a StickerAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a StickerAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns StickerAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.StickerAction;

            /**
             * Creates a plain object from a StickerAction message. Also converts values to other types if specified.
             * @param message StickerAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.StickerAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this StickerAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for StickerAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a SubscriptionAction. */
        interface ISubscriptionAction {

            /** SubscriptionAction isDeactivated */
            isDeactivated?: (boolean|null);

            /** SubscriptionAction isAutoRenewing */
            isAutoRenewing?: (boolean|null);

            /** SubscriptionAction expirationDate */
            expirationDate?: (number|Long|null);
        }

        /** Represents a SubscriptionAction. */
        class SubscriptionAction implements ISubscriptionAction {

            /**
             * Constructs a new SubscriptionAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ISubscriptionAction);

            /** SubscriptionAction isDeactivated. */
            public isDeactivated: boolean;

            /** SubscriptionAction isAutoRenewing. */
            public isAutoRenewing: boolean;

            /** SubscriptionAction expirationDate. */
            public expirationDate: (number|Long);

            /**
             * Creates a new SubscriptionAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns SubscriptionAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ISubscriptionAction): SyncAction.SyncActionValue.SubscriptionAction;

            /**
             * Encodes the specified SubscriptionAction message. Does not implicitly {@link SyncAction.SyncActionValue.SubscriptionAction.verify|verify} messages.
             * @param message SubscriptionAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ISubscriptionAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified SubscriptionAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.SubscriptionAction.verify|verify} messages.
             * @param message SubscriptionAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ISubscriptionAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a SubscriptionAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns SubscriptionAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.SubscriptionAction;

            /**
             * Decodes a SubscriptionAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns SubscriptionAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.SubscriptionAction;

            /**
             * Verifies a SubscriptionAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a SubscriptionAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns SubscriptionAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.SubscriptionAction;

            /**
             * Creates a plain object from a SubscriptionAction message. Also converts values to other types if specified.
             * @param message SubscriptionAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.SubscriptionAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this SubscriptionAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for SubscriptionAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a SyncActionMessage. */
        interface ISyncActionMessage {

            /** SyncActionMessage key */
            key?: (Protocol.IMessageKey|null);

            /** SyncActionMessage timestamp */
            timestamp?: (number|Long|null);
        }

        /** Represents a SyncActionMessage. */
        class SyncActionMessage implements ISyncActionMessage {

            /**
             * Constructs a new SyncActionMessage.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ISyncActionMessage);

            /** SyncActionMessage key. */
            public key?: (Protocol.IMessageKey|null);

            /** SyncActionMessage timestamp. */
            public timestamp: (number|Long);

            /**
             * Creates a new SyncActionMessage instance using the specified properties.
             * @param [properties] Properties to set
             * @returns SyncActionMessage instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ISyncActionMessage): SyncAction.SyncActionValue.SyncActionMessage;

            /**
             * Encodes the specified SyncActionMessage message. Does not implicitly {@link SyncAction.SyncActionValue.SyncActionMessage.verify|verify} messages.
             * @param message SyncActionMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ISyncActionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified SyncActionMessage message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.SyncActionMessage.verify|verify} messages.
             * @param message SyncActionMessage message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ISyncActionMessage, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a SyncActionMessage message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns SyncActionMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.SyncActionMessage;

            /**
             * Decodes a SyncActionMessage message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns SyncActionMessage
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.SyncActionMessage;

            /**
             * Verifies a SyncActionMessage message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a SyncActionMessage message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns SyncActionMessage
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.SyncActionMessage;

            /**
             * Creates a plain object from a SyncActionMessage message. Also converts values to other types if specified.
             * @param message SyncActionMessage
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.SyncActionMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this SyncActionMessage to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for SyncActionMessage
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a SyncActionMessageRange. */
        interface ISyncActionMessageRange {

            /** SyncActionMessageRange lastMessageTimestamp */
            lastMessageTimestamp?: (number|Long|null);

            /** SyncActionMessageRange lastSystemMessageTimestamp */
            lastSystemMessageTimestamp?: (number|Long|null);

            /** SyncActionMessageRange messages */
            messages?: (SyncAction.SyncActionValue.ISyncActionMessage[]|null);
        }

        /** Represents a SyncActionMessageRange. */
        class SyncActionMessageRange implements ISyncActionMessageRange {

            /**
             * Constructs a new SyncActionMessageRange.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ISyncActionMessageRange);

            /** SyncActionMessageRange lastMessageTimestamp. */
            public lastMessageTimestamp: (number|Long);

            /** SyncActionMessageRange lastSystemMessageTimestamp. */
            public lastSystemMessageTimestamp: (number|Long);

            /** SyncActionMessageRange messages. */
            public messages: SyncAction.SyncActionValue.ISyncActionMessage[];

            /**
             * Creates a new SyncActionMessageRange instance using the specified properties.
             * @param [properties] Properties to set
             * @returns SyncActionMessageRange instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ISyncActionMessageRange): SyncAction.SyncActionValue.SyncActionMessageRange;

            /**
             * Encodes the specified SyncActionMessageRange message. Does not implicitly {@link SyncAction.SyncActionValue.SyncActionMessageRange.verify|verify} messages.
             * @param message SyncActionMessageRange message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ISyncActionMessageRange, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified SyncActionMessageRange message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.SyncActionMessageRange.verify|verify} messages.
             * @param message SyncActionMessageRange message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ISyncActionMessageRange, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a SyncActionMessageRange message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns SyncActionMessageRange
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.SyncActionMessageRange;

            /**
             * Decodes a SyncActionMessageRange message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns SyncActionMessageRange
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.SyncActionMessageRange;

            /**
             * Verifies a SyncActionMessageRange message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a SyncActionMessageRange message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns SyncActionMessageRange
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.SyncActionMessageRange;

            /**
             * Creates a plain object from a SyncActionMessageRange message. Also converts values to other types if specified.
             * @param message SyncActionMessageRange
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.SyncActionMessageRange, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this SyncActionMessageRange to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for SyncActionMessageRange
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a TimeFormatAction. */
        interface ITimeFormatAction {

            /** TimeFormatAction isTwentyFourHourFormatEnabled */
            isTwentyFourHourFormatEnabled?: (boolean|null);
        }

        /** Represents a TimeFormatAction. */
        class TimeFormatAction implements ITimeFormatAction {

            /**
             * Constructs a new TimeFormatAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.ITimeFormatAction);

            /** TimeFormatAction isTwentyFourHourFormatEnabled. */
            public isTwentyFourHourFormatEnabled: boolean;

            /**
             * Creates a new TimeFormatAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns TimeFormatAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.ITimeFormatAction): SyncAction.SyncActionValue.TimeFormatAction;

            /**
             * Encodes the specified TimeFormatAction message. Does not implicitly {@link SyncAction.SyncActionValue.TimeFormatAction.verify|verify} messages.
             * @param message TimeFormatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.ITimeFormatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified TimeFormatAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.TimeFormatAction.verify|verify} messages.
             * @param message TimeFormatAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.ITimeFormatAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a TimeFormatAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns TimeFormatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.TimeFormatAction;

            /**
             * Decodes a TimeFormatAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns TimeFormatAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.TimeFormatAction;

            /**
             * Verifies a TimeFormatAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a TimeFormatAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns TimeFormatAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.TimeFormatAction;

            /**
             * Creates a plain object from a TimeFormatAction message. Also converts values to other types if specified.
             * @param message TimeFormatAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.TimeFormatAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this TimeFormatAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for TimeFormatAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an UnarchiveChatsSetting. */
        interface IUnarchiveChatsSetting {

            /** UnarchiveChatsSetting unarchiveChats */
            unarchiveChats?: (boolean|null);
        }

        /** Represents an UnarchiveChatsSetting. */
        class UnarchiveChatsSetting implements IUnarchiveChatsSetting {

            /**
             * Constructs a new UnarchiveChatsSetting.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IUnarchiveChatsSetting);

            /** UnarchiveChatsSetting unarchiveChats. */
            public unarchiveChats: boolean;

            /**
             * Creates a new UnarchiveChatsSetting instance using the specified properties.
             * @param [properties] Properties to set
             * @returns UnarchiveChatsSetting instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IUnarchiveChatsSetting): SyncAction.SyncActionValue.UnarchiveChatsSetting;

            /**
             * Encodes the specified UnarchiveChatsSetting message. Does not implicitly {@link SyncAction.SyncActionValue.UnarchiveChatsSetting.verify|verify} messages.
             * @param message UnarchiveChatsSetting message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IUnarchiveChatsSetting, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified UnarchiveChatsSetting message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.UnarchiveChatsSetting.verify|verify} messages.
             * @param message UnarchiveChatsSetting message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IUnarchiveChatsSetting, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an UnarchiveChatsSetting message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns UnarchiveChatsSetting
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.UnarchiveChatsSetting;

            /**
             * Decodes an UnarchiveChatsSetting message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns UnarchiveChatsSetting
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.UnarchiveChatsSetting;

            /**
             * Verifies an UnarchiveChatsSetting message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an UnarchiveChatsSetting message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns UnarchiveChatsSetting
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.UnarchiveChatsSetting;

            /**
             * Creates a plain object from an UnarchiveChatsSetting message. Also converts values to other types if specified.
             * @param message UnarchiveChatsSetting
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.UnarchiveChatsSetting, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this UnarchiveChatsSetting to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for UnarchiveChatsSetting
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a UserStatusMuteAction. */
        interface IUserStatusMuteAction {

            /** UserStatusMuteAction muted */
            muted?: (boolean|null);
        }

        /** Represents a UserStatusMuteAction. */
        class UserStatusMuteAction implements IUserStatusMuteAction {

            /**
             * Constructs a new UserStatusMuteAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IUserStatusMuteAction);

            /** UserStatusMuteAction muted. */
            public muted: boolean;

            /**
             * Creates a new UserStatusMuteAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns UserStatusMuteAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IUserStatusMuteAction): SyncAction.SyncActionValue.UserStatusMuteAction;

            /**
             * Encodes the specified UserStatusMuteAction message. Does not implicitly {@link SyncAction.SyncActionValue.UserStatusMuteAction.verify|verify} messages.
             * @param message UserStatusMuteAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IUserStatusMuteAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified UserStatusMuteAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.UserStatusMuteAction.verify|verify} messages.
             * @param message UserStatusMuteAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IUserStatusMuteAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a UserStatusMuteAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns UserStatusMuteAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.UserStatusMuteAction;

            /**
             * Decodes a UserStatusMuteAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns UserStatusMuteAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.UserStatusMuteAction;

            /**
             * Verifies a UserStatusMuteAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a UserStatusMuteAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns UserStatusMuteAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.UserStatusMuteAction;

            /**
             * Creates a plain object from a UserStatusMuteAction message. Also converts values to other types if specified.
             * @param message UserStatusMuteAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.UserStatusMuteAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this UserStatusMuteAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for UserStatusMuteAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a UsernameChatStartModeAction. */
        interface IUsernameChatStartModeAction {

            /** UsernameChatStartModeAction chatStartMode */
            chatStartMode?: (SyncAction.SyncActionValue.UsernameChatStartModeAction.ChatStartMode|null);
        }

        /** Represents a UsernameChatStartModeAction. */
        class UsernameChatStartModeAction implements IUsernameChatStartModeAction {

            /**
             * Constructs a new UsernameChatStartModeAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IUsernameChatStartModeAction);

            /** UsernameChatStartModeAction chatStartMode. */
            public chatStartMode: SyncAction.SyncActionValue.UsernameChatStartModeAction.ChatStartMode;

            /**
             * Creates a new UsernameChatStartModeAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns UsernameChatStartModeAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IUsernameChatStartModeAction): SyncAction.SyncActionValue.UsernameChatStartModeAction;

            /**
             * Encodes the specified UsernameChatStartModeAction message. Does not implicitly {@link SyncAction.SyncActionValue.UsernameChatStartModeAction.verify|verify} messages.
             * @param message UsernameChatStartModeAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IUsernameChatStartModeAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified UsernameChatStartModeAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.UsernameChatStartModeAction.verify|verify} messages.
             * @param message UsernameChatStartModeAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IUsernameChatStartModeAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a UsernameChatStartModeAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns UsernameChatStartModeAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.UsernameChatStartModeAction;

            /**
             * Decodes a UsernameChatStartModeAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns UsernameChatStartModeAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.UsernameChatStartModeAction;

            /**
             * Verifies a UsernameChatStartModeAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a UsernameChatStartModeAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns UsernameChatStartModeAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.UsernameChatStartModeAction;

            /**
             * Creates a plain object from a UsernameChatStartModeAction message. Also converts values to other types if specified.
             * @param message UsernameChatStartModeAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.UsernameChatStartModeAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this UsernameChatStartModeAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for UsernameChatStartModeAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace UsernameChatStartModeAction {

            /** ChatStartMode enum. */
            enum ChatStartMode {
                LID = 1,
                PN = 2
            }
        }

        /** Properties of a WaffleAccountLinkStateAction. */
        interface IWaffleAccountLinkStateAction {

            /** WaffleAccountLinkStateAction linkState */
            linkState?: (SyncAction.SyncActionValue.WaffleAccountLinkStateAction.AccountLinkState|null);
        }

        /** Represents a WaffleAccountLinkStateAction. */
        class WaffleAccountLinkStateAction implements IWaffleAccountLinkStateAction {

            /**
             * Constructs a new WaffleAccountLinkStateAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IWaffleAccountLinkStateAction);

            /** WaffleAccountLinkStateAction linkState. */
            public linkState: SyncAction.SyncActionValue.WaffleAccountLinkStateAction.AccountLinkState;

            /**
             * Creates a new WaffleAccountLinkStateAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns WaffleAccountLinkStateAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IWaffleAccountLinkStateAction): SyncAction.SyncActionValue.WaffleAccountLinkStateAction;

            /**
             * Encodes the specified WaffleAccountLinkStateAction message. Does not implicitly {@link SyncAction.SyncActionValue.WaffleAccountLinkStateAction.verify|verify} messages.
             * @param message WaffleAccountLinkStateAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IWaffleAccountLinkStateAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified WaffleAccountLinkStateAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.WaffleAccountLinkStateAction.verify|verify} messages.
             * @param message WaffleAccountLinkStateAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IWaffleAccountLinkStateAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a WaffleAccountLinkStateAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns WaffleAccountLinkStateAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.WaffleAccountLinkStateAction;

            /**
             * Decodes a WaffleAccountLinkStateAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns WaffleAccountLinkStateAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.WaffleAccountLinkStateAction;

            /**
             * Verifies a WaffleAccountLinkStateAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a WaffleAccountLinkStateAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns WaffleAccountLinkStateAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.WaffleAccountLinkStateAction;

            /**
             * Creates a plain object from a WaffleAccountLinkStateAction message. Also converts values to other types if specified.
             * @param message WaffleAccountLinkStateAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.WaffleAccountLinkStateAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this WaffleAccountLinkStateAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for WaffleAccountLinkStateAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace WaffleAccountLinkStateAction {

            /** AccountLinkState enum. */
            enum AccountLinkState {
                ACTIVE = 0
            }
        }

        /** Properties of a WamoUserIdentifierAction. */
        interface IWamoUserIdentifierAction {

            /** WamoUserIdentifierAction identifier */
            identifier?: (string|null);
        }

        /** Represents a WamoUserIdentifierAction. */
        class WamoUserIdentifierAction implements IWamoUserIdentifierAction {

            /**
             * Constructs a new WamoUserIdentifierAction.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.SyncActionValue.IWamoUserIdentifierAction);

            /** WamoUserIdentifierAction identifier. */
            public identifier: string;

            /**
             * Creates a new WamoUserIdentifierAction instance using the specified properties.
             * @param [properties] Properties to set
             * @returns WamoUserIdentifierAction instance
             */
            public static create(properties?: SyncAction.SyncActionValue.IWamoUserIdentifierAction): SyncAction.SyncActionValue.WamoUserIdentifierAction;

            /**
             * Encodes the specified WamoUserIdentifierAction message. Does not implicitly {@link SyncAction.SyncActionValue.WamoUserIdentifierAction.verify|verify} messages.
             * @param message WamoUserIdentifierAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.SyncActionValue.IWamoUserIdentifierAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified WamoUserIdentifierAction message, length delimited. Does not implicitly {@link SyncAction.SyncActionValue.WamoUserIdentifierAction.verify|verify} messages.
             * @param message WamoUserIdentifierAction message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.SyncActionValue.IWamoUserIdentifierAction, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a WamoUserIdentifierAction message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns WamoUserIdentifierAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.SyncActionValue.WamoUserIdentifierAction;

            /**
             * Decodes a WamoUserIdentifierAction message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns WamoUserIdentifierAction
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.SyncActionValue.WamoUserIdentifierAction;

            /**
             * Verifies a WamoUserIdentifierAction message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a WamoUserIdentifierAction message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns WamoUserIdentifierAction
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.SyncActionValue.WamoUserIdentifierAction;

            /**
             * Creates a plain object from a WamoUserIdentifierAction message. Also converts values to other types if specified.
             * @param message WamoUserIdentifierAction
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.SyncActionValue.WamoUserIdentifierAction, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this WamoUserIdentifierAction to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for WamoUserIdentifierAction
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Properties of a CallLogRecord. */
    interface ICallLogRecord {

        /** CallLogRecord callResult */
        callResult?: (SyncAction.CallLogRecord.CallResult|null);

        /** CallLogRecord isDndMode */
        isDndMode?: (boolean|null);

        /** CallLogRecord silenceReason */
        silenceReason?: (SyncAction.CallLogRecord.SilenceReason|null);

        /** CallLogRecord duration */
        duration?: (number|Long|null);

        /** CallLogRecord startTime */
        startTime?: (number|Long|null);

        /** CallLogRecord isIncoming */
        isIncoming?: (boolean|null);

        /** CallLogRecord isVideo */
        isVideo?: (boolean|null);

        /** CallLogRecord isCallLink */
        isCallLink?: (boolean|null);

        /** CallLogRecord callLinkToken */
        callLinkToken?: (string|null);

        /** CallLogRecord scheduledCallId */
        scheduledCallId?: (string|null);

        /** CallLogRecord callId */
        callId?: (string|null);

        /** CallLogRecord callCreatorJid */
        callCreatorJid?: (string|null);

        /** CallLogRecord groupJid */
        groupJid?: (string|null);

        /** CallLogRecord participants */
        participants?: (SyncAction.CallLogRecord.IParticipantInfo[]|null);

        /** CallLogRecord callType */
        callType?: (SyncAction.CallLogRecord.CallType|null);
    }

    /** Represents a CallLogRecord. */
    class CallLogRecord implements ICallLogRecord {

        /**
         * Constructs a new CallLogRecord.
         * @param [properties] Properties to set
         */
        constructor(properties?: SyncAction.ICallLogRecord);

        /** CallLogRecord callResult. */
        public callResult: SyncAction.CallLogRecord.CallResult;

        /** CallLogRecord isDndMode. */
        public isDndMode: boolean;

        /** CallLogRecord silenceReason. */
        public silenceReason: SyncAction.CallLogRecord.SilenceReason;

        /** CallLogRecord duration. */
        public duration: (number|Long);

        /** CallLogRecord startTime. */
        public startTime: (number|Long);

        /** CallLogRecord isIncoming. */
        public isIncoming: boolean;

        /** CallLogRecord isVideo. */
        public isVideo: boolean;

        /** CallLogRecord isCallLink. */
        public isCallLink: boolean;

        /** CallLogRecord callLinkToken. */
        public callLinkToken: string;

        /** CallLogRecord scheduledCallId. */
        public scheduledCallId: string;

        /** CallLogRecord callId. */
        public callId: string;

        /** CallLogRecord callCreatorJid. */
        public callCreatorJid: string;

        /** CallLogRecord groupJid. */
        public groupJid: string;

        /** CallLogRecord participants. */
        public participants: SyncAction.CallLogRecord.IParticipantInfo[];

        /** CallLogRecord callType. */
        public callType: SyncAction.CallLogRecord.CallType;

        /**
         * Creates a new CallLogRecord instance using the specified properties.
         * @param [properties] Properties to set
         * @returns CallLogRecord instance
         */
        public static create(properties?: SyncAction.ICallLogRecord): SyncAction.CallLogRecord;

        /**
         * Encodes the specified CallLogRecord message. Does not implicitly {@link SyncAction.CallLogRecord.verify|verify} messages.
         * @param message CallLogRecord message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: SyncAction.ICallLogRecord, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified CallLogRecord message, length delimited. Does not implicitly {@link SyncAction.CallLogRecord.verify|verify} messages.
         * @param message CallLogRecord message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: SyncAction.ICallLogRecord, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a CallLogRecord message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns CallLogRecord
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.CallLogRecord;

        /**
         * Decodes a CallLogRecord message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns CallLogRecord
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.CallLogRecord;

        /**
         * Verifies a CallLogRecord message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a CallLogRecord message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns CallLogRecord
         */
        public static fromObject(object: { [k: string]: any }): SyncAction.CallLogRecord;

        /**
         * Creates a plain object from a CallLogRecord message. Also converts values to other types if specified.
         * @param message CallLogRecord
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: SyncAction.CallLogRecord, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this CallLogRecord to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for CallLogRecord
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace CallLogRecord {

        /** CallResult enum. */
        enum CallResult {
            CONNECTED = 0,
            REJECTED = 1,
            CANCELLED = 2,
            ACCEPTEDELSEWHERE = 3,
            MISSED = 4,
            INVALID = 5,
            UNAVAILABLE = 6,
            UPCOMING = 7,
            FAILED = 8,
            ABANDONED = 9,
            ONGOING = 10
        }

        /** CallType enum. */
        enum CallType {
            REGULAR = 0,
            SCHEDULED_CALL = 1,
            VOICE_CHAT = 2
        }

        /** Properties of a ParticipantInfo. */
        interface IParticipantInfo {

            /** ParticipantInfo userJid */
            userJid?: (string|null);

            /** ParticipantInfo callResult */
            callResult?: (SyncAction.CallLogRecord.CallResult|null);
        }

        /** Represents a ParticipantInfo. */
        class ParticipantInfo implements IParticipantInfo {

            /**
             * Constructs a new ParticipantInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: SyncAction.CallLogRecord.IParticipantInfo);

            /** ParticipantInfo userJid. */
            public userJid: string;

            /** ParticipantInfo callResult. */
            public callResult: SyncAction.CallLogRecord.CallResult;

            /**
             * Creates a new ParticipantInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ParticipantInfo instance
             */
            public static create(properties?: SyncAction.CallLogRecord.IParticipantInfo): SyncAction.CallLogRecord.ParticipantInfo;

            /**
             * Encodes the specified ParticipantInfo message. Does not implicitly {@link SyncAction.CallLogRecord.ParticipantInfo.verify|verify} messages.
             * @param message ParticipantInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: SyncAction.CallLogRecord.IParticipantInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ParticipantInfo message, length delimited. Does not implicitly {@link SyncAction.CallLogRecord.ParticipantInfo.verify|verify} messages.
             * @param message ParticipantInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: SyncAction.CallLogRecord.IParticipantInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ParticipantInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ParticipantInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.CallLogRecord.ParticipantInfo;

            /**
             * Decodes a ParticipantInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ParticipantInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.CallLogRecord.ParticipantInfo;

            /**
             * Verifies a ParticipantInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ParticipantInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ParticipantInfo
             */
            public static fromObject(object: { [k: string]: any }): SyncAction.CallLogRecord.ParticipantInfo;

            /**
             * Creates a plain object from a ParticipantInfo message. Also converts values to other types if specified.
             * @param message ParticipantInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: SyncAction.CallLogRecord.ParticipantInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ParticipantInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ParticipantInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** SilenceReason enum. */
        enum SilenceReason {
            NONE = 0,
            SCHEDULED = 1,
            PRIVACY = 2,
            LIGHTWEIGHT = 3
        }
    }

    /** Properties of a RecentEmojiWeight. */
    interface IRecentEmojiWeight {

        /** RecentEmojiWeight emoji */
        emoji?: (string|null);

        /** RecentEmojiWeight weight */
        weight?: (number|null);
    }

    /** Represents a RecentEmojiWeight. */
    class RecentEmojiWeight implements IRecentEmojiWeight {

        /**
         * Constructs a new RecentEmojiWeight.
         * @param [properties] Properties to set
         */
        constructor(properties?: SyncAction.IRecentEmojiWeight);

        /** RecentEmojiWeight emoji. */
        public emoji: string;

        /** RecentEmojiWeight weight. */
        public weight: number;

        /**
         * Creates a new RecentEmojiWeight instance using the specified properties.
         * @param [properties] Properties to set
         * @returns RecentEmojiWeight instance
         */
        public static create(properties?: SyncAction.IRecentEmojiWeight): SyncAction.RecentEmojiWeight;

        /**
         * Encodes the specified RecentEmojiWeight message. Does not implicitly {@link SyncAction.RecentEmojiWeight.verify|verify} messages.
         * @param message RecentEmojiWeight message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: SyncAction.IRecentEmojiWeight, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified RecentEmojiWeight message, length delimited. Does not implicitly {@link SyncAction.RecentEmojiWeight.verify|verify} messages.
         * @param message RecentEmojiWeight message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: SyncAction.IRecentEmojiWeight, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a RecentEmojiWeight message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns RecentEmojiWeight
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): SyncAction.RecentEmojiWeight;

        /**
         * Decodes a RecentEmojiWeight message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns RecentEmojiWeight
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): SyncAction.RecentEmojiWeight;

        /**
         * Verifies a RecentEmojiWeight message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a RecentEmojiWeight message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns RecentEmojiWeight
         */
        public static fromObject(object: { [k: string]: any }): SyncAction.RecentEmojiWeight;

        /**
         * Creates a plain object from a RecentEmojiWeight message. Also converts values to other types if specified.
         * @param message RecentEmojiWeight
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: SyncAction.RecentEmojiWeight, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this RecentEmojiWeight to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for RecentEmojiWeight
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }
}

/** Namespace DeviceCapabilities. */
export namespace DeviceCapabilities {

    /** Properties of a DeviceCapabilities. */
    interface IDeviceCapabilities {

        /** DeviceCapabilities chatLockSupportLevel */
        chatLockSupportLevel?: (DeviceCapabilities.DeviceCapabilities.ChatLockSupportLevel|null);

        /** DeviceCapabilities lidMigration */
        lidMigration?: (DeviceCapabilities.DeviceCapabilities.ILIDMigration|null);

        /** DeviceCapabilities businessBroadcast */
        businessBroadcast?: (DeviceCapabilities.DeviceCapabilities.IBusinessBroadcast|null);
    }

    /** Represents a DeviceCapabilities. */
    class DeviceCapabilities implements IDeviceCapabilities {

        /**
         * Constructs a new DeviceCapabilities.
         * @param [properties] Properties to set
         */
        constructor(properties?: DeviceCapabilities.IDeviceCapabilities);

        /** DeviceCapabilities chatLockSupportLevel. */
        public chatLockSupportLevel: DeviceCapabilities.DeviceCapabilities.ChatLockSupportLevel;

        /** DeviceCapabilities lidMigration. */
        public lidMigration?: (DeviceCapabilities.DeviceCapabilities.ILIDMigration|null);

        /** DeviceCapabilities businessBroadcast. */
        public businessBroadcast?: (DeviceCapabilities.DeviceCapabilities.IBusinessBroadcast|null);

        /**
         * Creates a new DeviceCapabilities instance using the specified properties.
         * @param [properties] Properties to set
         * @returns DeviceCapabilities instance
         */
        public static create(properties?: DeviceCapabilities.IDeviceCapabilities): DeviceCapabilities.DeviceCapabilities;

        /**
         * Encodes the specified DeviceCapabilities message. Does not implicitly {@link DeviceCapabilities.DeviceCapabilities.verify|verify} messages.
         * @param message DeviceCapabilities message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: DeviceCapabilities.IDeviceCapabilities, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified DeviceCapabilities message, length delimited. Does not implicitly {@link DeviceCapabilities.DeviceCapabilities.verify|verify} messages.
         * @param message DeviceCapabilities message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: DeviceCapabilities.IDeviceCapabilities, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a DeviceCapabilities message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns DeviceCapabilities
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): DeviceCapabilities.DeviceCapabilities;

        /**
         * Decodes a DeviceCapabilities message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns DeviceCapabilities
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): DeviceCapabilities.DeviceCapabilities;

        /**
         * Verifies a DeviceCapabilities message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a DeviceCapabilities message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns DeviceCapabilities
         */
        public static fromObject(object: { [k: string]: any }): DeviceCapabilities.DeviceCapabilities;

        /**
         * Creates a plain object from a DeviceCapabilities message. Also converts values to other types if specified.
         * @param message DeviceCapabilities
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: DeviceCapabilities.DeviceCapabilities, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this DeviceCapabilities to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for DeviceCapabilities
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    namespace DeviceCapabilities {

        /** Properties of a BusinessBroadcast. */
        interface IBusinessBroadcast {

            /** BusinessBroadcast importListEnabled */
            importListEnabled?: (boolean|null);
        }

        /** Represents a BusinessBroadcast. */
        class BusinessBroadcast implements IBusinessBroadcast {

            /**
             * Constructs a new BusinessBroadcast.
             * @param [properties] Properties to set
             */
            constructor(properties?: DeviceCapabilities.DeviceCapabilities.IBusinessBroadcast);

            /** BusinessBroadcast importListEnabled. */
            public importListEnabled: boolean;

            /**
             * Creates a new BusinessBroadcast instance using the specified properties.
             * @param [properties] Properties to set
             * @returns BusinessBroadcast instance
             */
            public static create(properties?: DeviceCapabilities.DeviceCapabilities.IBusinessBroadcast): DeviceCapabilities.DeviceCapabilities.BusinessBroadcast;

            /**
             * Encodes the specified BusinessBroadcast message. Does not implicitly {@link DeviceCapabilities.DeviceCapabilities.BusinessBroadcast.verify|verify} messages.
             * @param message BusinessBroadcast message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: DeviceCapabilities.DeviceCapabilities.IBusinessBroadcast, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified BusinessBroadcast message, length delimited. Does not implicitly {@link DeviceCapabilities.DeviceCapabilities.BusinessBroadcast.verify|verify} messages.
             * @param message BusinessBroadcast message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: DeviceCapabilities.DeviceCapabilities.IBusinessBroadcast, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a BusinessBroadcast message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns BusinessBroadcast
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): DeviceCapabilities.DeviceCapabilities.BusinessBroadcast;

            /**
             * Decodes a BusinessBroadcast message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns BusinessBroadcast
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): DeviceCapabilities.DeviceCapabilities.BusinessBroadcast;

            /**
             * Verifies a BusinessBroadcast message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a BusinessBroadcast message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns BusinessBroadcast
             */
            public static fromObject(object: { [k: string]: any }): DeviceCapabilities.DeviceCapabilities.BusinessBroadcast;

            /**
             * Creates a plain object from a BusinessBroadcast message. Also converts values to other types if specified.
             * @param message BusinessBroadcast
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: DeviceCapabilities.DeviceCapabilities.BusinessBroadcast, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this BusinessBroadcast to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for BusinessBroadcast
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** ChatLockSupportLevel enum. */
        enum ChatLockSupportLevel {
            NONE = 0,
            MINIMAL = 1,
            FULL = 2
        }

        /** Properties of a LIDMigration. */
        interface ILIDMigration {

            /** LIDMigration chatDbMigrationTimestamp */
            chatDbMigrationTimestamp?: (number|Long|null);
        }

        /** Represents a LIDMigration. */
        class LIDMigration implements ILIDMigration {

            /**
             * Constructs a new LIDMigration.
             * @param [properties] Properties to set
             */
            constructor(properties?: DeviceCapabilities.DeviceCapabilities.ILIDMigration);

            /** LIDMigration chatDbMigrationTimestamp. */
            public chatDbMigrationTimestamp: (number|Long);

            /**
             * Creates a new LIDMigration instance using the specified properties.
             * @param [properties] Properties to set
             * @returns LIDMigration instance
             */
            public static create(properties?: DeviceCapabilities.DeviceCapabilities.ILIDMigration): DeviceCapabilities.DeviceCapabilities.LIDMigration;

            /**
             * Encodes the specified LIDMigration message. Does not implicitly {@link DeviceCapabilities.DeviceCapabilities.LIDMigration.verify|verify} messages.
             * @param message LIDMigration message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: DeviceCapabilities.DeviceCapabilities.ILIDMigration, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified LIDMigration message, length delimited. Does not implicitly {@link DeviceCapabilities.DeviceCapabilities.LIDMigration.verify|verify} messages.
             * @param message LIDMigration message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: DeviceCapabilities.DeviceCapabilities.ILIDMigration, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a LIDMigration message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns LIDMigration
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): DeviceCapabilities.DeviceCapabilities.LIDMigration;

            /**
             * Decodes a LIDMigration message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns LIDMigration
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): DeviceCapabilities.DeviceCapabilities.LIDMigration;

            /**
             * Verifies a LIDMigration message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a LIDMigration message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns LIDMigration
             */
            public static fromObject(object: { [k: string]: any }): DeviceCapabilities.DeviceCapabilities.LIDMigration;

            /**
             * Creates a plain object from a LIDMigration message. Also converts values to other types if specified.
             * @param message LIDMigration
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: DeviceCapabilities.DeviceCapabilities.LIDMigration, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this LIDMigration to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for LIDMigration
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }
}
