// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: playlist4_external.proto

package com.spotify.playlist4;

public final class Playlist4ApiProto {
  private Playlist4ApiProto() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * Protobuf enum {@code spotify.playlist4.proto.ListAttributeKind}
   */
  public enum ListAttributeKind
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>LIST_UNKNOWN = 0;</code>
     */
    LIST_UNKNOWN(0),
    /**
     * <code>LIST_NAME = 1;</code>
     */
    LIST_NAME(1),
    /**
     * <code>LIST_DESCRIPTION = 2;</code>
     */
    LIST_DESCRIPTION(2),
    /**
     * <code>LIST_PICTURE = 3;</code>
     */
    LIST_PICTURE(3),
    /**
     * <code>LIST_COLLABORATIVE = 4;</code>
     */
    LIST_COLLABORATIVE(4),
    /**
     * <code>LIST_PL3_VERSION = 5;</code>
     */
    LIST_PL3_VERSION(5),
    /**
     * <code>LIST_DELETED_BY_OWNER = 6;</code>
     */
    LIST_DELETED_BY_OWNER(6),
    /**
     * <code>LIST_CLIENT_ID = 10;</code>
     */
    LIST_CLIENT_ID(10),
    /**
     * <code>LIST_FORMAT = 11;</code>
     */
    LIST_FORMAT(11),
    /**
     * <code>LIST_FORMAT_ATTRIBUTES = 12;</code>
     */
    LIST_FORMAT_ATTRIBUTES(12),
    ;

    /**
     * <code>LIST_UNKNOWN = 0;</code>
     */
    public static final int LIST_UNKNOWN_VALUE = 0;
    /**
     * <code>LIST_NAME = 1;</code>
     */
    public static final int LIST_NAME_VALUE = 1;
    /**
     * <code>LIST_DESCRIPTION = 2;</code>
     */
    public static final int LIST_DESCRIPTION_VALUE = 2;
    /**
     * <code>LIST_PICTURE = 3;</code>
     */
    public static final int LIST_PICTURE_VALUE = 3;
    /**
     * <code>LIST_COLLABORATIVE = 4;</code>
     */
    public static final int LIST_COLLABORATIVE_VALUE = 4;
    /**
     * <code>LIST_PL3_VERSION = 5;</code>
     */
    public static final int LIST_PL3_VERSION_VALUE = 5;
    /**
     * <code>LIST_DELETED_BY_OWNER = 6;</code>
     */
    public static final int LIST_DELETED_BY_OWNER_VALUE = 6;
    /**
     * <code>LIST_CLIENT_ID = 10;</code>
     */
    public static final int LIST_CLIENT_ID_VALUE = 10;
    /**
     * <code>LIST_FORMAT = 11;</code>
     */
    public static final int LIST_FORMAT_VALUE = 11;
    /**
     * <code>LIST_FORMAT_ATTRIBUTES = 12;</code>
     */
    public static final int LIST_FORMAT_ATTRIBUTES_VALUE = 12;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static ListAttributeKind valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static ListAttributeKind forNumber(int value) {
      switch (value) {
        case 0: return LIST_UNKNOWN;
        case 1: return LIST_NAME;
        case 2: return LIST_DESCRIPTION;
        case 3: return LIST_PICTURE;
        case 4: return LIST_COLLABORATIVE;
        case 5: return LIST_PL3_VERSION;
        case 6: return LIST_DELETED_BY_OWNER;
        case 10: return LIST_CLIENT_ID;
        case 11: return LIST_FORMAT;
        case 12: return LIST_FORMAT_ATTRIBUTES;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<ListAttributeKind>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        ListAttributeKind> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<ListAttributeKind>() {
            public ListAttributeKind findValueByNumber(int number) {
              return ListAttributeKind.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.getDescriptor().getEnumTypes().get(0);
    }

    private static final ListAttributeKind[] VALUES = values();

    public static ListAttributeKind valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private ListAttributeKind(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:spotify.playlist4.proto.ListAttributeKind)
  }

  /**
   * Protobuf enum {@code spotify.playlist4.proto.ItemAttributeKind}
   */
  public enum ItemAttributeKind
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>ITEM_UNKNOWN = 0;</code>
     */
    ITEM_UNKNOWN(0),
    /**
     * <code>ITEM_ADDED_BY = 1;</code>
     */
    ITEM_ADDED_BY(1),
    /**
     * <code>ITEM_TIMESTAMP = 2;</code>
     */
    ITEM_TIMESTAMP(2),
    /**
     * <code>ITEM_SEEN_AT = 9;</code>
     */
    ITEM_SEEN_AT(9),
    /**
     * <code>ITEM_PUBLIC = 10;</code>
     */
    ITEM_PUBLIC(10),
    /**
     * <code>ITEM_FORMAT_ATTRIBUTES = 11;</code>
     */
    ITEM_FORMAT_ATTRIBUTES(11),
    /**
     * <code>ITEM_ID = 12;</code>
     */
    ITEM_ID(12),
    ;

    /**
     * <code>ITEM_UNKNOWN = 0;</code>
     */
    public static final int ITEM_UNKNOWN_VALUE = 0;
    /**
     * <code>ITEM_ADDED_BY = 1;</code>
     */
    public static final int ITEM_ADDED_BY_VALUE = 1;
    /**
     * <code>ITEM_TIMESTAMP = 2;</code>
     */
    public static final int ITEM_TIMESTAMP_VALUE = 2;
    /**
     * <code>ITEM_SEEN_AT = 9;</code>
     */
    public static final int ITEM_SEEN_AT_VALUE = 9;
    /**
     * <code>ITEM_PUBLIC = 10;</code>
     */
    public static final int ITEM_PUBLIC_VALUE = 10;
    /**
     * <code>ITEM_FORMAT_ATTRIBUTES = 11;</code>
     */
    public static final int ITEM_FORMAT_ATTRIBUTES_VALUE = 11;
    /**
     * <code>ITEM_ID = 12;</code>
     */
    public static final int ITEM_ID_VALUE = 12;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static ItemAttributeKind valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static ItemAttributeKind forNumber(int value) {
      switch (value) {
        case 0: return ITEM_UNKNOWN;
        case 1: return ITEM_ADDED_BY;
        case 2: return ITEM_TIMESTAMP;
        case 9: return ITEM_SEEN_AT;
        case 10: return ITEM_PUBLIC;
        case 11: return ITEM_FORMAT_ATTRIBUTES;
        case 12: return ITEM_ID;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<ItemAttributeKind>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        ItemAttributeKind> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<ItemAttributeKind>() {
            public ItemAttributeKind findValueByNumber(int number) {
              return ItemAttributeKind.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.getDescriptor().getEnumTypes().get(1);
    }

    private static final ItemAttributeKind[] VALUES = values();

    public static ItemAttributeKind valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private ItemAttributeKind(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:spotify.playlist4.proto.ItemAttributeKind)
  }

  public interface ItemOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.Item)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required string uri = 1;</code>
     * @return Whether the uri field is set.
     */
    boolean hasUri();
    /**
     * <code>required string uri = 1;</code>
     * @return The uri.
     */
    java.lang.String getUri();
    /**
     * <code>required string uri = 1;</code>
     * @return The bytes for uri.
     */
    com.google.protobuf.ByteString
        getUriBytes();

    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
     * @return Whether the attributes field is set.
     */
    boolean hasAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
     * @return The attributes.
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemAttributes getAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder getAttributesOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.Item}
   */
  public  static final class Item extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.Item)
      ItemOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Item.newBuilder() to construct.
    private Item(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Item() {
      uri_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Item();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Item_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Item_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.Item.class, com.spotify.playlist4.Playlist4ApiProto.Item.Builder.class);
    }

    private int bitField0_;
    public static final int URI_FIELD_NUMBER = 1;
    private volatile java.lang.Object uri_;
    /**
     * <code>required string uri = 1;</code>
     * @return Whether the uri field is set.
     */
    public boolean hasUri() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required string uri = 1;</code>
     * @return The uri.
     */
    public java.lang.String getUri() {
      java.lang.Object ref = uri_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          uri_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string uri = 1;</code>
     * @return The bytes for uri.
     */
    public com.google.protobuf.ByteString
        getUriBytes() {
      java.lang.Object ref = uri_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        uri_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ATTRIBUTES_FIELD_NUMBER = 2;
    private com.spotify.playlist4.Playlist4ApiProto.ItemAttributes attributes_;
    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
     * @return Whether the attributes field is set.
     */
    public boolean hasAttributes() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
     * @return The attributes.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemAttributes getAttributes() {
      return attributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.getDefaultInstance() : attributes_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder getAttributesOrBuilder() {
      return attributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.getDefaultInstance() : attributes_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Item parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Item parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Item parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Item parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Item parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Item parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Item parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Item parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Item parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Item parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Item parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Item parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.Item prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.Item}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.Item)
        com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Item_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Item_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.Item.class, com.spotify.playlist4.Playlist4ApiProto.Item.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.Item.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAttributesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        uri_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (attributesBuilder_ == null) {
          attributes_ = null;
        } else {
          attributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Item_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Item getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.Item.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Item build() {
        com.spotify.playlist4.Playlist4ApiProto.Item result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Item buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.Item result = new com.spotify.playlist4.Playlist4ApiProto.Item(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.uri_ = uri_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (attributesBuilder_ == null) {
            result.attributes_ = attributes_;
          } else {
            result.attributes_ = attributesBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private java.lang.Object uri_ = "";
      /**
       * <code>required string uri = 1;</code>
       * @return Whether the uri field is set.
       */
      public boolean hasUri() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required string uri = 1;</code>
       * @return The uri.
       */
      public java.lang.String getUri() {
        java.lang.Object ref = uri_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            uri_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string uri = 1;</code>
       * @return The bytes for uri.
       */
      public com.google.protobuf.ByteString
          getUriBytes() {
        java.lang.Object ref = uri_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          uri_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string uri = 1;</code>
       * @param value The uri to set.
       * @return This builder for chaining.
       */
      public Builder setUri(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        uri_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string uri = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearUri() {
        bitField0_ = (bitField0_ & ~0x00000001);
        uri_ = getDefaultInstance().getUri();
        onChanged();
        return this;
      }
      /**
       * <code>required string uri = 1;</code>
       * @param value The bytes for uri to set.
       * @return This builder for chaining.
       */
      public Builder setUriBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        uri_ = value;
        onChanged();
        return this;
      }

      private com.spotify.playlist4.Playlist4ApiProto.ItemAttributes attributes_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributes, com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder> attributesBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
       * @return Whether the attributes field is set.
       */
      public boolean hasAttributes() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
       * @return The attributes.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributes getAttributes() {
        if (attributesBuilder_ == null) {
          return attributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.getDefaultInstance() : attributes_;
        } else {
          return attributesBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
       */
      public Builder setAttributes(com.spotify.playlist4.Playlist4ApiProto.ItemAttributes value) {
        if (attributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          attributes_ = value;
          onChanged();
        } else {
          attributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
       */
      public Builder setAttributes(
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder builderForValue) {
        if (attributesBuilder_ == null) {
          attributes_ = builderForValue.build();
          onChanged();
        } else {
          attributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
       */
      public Builder mergeAttributes(com.spotify.playlist4.Playlist4ApiProto.ItemAttributes value) {
        if (attributesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              attributes_ != null &&
              attributes_ != com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.getDefaultInstance()) {
            attributes_ =
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.newBuilder(attributes_).mergeFrom(value).buildPartial();
          } else {
            attributes_ = value;
          }
          onChanged();
        } else {
          attributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
       */
      public Builder clearAttributes() {
        if (attributesBuilder_ == null) {
          attributes_ = null;
          onChanged();
        } else {
          attributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder getAttributesBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getAttributesFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder getAttributesOrBuilder() {
        if (attributesBuilder_ != null) {
          return attributesBuilder_.getMessageOrBuilder();
        } else {
          return attributes_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.getDefaultInstance() : attributes_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributes attributes = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributes, com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder> 
          getAttributesFieldBuilder() {
        if (attributesBuilder_ == null) {
          attributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributes, com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder>(
                  getAttributes(),
                  getParentForChildren(),
                  isClean());
          attributes_ = null;
        }
        return attributesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.Item)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.Item)
    private static final com.spotify.playlist4.Playlist4ApiProto.Item DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.Item();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Item getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Item>
        PARSER = new com.google.protobuf.AbstractParser<Item>() {
      @java.lang.Override
      public Item parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<Item> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Item> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.Item getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MetaItemOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.MetaItem)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes revision = 1;</code>
     * @return Whether the revision field is set.
     */
    boolean hasRevision();
    /**
     * <code>optional bytes revision = 1;</code>
     * @return The revision.
     */
    com.google.protobuf.ByteString getRevision();

    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
     * @return Whether the attributes field is set.
     */
    boolean hasAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
     * @return The attributes.
     */
    com.spotify.playlist4.Playlist4ApiProto.ListAttributes getAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder getAttributesOrBuilder();

    /**
     * <code>optional int32 length = 3;</code>
     * @return Whether the length field is set.
     */
    boolean hasLength();
    /**
     * <code>optional int32 length = 3;</code>
     * @return The length.
     */
    int getLength();

    /**
     * <code>optional int64 timestamp = 4;</code>
     * @return Whether the timestamp field is set.
     */
    boolean hasTimestamp();
    /**
     * <code>optional int64 timestamp = 4;</code>
     * @return The timestamp.
     */
    long getTimestamp();

    /**
     * <code>optional string owner_username = 5;</code>
     * @return Whether the ownerUsername field is set.
     */
    boolean hasOwnerUsername();
    /**
     * <code>optional string owner_username = 5;</code>
     * @return The ownerUsername.
     */
    java.lang.String getOwnerUsername();
    /**
     * <code>optional string owner_username = 5;</code>
     * @return The bytes for ownerUsername.
     */
    com.google.protobuf.ByteString
        getOwnerUsernameBytes();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.MetaItem}
   */
  public  static final class MetaItem extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.MetaItem)
      MetaItemOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MetaItem.newBuilder() to construct.
    private MetaItem(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private MetaItem() {
      revision_ = com.google.protobuf.ByteString.EMPTY;
      ownerUsername_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new MetaItem();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_MetaItem_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_MetaItem_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.MetaItem.class, com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder.class);
    }

    private int bitField0_;
    public static final int REVISION_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString revision_;
    /**
     * <code>optional bytes revision = 1;</code>
     * @return Whether the revision field is set.
     */
    public boolean hasRevision() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes revision = 1;</code>
     * @return The revision.
     */
    public com.google.protobuf.ByteString getRevision() {
      return revision_;
    }

    public static final int ATTRIBUTES_FIELD_NUMBER = 2;
    private com.spotify.playlist4.Playlist4ApiProto.ListAttributes attributes_;
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
     * @return Whether the attributes field is set.
     */
    public boolean hasAttributes() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
     * @return The attributes.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributes getAttributes() {
      return attributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : attributes_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder getAttributesOrBuilder() {
      return attributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : attributes_;
    }

    public static final int LENGTH_FIELD_NUMBER = 3;
    private int length_;
    /**
     * <code>optional int32 length = 3;</code>
     * @return Whether the length field is set.
     */
    public boolean hasLength() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional int32 length = 3;</code>
     * @return The length.
     */
    public int getLength() {
      return length_;
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 4;
    private long timestamp_;
    /**
     * <code>optional int64 timestamp = 4;</code>
     * @return Whether the timestamp field is set.
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional int64 timestamp = 4;</code>
     * @return The timestamp.
     */
    public long getTimestamp() {
      return timestamp_;
    }

    public static final int OWNER_USERNAME_FIELD_NUMBER = 5;
    private volatile java.lang.Object ownerUsername_;
    /**
     * <code>optional string owner_username = 5;</code>
     * @return Whether the ownerUsername field is set.
     */
    public boolean hasOwnerUsername() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional string owner_username = 5;</code>
     * @return The ownerUsername.
     */
    public java.lang.String getOwnerUsername() {
      java.lang.Object ref = ownerUsername_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          ownerUsername_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string owner_username = 5;</code>
     * @return The bytes for ownerUsername.
     */
    public com.google.protobuf.ByteString
        getOwnerUsernameBytes() {
      java.lang.Object ref = ownerUsername_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        ownerUsername_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.MetaItem prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.MetaItem}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.MetaItem)
        com.spotify.playlist4.Playlist4ApiProto.MetaItemOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_MetaItem_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_MetaItem_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.MetaItem.class, com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.MetaItem.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAttributesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        revision_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (attributesBuilder_ == null) {
          attributes_ = null;
        } else {
          attributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        length_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        ownerUsername_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_MetaItem_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.MetaItem getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.MetaItem.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.MetaItem build() {
        com.spotify.playlist4.Playlist4ApiProto.MetaItem result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.MetaItem buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.MetaItem result = new com.spotify.playlist4.Playlist4ApiProto.MetaItem(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.revision_ = revision_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (attributesBuilder_ == null) {
            result.attributes_ = attributes_;
          } else {
            result.attributes_ = attributesBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.length_ = length_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.timestamp_ = timestamp_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.ownerUsername_ = ownerUsername_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString revision_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes revision = 1;</code>
       * @return Whether the revision field is set.
       */
      public boolean hasRevision() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes revision = 1;</code>
       * @return The revision.
       */
      public com.google.protobuf.ByteString getRevision() {
        return revision_;
      }
      /**
       * <code>optional bytes revision = 1;</code>
       * @param value The revision to set.
       * @return This builder for chaining.
       */
      public Builder setRevision(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        revision_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes revision = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearRevision() {
        bitField0_ = (bitField0_ & ~0x00000001);
        revision_ = getDefaultInstance().getRevision();
        onChanged();
        return this;
      }

      private com.spotify.playlist4.Playlist4ApiProto.ListAttributes attributes_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListAttributes, com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder> attributesBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
       * @return Whether the attributes field is set.
       */
      public boolean hasAttributes() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
       * @return The attributes.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributes getAttributes() {
        if (attributesBuilder_ == null) {
          return attributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : attributes_;
        } else {
          return attributesBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
       */
      public Builder setAttributes(com.spotify.playlist4.Playlist4ApiProto.ListAttributes value) {
        if (attributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          attributes_ = value;
          onChanged();
        } else {
          attributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
       */
      public Builder setAttributes(
          com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder builderForValue) {
        if (attributesBuilder_ == null) {
          attributes_ = builderForValue.build();
          onChanged();
        } else {
          attributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
       */
      public Builder mergeAttributes(com.spotify.playlist4.Playlist4ApiProto.ListAttributes value) {
        if (attributesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              attributes_ != null &&
              attributes_ != com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance()) {
            attributes_ =
              com.spotify.playlist4.Playlist4ApiProto.ListAttributes.newBuilder(attributes_).mergeFrom(value).buildPartial();
          } else {
            attributes_ = value;
          }
          onChanged();
        } else {
          attributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
       */
      public Builder clearAttributes() {
        if (attributesBuilder_ == null) {
          attributes_ = null;
          onChanged();
        } else {
          attributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder getAttributesBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getAttributesFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder getAttributesOrBuilder() {
        if (attributesBuilder_ != null) {
          return attributesBuilder_.getMessageOrBuilder();
        } else {
          return attributes_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : attributes_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListAttributes, com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder> 
          getAttributesFieldBuilder() {
        if (attributesBuilder_ == null) {
          attributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.ListAttributes, com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder>(
                  getAttributes(),
                  getParentForChildren(),
                  isClean());
          attributes_ = null;
        }
        return attributesBuilder_;
      }

      private int length_ ;
      /**
       * <code>optional int32 length = 3;</code>
       * @return Whether the length field is set.
       */
      public boolean hasLength() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional int32 length = 3;</code>
       * @return The length.
       */
      public int getLength() {
        return length_;
      }
      /**
       * <code>optional int32 length = 3;</code>
       * @param value The length to set.
       * @return This builder for chaining.
       */
      public Builder setLength(int value) {
        bitField0_ |= 0x00000004;
        length_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 length = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearLength() {
        bitField0_ = (bitField0_ & ~0x00000004);
        length_ = 0;
        onChanged();
        return this;
      }

      private long timestamp_ ;
      /**
       * <code>optional int64 timestamp = 4;</code>
       * @return Whether the timestamp field is set.
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional int64 timestamp = 4;</code>
       * @return The timestamp.
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>optional int64 timestamp = 4;</code>
       * @param value The timestamp to set.
       * @return This builder for chaining.
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000008;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 timestamp = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000008);
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object ownerUsername_ = "";
      /**
       * <code>optional string owner_username = 5;</code>
       * @return Whether the ownerUsername field is set.
       */
      public boolean hasOwnerUsername() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional string owner_username = 5;</code>
       * @return The ownerUsername.
       */
      public java.lang.String getOwnerUsername() {
        java.lang.Object ref = ownerUsername_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            ownerUsername_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string owner_username = 5;</code>
       * @return The bytes for ownerUsername.
       */
      public com.google.protobuf.ByteString
          getOwnerUsernameBytes() {
        java.lang.Object ref = ownerUsername_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          ownerUsername_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string owner_username = 5;</code>
       * @param value The ownerUsername to set.
       * @return This builder for chaining.
       */
      public Builder setOwnerUsername(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        ownerUsername_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string owner_username = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearOwnerUsername() {
        bitField0_ = (bitField0_ & ~0x00000010);
        ownerUsername_ = getDefaultInstance().getOwnerUsername();
        onChanged();
        return this;
      }
      /**
       * <code>optional string owner_username = 5;</code>
       * @param value The bytes for ownerUsername to set.
       * @return This builder for chaining.
       */
      public Builder setOwnerUsernameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        ownerUsername_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.MetaItem)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.MetaItem)
    private static final com.spotify.playlist4.Playlist4ApiProto.MetaItem DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.MetaItem();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.MetaItem getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<MetaItem>
        PARSER = new com.google.protobuf.AbstractParser<MetaItem>() {
      @java.lang.Override
      public MetaItem parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<MetaItem> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<MetaItem> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.MetaItem getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ListItemsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.ListItems)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required int32 pos = 1;</code>
     * @return Whether the pos field is set.
     */
    boolean hasPos();
    /**
     * <code>required int32 pos = 1;</code>
     * @return The pos.
     */
    int getPos();

    /**
     * <code>required bool truncated = 2;</code>
     * @return Whether the truncated field is set.
     */
    boolean hasTruncated();
    /**
     * <code>required bool truncated = 2;</code>
     * @return The truncated.
     */
    boolean getTruncated();

    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> 
        getItemsList();
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.Item getItems(int index);
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    int getItemsCount();
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
        getItemsOrBuilderList();
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder getItemsOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.MetaItem> 
        getMetaItemsList();
    /**
     * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.MetaItem getMetaItems(int index);
    /**
     * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
     */
    int getMetaItemsCount();
    /**
     * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
     */
    java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.MetaItemOrBuilder> 
        getMetaItemsOrBuilderList();
    /**
     * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.MetaItemOrBuilder getMetaItemsOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.ListItems}
   */
  public  static final class ListItems extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.ListItems)
      ListItemsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ListItems.newBuilder() to construct.
    private ListItems(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ListItems() {
      items_ = java.util.Collections.emptyList();
      metaItems_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ListItems();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListItems_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListItems_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.ListItems.class, com.spotify.playlist4.Playlist4ApiProto.ListItems.Builder.class);
    }

    private int bitField0_;
    public static final int POS_FIELD_NUMBER = 1;
    private int pos_;
    /**
     * <code>required int32 pos = 1;</code>
     * @return Whether the pos field is set.
     */
    public boolean hasPos() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required int32 pos = 1;</code>
     * @return The pos.
     */
    public int getPos() {
      return pos_;
    }

    public static final int TRUNCATED_FIELD_NUMBER = 2;
    private boolean truncated_;
    /**
     * <code>required bool truncated = 2;</code>
     * @return Whether the truncated field is set.
     */
    public boolean hasTruncated() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required bool truncated = 2;</code>
     * @return The truncated.
     */
    public boolean getTruncated() {
      return truncated_;
    }

    public static final int ITEMS_FIELD_NUMBER = 3;
    private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> items_;
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> getItemsList() {
      return items_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
        getItemsOrBuilderList() {
      return items_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    public int getItemsCount() {
      return items_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.Item getItems(int index) {
      return items_.get(index);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder getItemsOrBuilder(
        int index) {
      return items_.get(index);
    }

    public static final int META_ITEMS_FIELD_NUMBER = 4;
    private java.util.List<com.spotify.playlist4.Playlist4ApiProto.MetaItem> metaItems_;
    /**
     * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.MetaItem> getMetaItemsList() {
      return metaItems_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
     */
    public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.MetaItemOrBuilder> 
        getMetaItemsOrBuilderList() {
      return metaItems_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
     */
    public int getMetaItemsCount() {
      return metaItems_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.MetaItem getMetaItems(int index) {
      return metaItems_.get(index);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.MetaItemOrBuilder getMetaItemsOrBuilder(
        int index) {
      return metaItems_.get(index);
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListItems parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.ListItems prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.ListItems}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.ListItems)
        com.spotify.playlist4.Playlist4ApiProto.ListItemsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListItems_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListItems_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.ListItems.class, com.spotify.playlist4.Playlist4ApiProto.ListItems.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.ListItems.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getItemsFieldBuilder();
          getMetaItemsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        pos_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        truncated_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (itemsBuilder_ == null) {
          items_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          itemsBuilder_.clear();
        }
        if (metaItemsBuilder_ == null) {
          metaItems_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          metaItemsBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListItems_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListItems getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.ListItems.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListItems build() {
        com.spotify.playlist4.Playlist4ApiProto.ListItems result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListItems buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.ListItems result = new com.spotify.playlist4.Playlist4ApiProto.ListItems(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.pos_ = pos_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.truncated_ = truncated_;
          to_bitField0_ |= 0x00000002;
        }
        if (itemsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0)) {
            items_ = java.util.Collections.unmodifiableList(items_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.items_ = items_;
        } else {
          result.items_ = itemsBuilder_.build();
        }
        if (metaItemsBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0)) {
            metaItems_ = java.util.Collections.unmodifiableList(metaItems_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.metaItems_ = metaItems_;
        } else {
          result.metaItems_ = metaItemsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private int pos_ ;
      /**
       * <code>required int32 pos = 1;</code>
       * @return Whether the pos field is set.
       */
      public boolean hasPos() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required int32 pos = 1;</code>
       * @return The pos.
       */
      public int getPos() {
        return pos_;
      }
      /**
       * <code>required int32 pos = 1;</code>
       * @param value The pos to set.
       * @return This builder for chaining.
       */
      public Builder setPos(int value) {
        bitField0_ |= 0x00000001;
        pos_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 pos = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearPos() {
        bitField0_ = (bitField0_ & ~0x00000001);
        pos_ = 0;
        onChanged();
        return this;
      }

      private boolean truncated_ ;
      /**
       * <code>required bool truncated = 2;</code>
       * @return Whether the truncated field is set.
       */
      public boolean hasTruncated() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required bool truncated = 2;</code>
       * @return The truncated.
       */
      public boolean getTruncated() {
        return truncated_;
      }
      /**
       * <code>required bool truncated = 2;</code>
       * @param value The truncated to set.
       * @return This builder for chaining.
       */
      public Builder setTruncated(boolean value) {
        bitField0_ |= 0x00000002;
        truncated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool truncated = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTruncated() {
        bitField0_ = (bitField0_ & ~0x00000002);
        truncated_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> items_ =
        java.util.Collections.emptyList();
      private void ensureItemsIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          items_ = new java.util.ArrayList<com.spotify.playlist4.Playlist4ApiProto.Item>(items_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Item, com.spotify.playlist4.Playlist4ApiProto.Item.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> itemsBuilder_;

      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> getItemsList() {
        if (itemsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(items_);
        } else {
          return itemsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public int getItemsCount() {
        if (itemsBuilder_ == null) {
          return items_.size();
        } else {
          return itemsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item getItems(int index) {
        if (itemsBuilder_ == null) {
          return items_.get(index);
        } else {
          return itemsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder setItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item value) {
        if (itemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureItemsIsMutable();
          items_.set(index, value);
          onChanged();
        } else {
          itemsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder setItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item.Builder builderForValue) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.set(index, builderForValue.build());
          onChanged();
        } else {
          itemsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder addItems(com.spotify.playlist4.Playlist4ApiProto.Item value) {
        if (itemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureItemsIsMutable();
          items_.add(value);
          onChanged();
        } else {
          itemsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder addItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item value) {
        if (itemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureItemsIsMutable();
          items_.add(index, value);
          onChanged();
        } else {
          itemsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder addItems(
          com.spotify.playlist4.Playlist4ApiProto.Item.Builder builderForValue) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.add(builderForValue.build());
          onChanged();
        } else {
          itemsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder addItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item.Builder builderForValue) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.add(index, builderForValue.build());
          onChanged();
        } else {
          itemsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder addAllItems(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.Item> values) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, items_);
          onChanged();
        } else {
          itemsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder clearItems() {
        if (itemsBuilder_ == null) {
          items_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          itemsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder removeItems(int index) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.remove(index);
          onChanged();
        } else {
          itemsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item.Builder getItemsBuilder(
          int index) {
        return getItemsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder getItemsOrBuilder(
          int index) {
        if (itemsBuilder_ == null) {
          return items_.get(index);  } else {
          return itemsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
           getItemsOrBuilderList() {
        if (itemsBuilder_ != null) {
          return itemsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(items_);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item.Builder addItemsBuilder() {
        return getItemsFieldBuilder().addBuilder(
            com.spotify.playlist4.Playlist4ApiProto.Item.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item.Builder addItemsBuilder(
          int index) {
        return getItemsFieldBuilder().addBuilder(
            index, com.spotify.playlist4.Playlist4ApiProto.Item.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item.Builder> 
           getItemsBuilderList() {
        return getItemsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Item, com.spotify.playlist4.Playlist4ApiProto.Item.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
          getItemsFieldBuilder() {
        if (itemsBuilder_ == null) {
          itemsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Item, com.spotify.playlist4.Playlist4ApiProto.Item.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder>(
                  items_,
                  ((bitField0_ & 0x00000004) != 0),
                  getParentForChildren(),
                  isClean());
          items_ = null;
        }
        return itemsBuilder_;
      }

      private java.util.List<com.spotify.playlist4.Playlist4ApiProto.MetaItem> metaItems_ =
        java.util.Collections.emptyList();
      private void ensureMetaItemsIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          metaItems_ = new java.util.ArrayList<com.spotify.playlist4.Playlist4ApiProto.MetaItem>(metaItems_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.MetaItem, com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder, com.spotify.playlist4.Playlist4ApiProto.MetaItemOrBuilder> metaItemsBuilder_;

      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.MetaItem> getMetaItemsList() {
        if (metaItemsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(metaItems_);
        } else {
          return metaItemsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public int getMetaItemsCount() {
        if (metaItemsBuilder_ == null) {
          return metaItems_.size();
        } else {
          return metaItemsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.MetaItem getMetaItems(int index) {
        if (metaItemsBuilder_ == null) {
          return metaItems_.get(index);
        } else {
          return metaItemsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public Builder setMetaItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.MetaItem value) {
        if (metaItemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetaItemsIsMutable();
          metaItems_.set(index, value);
          onChanged();
        } else {
          metaItemsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public Builder setMetaItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder builderForValue) {
        if (metaItemsBuilder_ == null) {
          ensureMetaItemsIsMutable();
          metaItems_.set(index, builderForValue.build());
          onChanged();
        } else {
          metaItemsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public Builder addMetaItems(com.spotify.playlist4.Playlist4ApiProto.MetaItem value) {
        if (metaItemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetaItemsIsMutable();
          metaItems_.add(value);
          onChanged();
        } else {
          metaItemsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public Builder addMetaItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.MetaItem value) {
        if (metaItemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetaItemsIsMutable();
          metaItems_.add(index, value);
          onChanged();
        } else {
          metaItemsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public Builder addMetaItems(
          com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder builderForValue) {
        if (metaItemsBuilder_ == null) {
          ensureMetaItemsIsMutable();
          metaItems_.add(builderForValue.build());
          onChanged();
        } else {
          metaItemsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public Builder addMetaItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder builderForValue) {
        if (metaItemsBuilder_ == null) {
          ensureMetaItemsIsMutable();
          metaItems_.add(index, builderForValue.build());
          onChanged();
        } else {
          metaItemsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public Builder addAllMetaItems(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.MetaItem> values) {
        if (metaItemsBuilder_ == null) {
          ensureMetaItemsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, metaItems_);
          onChanged();
        } else {
          metaItemsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public Builder clearMetaItems() {
        if (metaItemsBuilder_ == null) {
          metaItems_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          metaItemsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public Builder removeMetaItems(int index) {
        if (metaItemsBuilder_ == null) {
          ensureMetaItemsIsMutable();
          metaItems_.remove(index);
          onChanged();
        } else {
          metaItemsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder getMetaItemsBuilder(
          int index) {
        return getMetaItemsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.MetaItemOrBuilder getMetaItemsOrBuilder(
          int index) {
        if (metaItemsBuilder_ == null) {
          return metaItems_.get(index);  } else {
          return metaItemsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.MetaItemOrBuilder> 
           getMetaItemsOrBuilderList() {
        if (metaItemsBuilder_ != null) {
          return metaItemsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(metaItems_);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder addMetaItemsBuilder() {
        return getMetaItemsFieldBuilder().addBuilder(
            com.spotify.playlist4.Playlist4ApiProto.MetaItem.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder addMetaItemsBuilder(
          int index) {
        return getMetaItemsFieldBuilder().addBuilder(
            index, com.spotify.playlist4.Playlist4ApiProto.MetaItem.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.MetaItem meta_items = 4;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder> 
           getMetaItemsBuilderList() {
        return getMetaItemsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.MetaItem, com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder, com.spotify.playlist4.Playlist4ApiProto.MetaItemOrBuilder> 
          getMetaItemsFieldBuilder() {
        if (metaItemsBuilder_ == null) {
          metaItemsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.MetaItem, com.spotify.playlist4.Playlist4ApiProto.MetaItem.Builder, com.spotify.playlist4.Playlist4ApiProto.MetaItemOrBuilder>(
                  metaItems_,
                  ((bitField0_ & 0x00000008) != 0),
                  getParentForChildren(),
                  isClean());
          metaItems_ = null;
        }
        return metaItemsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.ListItems)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.ListItems)
    private static final com.spotify.playlist4.Playlist4ApiProto.ListItems DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.ListItems();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ListItems getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ListItems>
        PARSER = new com.google.protobuf.AbstractParser<ListItems>() {
      @java.lang.Override
      public ListItems parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<ListItems> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ListItems> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.ListItems getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface FormatListAttributeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.FormatListAttribute)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string key = 1;</code>
     * @return Whether the key field is set.
     */
    boolean hasKey();
    /**
     * <code>optional string key = 1;</code>
     * @return The key.
     */
    java.lang.String getKey();
    /**
     * <code>optional string key = 1;</code>
     * @return The bytes for key.
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * <code>optional string value = 2;</code>
     * @return Whether the value field is set.
     */
    boolean hasValue();
    /**
     * <code>optional string value = 2;</code>
     * @return The value.
     */
    java.lang.String getValue();
    /**
     * <code>optional string value = 2;</code>
     * @return The bytes for value.
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.FormatListAttribute}
   */
  public  static final class FormatListAttribute extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.FormatListAttribute)
      FormatListAttributeOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use FormatListAttribute.newBuilder() to construct.
    private FormatListAttribute(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private FormatListAttribute() {
      key_ = "";
      value_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new FormatListAttribute();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_FormatListAttribute_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_FormatListAttribute_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.class, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder.class);
    }

    private int bitField0_;
    public static final int KEY_FIELD_NUMBER = 1;
    private volatile java.lang.Object key_;
    /**
     * <code>optional string key = 1;</code>
     * @return Whether the key field is set.
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string key = 1;</code>
     * @return The key.
     */
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          key_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string key = 1;</code>
     * @return The bytes for key.
     */
    public com.google.protobuf.ByteString
        getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private volatile java.lang.Object value_;
    /**
     * <code>optional string value = 2;</code>
     * @return Whether the value field is set.
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string value = 2;</code>
     * @return The value.
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string value = 2;</code>
     * @return The bytes for value.
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.FormatListAttribute}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.FormatListAttribute)
        com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_FormatListAttribute_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_FormatListAttribute_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.class, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        key_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_FormatListAttribute_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute build() {
        com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute result = new com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.key_ = key_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private java.lang.Object key_ = "";
      /**
       * <code>optional string key = 1;</code>
       * @return Whether the key field is set.
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional string key = 1;</code>
       * @return The key.
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            key_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string key = 1;</code>
       * @return The bytes for key.
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string key = 1;</code>
       * @param value The key to set.
       * @return This builder for chaining.
       */
      public Builder setKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string key = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * <code>optional string key = 1;</code>
       * @param value The bytes for key to set.
       * @return This builder for chaining.
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object value_ = "";
      /**
       * <code>optional string value = 2;</code>
       * @return Whether the value field is set.
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string value = 2;</code>
       * @return The value.
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            value_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       * @return The bytes for value.
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       * @param value The value to set.
       * @return This builder for chaining.
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       * @param value The bytes for value to set.
       * @return This builder for chaining.
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.FormatListAttribute)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.FormatListAttribute)
    private static final com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<FormatListAttribute>
        PARSER = new com.google.protobuf.AbstractParser<FormatListAttribute>() {
      @java.lang.Override
      public FormatListAttribute parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<FormatListAttribute> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<FormatListAttribute> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ListAttributesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.ListAttributes)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string name = 1;</code>
     * @return Whether the name field is set.
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     * @return The name.
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>optional string description = 2;</code>
     * @return Whether the description field is set.
     */
    boolean hasDescription();
    /**
     * <code>optional string description = 2;</code>
     * @return The description.
     */
    java.lang.String getDescription();
    /**
     * <code>optional string description = 2;</code>
     * @return The bytes for description.
     */
    com.google.protobuf.ByteString
        getDescriptionBytes();

    /**
     * <code>optional bytes picture = 3;</code>
     * @return Whether the picture field is set.
     */
    boolean hasPicture();
    /**
     * <code>optional bytes picture = 3;</code>
     * @return The picture.
     */
    com.google.protobuf.ByteString getPicture();

    /**
     * <code>optional bool collaborative = 4;</code>
     * @return Whether the collaborative field is set.
     */
    boolean hasCollaborative();
    /**
     * <code>optional bool collaborative = 4;</code>
     * @return The collaborative.
     */
    boolean getCollaborative();

    /**
     * <code>optional string pl3_version = 5;</code>
     * @return Whether the pl3Version field is set.
     */
    boolean hasPl3Version();
    /**
     * <code>optional string pl3_version = 5;</code>
     * @return The pl3Version.
     */
    java.lang.String getPl3Version();
    /**
     * <code>optional string pl3_version = 5;</code>
     * @return The bytes for pl3Version.
     */
    com.google.protobuf.ByteString
        getPl3VersionBytes();

    /**
     * <code>optional bool deleted_by_owner = 6;</code>
     * @return Whether the deletedByOwner field is set.
     */
    boolean hasDeletedByOwner();
    /**
     * <code>optional bool deleted_by_owner = 6;</code>
     * @return The deletedByOwner.
     */
    boolean getDeletedByOwner();

    /**
     * <code>optional string client_id = 10;</code>
     * @return Whether the clientId field is set.
     */
    boolean hasClientId();
    /**
     * <code>optional string client_id = 10;</code>
     * @return The clientId.
     */
    java.lang.String getClientId();
    /**
     * <code>optional string client_id = 10;</code>
     * @return The bytes for clientId.
     */
    com.google.protobuf.ByteString
        getClientIdBytes();

    /**
     * <code>optional string format = 11;</code>
     * @return Whether the format field is set.
     */
    boolean hasFormat();
    /**
     * <code>optional string format = 11;</code>
     * @return The format.
     */
    java.lang.String getFormat();
    /**
     * <code>optional string format = 11;</code>
     * @return The bytes for format.
     */
    com.google.protobuf.ByteString
        getFormatBytes();

    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> 
        getFormatAttributesList();
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute getFormatAttributes(int index);
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
     */
    int getFormatAttributesCount();
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
     */
    java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder> 
        getFormatAttributesOrBuilderList();
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder getFormatAttributesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.ListAttributes}
   */
  public  static final class ListAttributes extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.ListAttributes)
      ListAttributesOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ListAttributes.newBuilder() to construct.
    private ListAttributes(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ListAttributes() {
      name_ = "";
      description_ = "";
      picture_ = com.google.protobuf.ByteString.EMPTY;
      pl3Version_ = "";
      clientId_ = "";
      format_ = "";
      formatAttributes_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ListAttributes();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListAttributes_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListAttributes_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.ListAttributes.class, com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder.class);
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     * @return Whether the name field is set.
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string name = 1;</code>
     * @return The name.
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     * @return The bytes for name.
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DESCRIPTION_FIELD_NUMBER = 2;
    private volatile java.lang.Object description_;
    /**
     * <code>optional string description = 2;</code>
     * @return Whether the description field is set.
     */
    public boolean hasDescription() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string description = 2;</code>
     * @return The description.
     */
    public java.lang.String getDescription() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          description_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string description = 2;</code>
     * @return The bytes for description.
     */
    public com.google.protobuf.ByteString
        getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PICTURE_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString picture_;
    /**
     * <code>optional bytes picture = 3;</code>
     * @return Whether the picture field is set.
     */
    public boolean hasPicture() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional bytes picture = 3;</code>
     * @return The picture.
     */
    public com.google.protobuf.ByteString getPicture() {
      return picture_;
    }

    public static final int COLLABORATIVE_FIELD_NUMBER = 4;
    private boolean collaborative_;
    /**
     * <code>optional bool collaborative = 4;</code>
     * @return Whether the collaborative field is set.
     */
    public boolean hasCollaborative() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional bool collaborative = 4;</code>
     * @return The collaborative.
     */
    public boolean getCollaborative() {
      return collaborative_;
    }

    public static final int PL3_VERSION_FIELD_NUMBER = 5;
    private volatile java.lang.Object pl3Version_;
    /**
     * <code>optional string pl3_version = 5;</code>
     * @return Whether the pl3Version field is set.
     */
    public boolean hasPl3Version() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional string pl3_version = 5;</code>
     * @return The pl3Version.
     */
    public java.lang.String getPl3Version() {
      java.lang.Object ref = pl3Version_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          pl3Version_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string pl3_version = 5;</code>
     * @return The bytes for pl3Version.
     */
    public com.google.protobuf.ByteString
        getPl3VersionBytes() {
      java.lang.Object ref = pl3Version_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        pl3Version_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DELETED_BY_OWNER_FIELD_NUMBER = 6;
    private boolean deletedByOwner_;
    /**
     * <code>optional bool deleted_by_owner = 6;</code>
     * @return Whether the deletedByOwner field is set.
     */
    public boolean hasDeletedByOwner() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional bool deleted_by_owner = 6;</code>
     * @return The deletedByOwner.
     */
    public boolean getDeletedByOwner() {
      return deletedByOwner_;
    }

    public static final int CLIENT_ID_FIELD_NUMBER = 10;
    private volatile java.lang.Object clientId_;
    /**
     * <code>optional string client_id = 10;</code>
     * @return Whether the clientId field is set.
     */
    public boolean hasClientId() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional string client_id = 10;</code>
     * @return The clientId.
     */
    public java.lang.String getClientId() {
      java.lang.Object ref = clientId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          clientId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string client_id = 10;</code>
     * @return The bytes for clientId.
     */
    public com.google.protobuf.ByteString
        getClientIdBytes() {
      java.lang.Object ref = clientId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        clientId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FORMAT_FIELD_NUMBER = 11;
    private volatile java.lang.Object format_;
    /**
     * <code>optional string format = 11;</code>
     * @return Whether the format field is set.
     */
    public boolean hasFormat() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional string format = 11;</code>
     * @return The format.
     */
    public java.lang.String getFormat() {
      java.lang.Object ref = format_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          format_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string format = 11;</code>
     * @return The bytes for format.
     */
    public com.google.protobuf.ByteString
        getFormatBytes() {
      java.lang.Object ref = format_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        format_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FORMAT_ATTRIBUTES_FIELD_NUMBER = 12;
    private java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> formatAttributes_;
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> getFormatAttributesList() {
      return formatAttributes_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
     */
    public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder> 
        getFormatAttributesOrBuilderList() {
      return formatAttributes_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
     */
    public int getFormatAttributesCount() {
      return formatAttributes_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute getFormatAttributes(int index) {
      return formatAttributes_.get(index);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder getFormatAttributesOrBuilder(
        int index) {
      return formatAttributes_.get(index);
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.ListAttributes prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.ListAttributes}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.ListAttributes)
        com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListAttributes_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListAttributes_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.ListAttributes.class, com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.ListAttributes.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getFormatAttributesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        description_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        picture_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        collaborative_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        pl3Version_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        deletedByOwner_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        clientId_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        format_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        if (formatAttributesBuilder_ == null) {
          formatAttributes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          formatAttributesBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListAttributes_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributes getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributes build() {
        com.spotify.playlist4.Playlist4ApiProto.ListAttributes result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributes buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.ListAttributes result = new com.spotify.playlist4.Playlist4ApiProto.ListAttributes(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.description_ = description_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.picture_ = picture_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.collaborative_ = collaborative_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.pl3Version_ = pl3Version_;
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.deletedByOwner_ = deletedByOwner_;
          to_bitField0_ |= 0x00000020;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          to_bitField0_ |= 0x00000040;
        }
        result.clientId_ = clientId_;
        if (((from_bitField0_ & 0x00000080) != 0)) {
          to_bitField0_ |= 0x00000080;
        }
        result.format_ = format_;
        if (formatAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000100) != 0)) {
            formatAttributes_ = java.util.Collections.unmodifiableList(formatAttributes_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.formatAttributes_ = formatAttributes_;
        } else {
          result.formatAttributes_ = formatAttributesBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       * @return Whether the name field is set.
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional string name = 1;</code>
       * @return The name.
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       * @return The bytes for name.
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       * @param value The name to set.
       * @return This builder for chaining.
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       * @param value The bytes for name to set.
       * @return This builder for chaining.
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object description_ = "";
      /**
       * <code>optional string description = 2;</code>
       * @return Whether the description field is set.
       */
      public boolean hasDescription() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string description = 2;</code>
       * @return The description.
       */
      public java.lang.String getDescription() {
        java.lang.Object ref = description_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            description_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string description = 2;</code>
       * @return The bytes for description.
       */
      public com.google.protobuf.ByteString
          getDescriptionBytes() {
        java.lang.Object ref = description_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          description_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string description = 2;</code>
       * @param value The description to set.
       * @return This builder for chaining.
       */
      public Builder setDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        description_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string description = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearDescription() {
        bitField0_ = (bitField0_ & ~0x00000002);
        description_ = getDefaultInstance().getDescription();
        onChanged();
        return this;
      }
      /**
       * <code>optional string description = 2;</code>
       * @param value The bytes for description to set.
       * @return This builder for chaining.
       */
      public Builder setDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        description_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString picture_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes picture = 3;</code>
       * @return Whether the picture field is set.
       */
      public boolean hasPicture() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional bytes picture = 3;</code>
       * @return The picture.
       */
      public com.google.protobuf.ByteString getPicture() {
        return picture_;
      }
      /**
       * <code>optional bytes picture = 3;</code>
       * @param value The picture to set.
       * @return This builder for chaining.
       */
      public Builder setPicture(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        picture_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes picture = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearPicture() {
        bitField0_ = (bitField0_ & ~0x00000004);
        picture_ = getDefaultInstance().getPicture();
        onChanged();
        return this;
      }

      private boolean collaborative_ ;
      /**
       * <code>optional bool collaborative = 4;</code>
       * @return Whether the collaborative field is set.
       */
      public boolean hasCollaborative() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional bool collaborative = 4;</code>
       * @return The collaborative.
       */
      public boolean getCollaborative() {
        return collaborative_;
      }
      /**
       * <code>optional bool collaborative = 4;</code>
       * @param value The collaborative to set.
       * @return This builder for chaining.
       */
      public Builder setCollaborative(boolean value) {
        bitField0_ |= 0x00000008;
        collaborative_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool collaborative = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearCollaborative() {
        bitField0_ = (bitField0_ & ~0x00000008);
        collaborative_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object pl3Version_ = "";
      /**
       * <code>optional string pl3_version = 5;</code>
       * @return Whether the pl3Version field is set.
       */
      public boolean hasPl3Version() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional string pl3_version = 5;</code>
       * @return The pl3Version.
       */
      public java.lang.String getPl3Version() {
        java.lang.Object ref = pl3Version_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            pl3Version_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string pl3_version = 5;</code>
       * @return The bytes for pl3Version.
       */
      public com.google.protobuf.ByteString
          getPl3VersionBytes() {
        java.lang.Object ref = pl3Version_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          pl3Version_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string pl3_version = 5;</code>
       * @param value The pl3Version to set.
       * @return This builder for chaining.
       */
      public Builder setPl3Version(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        pl3Version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string pl3_version = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearPl3Version() {
        bitField0_ = (bitField0_ & ~0x00000010);
        pl3Version_ = getDefaultInstance().getPl3Version();
        onChanged();
        return this;
      }
      /**
       * <code>optional string pl3_version = 5;</code>
       * @param value The bytes for pl3Version to set.
       * @return This builder for chaining.
       */
      public Builder setPl3VersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        pl3Version_ = value;
        onChanged();
        return this;
      }

      private boolean deletedByOwner_ ;
      /**
       * <code>optional bool deleted_by_owner = 6;</code>
       * @return Whether the deletedByOwner field is set.
       */
      public boolean hasDeletedByOwner() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional bool deleted_by_owner = 6;</code>
       * @return The deletedByOwner.
       */
      public boolean getDeletedByOwner() {
        return deletedByOwner_;
      }
      /**
       * <code>optional bool deleted_by_owner = 6;</code>
       * @param value The deletedByOwner to set.
       * @return This builder for chaining.
       */
      public Builder setDeletedByOwner(boolean value) {
        bitField0_ |= 0x00000020;
        deletedByOwner_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool deleted_by_owner = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearDeletedByOwner() {
        bitField0_ = (bitField0_ & ~0x00000020);
        deletedByOwner_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object clientId_ = "";
      /**
       * <code>optional string client_id = 10;</code>
       * @return Whether the clientId field is set.
       */
      public boolean hasClientId() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional string client_id = 10;</code>
       * @return The clientId.
       */
      public java.lang.String getClientId() {
        java.lang.Object ref = clientId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            clientId_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string client_id = 10;</code>
       * @return The bytes for clientId.
       */
      public com.google.protobuf.ByteString
          getClientIdBytes() {
        java.lang.Object ref = clientId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          clientId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string client_id = 10;</code>
       * @param value The clientId to set.
       * @return This builder for chaining.
       */
      public Builder setClientId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        clientId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string client_id = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearClientId() {
        bitField0_ = (bitField0_ & ~0x00000040);
        clientId_ = getDefaultInstance().getClientId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string client_id = 10;</code>
       * @param value The bytes for clientId to set.
       * @return This builder for chaining.
       */
      public Builder setClientIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        clientId_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object format_ = "";
      /**
       * <code>optional string format = 11;</code>
       * @return Whether the format field is set.
       */
      public boolean hasFormat() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional string format = 11;</code>
       * @return The format.
       */
      public java.lang.String getFormat() {
        java.lang.Object ref = format_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            format_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string format = 11;</code>
       * @return The bytes for format.
       */
      public com.google.protobuf.ByteString
          getFormatBytes() {
        java.lang.Object ref = format_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          format_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string format = 11;</code>
       * @param value The format to set.
       * @return This builder for chaining.
       */
      public Builder setFormat(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        format_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string format = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearFormat() {
        bitField0_ = (bitField0_ & ~0x00000080);
        format_ = getDefaultInstance().getFormat();
        onChanged();
        return this;
      }
      /**
       * <code>optional string format = 11;</code>
       * @param value The bytes for format to set.
       * @return This builder for chaining.
       */
      public Builder setFormatBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        format_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> formatAttributes_ =
        java.util.Collections.emptyList();
      private void ensureFormatAttributesIsMutable() {
        if (!((bitField0_ & 0x00000100) != 0)) {
          formatAttributes_ = new java.util.ArrayList<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute>(formatAttributes_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder, com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder> formatAttributesBuilder_;

      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> getFormatAttributesList() {
        if (formatAttributesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(formatAttributes_);
        } else {
          return formatAttributesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public int getFormatAttributesCount() {
        if (formatAttributesBuilder_ == null) {
          return formatAttributes_.size();
        } else {
          return formatAttributesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute getFormatAttributes(int index) {
        if (formatAttributesBuilder_ == null) {
          return formatAttributes_.get(index);
        } else {
          return formatAttributesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public Builder setFormatAttributes(
          int index, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute value) {
        if (formatAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFormatAttributesIsMutable();
          formatAttributes_.set(index, value);
          onChanged();
        } else {
          formatAttributesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public Builder setFormatAttributes(
          int index, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder builderForValue) {
        if (formatAttributesBuilder_ == null) {
          ensureFormatAttributesIsMutable();
          formatAttributes_.set(index, builderForValue.build());
          onChanged();
        } else {
          formatAttributesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public Builder addFormatAttributes(com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute value) {
        if (formatAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFormatAttributesIsMutable();
          formatAttributes_.add(value);
          onChanged();
        } else {
          formatAttributesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public Builder addFormatAttributes(
          int index, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute value) {
        if (formatAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFormatAttributesIsMutable();
          formatAttributes_.add(index, value);
          onChanged();
        } else {
          formatAttributesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public Builder addFormatAttributes(
          com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder builderForValue) {
        if (formatAttributesBuilder_ == null) {
          ensureFormatAttributesIsMutable();
          formatAttributes_.add(builderForValue.build());
          onChanged();
        } else {
          formatAttributesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public Builder addFormatAttributes(
          int index, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder builderForValue) {
        if (formatAttributesBuilder_ == null) {
          ensureFormatAttributesIsMutable();
          formatAttributes_.add(index, builderForValue.build());
          onChanged();
        } else {
          formatAttributesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public Builder addAllFormatAttributes(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> values) {
        if (formatAttributesBuilder_ == null) {
          ensureFormatAttributesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, formatAttributes_);
          onChanged();
        } else {
          formatAttributesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public Builder clearFormatAttributes() {
        if (formatAttributesBuilder_ == null) {
          formatAttributes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          formatAttributesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public Builder removeFormatAttributes(int index) {
        if (formatAttributesBuilder_ == null) {
          ensureFormatAttributesIsMutable();
          formatAttributes_.remove(index);
          onChanged();
        } else {
          formatAttributesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder getFormatAttributesBuilder(
          int index) {
        return getFormatAttributesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder getFormatAttributesOrBuilder(
          int index) {
        if (formatAttributesBuilder_ == null) {
          return formatAttributes_.get(index);  } else {
          return formatAttributesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder> 
           getFormatAttributesOrBuilderList() {
        if (formatAttributesBuilder_ != null) {
          return formatAttributesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(formatAttributes_);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder addFormatAttributesBuilder() {
        return getFormatAttributesFieldBuilder().addBuilder(
            com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder addFormatAttributesBuilder(
          int index) {
        return getFormatAttributesFieldBuilder().addBuilder(
            index, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 12;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder> 
           getFormatAttributesBuilderList() {
        return getFormatAttributesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder, com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder> 
          getFormatAttributesFieldBuilder() {
        if (formatAttributesBuilder_ == null) {
          formatAttributesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder, com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder>(
                  formatAttributes_,
                  ((bitField0_ & 0x00000100) != 0),
                  getParentForChildren(),
                  isClean());
          formatAttributes_ = null;
        }
        return formatAttributesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.ListAttributes)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.ListAttributes)
    private static final com.spotify.playlist4.Playlist4ApiProto.ListAttributes DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.ListAttributes();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributes getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ListAttributes>
        PARSER = new com.google.protobuf.AbstractParser<ListAttributes>() {
      @java.lang.Override
      public ListAttributes parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<ListAttributes> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ListAttributes> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributes getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ItemAttributesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.ItemAttributes)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string added_by = 1;</code>
     * @return Whether the addedBy field is set.
     */
    boolean hasAddedBy();
    /**
     * <code>optional string added_by = 1;</code>
     * @return The addedBy.
     */
    java.lang.String getAddedBy();
    /**
     * <code>optional string added_by = 1;</code>
     * @return The bytes for addedBy.
     */
    com.google.protobuf.ByteString
        getAddedByBytes();

    /**
     * <code>optional int64 timestamp = 2;</code>
     * @return Whether the timestamp field is set.
     */
    boolean hasTimestamp();
    /**
     * <code>optional int64 timestamp = 2;</code>
     * @return The timestamp.
     */
    long getTimestamp();

    /**
     * <code>optional int64 seen_at = 9;</code>
     * @return Whether the seenAt field is set.
     */
    boolean hasSeenAt();
    /**
     * <code>optional int64 seen_at = 9;</code>
     * @return The seenAt.
     */
    long getSeenAt();

    /**
     * <code>optional bool public = 10;</code>
     * @return Whether the public field is set.
     */
    boolean hasPublic();
    /**
     * <code>optional bool public = 10;</code>
     * @return The public.
     */
    boolean getPublic();

    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> 
        getFormatAttributesList();
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute getFormatAttributes(int index);
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
     */
    int getFormatAttributesCount();
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
     */
    java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder> 
        getFormatAttributesOrBuilderList();
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder getFormatAttributesOrBuilder(
        int index);

    /**
     * <code>optional bytes item_id = 12;</code>
     * @return Whether the itemId field is set.
     */
    boolean hasItemId();
    /**
     * <code>optional bytes item_id = 12;</code>
     * @return The itemId.
     */
    com.google.protobuf.ByteString getItemId();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.ItemAttributes}
   */
  public  static final class ItemAttributes extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.ItemAttributes)
      ItemAttributesOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ItemAttributes.newBuilder() to construct.
    private ItemAttributes(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ItemAttributes() {
      addedBy_ = "";
      formatAttributes_ = java.util.Collections.emptyList();
      itemId_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ItemAttributes();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ItemAttributes_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ItemAttributes_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.class, com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder.class);
    }

    private int bitField0_;
    public static final int ADDED_BY_FIELD_NUMBER = 1;
    private volatile java.lang.Object addedBy_;
    /**
     * <code>optional string added_by = 1;</code>
     * @return Whether the addedBy field is set.
     */
    public boolean hasAddedBy() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string added_by = 1;</code>
     * @return The addedBy.
     */
    public java.lang.String getAddedBy() {
      java.lang.Object ref = addedBy_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          addedBy_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string added_by = 1;</code>
     * @return The bytes for addedBy.
     */
    public com.google.protobuf.ByteString
        getAddedByBytes() {
      java.lang.Object ref = addedBy_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        addedBy_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 2;
    private long timestamp_;
    /**
     * <code>optional int64 timestamp = 2;</code>
     * @return Whether the timestamp field is set.
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional int64 timestamp = 2;</code>
     * @return The timestamp.
     */
    public long getTimestamp() {
      return timestamp_;
    }

    public static final int SEEN_AT_FIELD_NUMBER = 9;
    private long seenAt_;
    /**
     * <code>optional int64 seen_at = 9;</code>
     * @return Whether the seenAt field is set.
     */
    public boolean hasSeenAt() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional int64 seen_at = 9;</code>
     * @return The seenAt.
     */
    public long getSeenAt() {
      return seenAt_;
    }

    public static final int PUBLIC_FIELD_NUMBER = 10;
    private boolean public_;
    /**
     * <code>optional bool public = 10;</code>
     * @return Whether the public field is set.
     */
    public boolean hasPublic() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional bool public = 10;</code>
     * @return The public.
     */
    public boolean getPublic() {
      return public_;
    }

    public static final int FORMAT_ATTRIBUTES_FIELD_NUMBER = 11;
    private java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> formatAttributes_;
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> getFormatAttributesList() {
      return formatAttributes_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
     */
    public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder> 
        getFormatAttributesOrBuilderList() {
      return formatAttributes_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
     */
    public int getFormatAttributesCount() {
      return formatAttributes_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute getFormatAttributes(int index) {
      return formatAttributes_.get(index);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder getFormatAttributesOrBuilder(
        int index) {
      return formatAttributes_.get(index);
    }

    public static final int ITEM_ID_FIELD_NUMBER = 12;
    private com.google.protobuf.ByteString itemId_;
    /**
     * <code>optional bytes item_id = 12;</code>
     * @return Whether the itemId field is set.
     */
    public boolean hasItemId() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional bytes item_id = 12;</code>
     * @return The itemId.
     */
    public com.google.protobuf.ByteString getItemId() {
      return itemId_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.ItemAttributes prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.ItemAttributes}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.ItemAttributes)
        com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ItemAttributes_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ItemAttributes_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.class, com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getFormatAttributesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        addedBy_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        seenAt_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        public_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (formatAttributesBuilder_ == null) {
          formatAttributes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          formatAttributesBuilder_.clear();
        }
        itemId_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ItemAttributes_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributes getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributes build() {
        com.spotify.playlist4.Playlist4ApiProto.ItemAttributes result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributes buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.ItemAttributes result = new com.spotify.playlist4.Playlist4ApiProto.ItemAttributes(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.addedBy_ = addedBy_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.timestamp_ = timestamp_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.seenAt_ = seenAt_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.public_ = public_;
          to_bitField0_ |= 0x00000008;
        }
        if (formatAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0)) {
            formatAttributes_ = java.util.Collections.unmodifiableList(formatAttributes_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.formatAttributes_ = formatAttributes_;
        } else {
          result.formatAttributes_ = formatAttributesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.itemId_ = itemId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private java.lang.Object addedBy_ = "";
      /**
       * <code>optional string added_by = 1;</code>
       * @return Whether the addedBy field is set.
       */
      public boolean hasAddedBy() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional string added_by = 1;</code>
       * @return The addedBy.
       */
      public java.lang.String getAddedBy() {
        java.lang.Object ref = addedBy_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            addedBy_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string added_by = 1;</code>
       * @return The bytes for addedBy.
       */
      public com.google.protobuf.ByteString
          getAddedByBytes() {
        java.lang.Object ref = addedBy_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          addedBy_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string added_by = 1;</code>
       * @param value The addedBy to set.
       * @return This builder for chaining.
       */
      public Builder setAddedBy(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        addedBy_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string added_by = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearAddedBy() {
        bitField0_ = (bitField0_ & ~0x00000001);
        addedBy_ = getDefaultInstance().getAddedBy();
        onChanged();
        return this;
      }
      /**
       * <code>optional string added_by = 1;</code>
       * @param value The bytes for addedBy to set.
       * @return This builder for chaining.
       */
      public Builder setAddedByBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        addedBy_ = value;
        onChanged();
        return this;
      }

      private long timestamp_ ;
      /**
       * <code>optional int64 timestamp = 2;</code>
       * @return Whether the timestamp field is set.
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional int64 timestamp = 2;</code>
       * @return The timestamp.
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>optional int64 timestamp = 2;</code>
       * @param value The timestamp to set.
       * @return This builder for chaining.
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000002;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 timestamp = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000002);
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      private long seenAt_ ;
      /**
       * <code>optional int64 seen_at = 9;</code>
       * @return Whether the seenAt field is set.
       */
      public boolean hasSeenAt() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional int64 seen_at = 9;</code>
       * @return The seenAt.
       */
      public long getSeenAt() {
        return seenAt_;
      }
      /**
       * <code>optional int64 seen_at = 9;</code>
       * @param value The seenAt to set.
       * @return This builder for chaining.
       */
      public Builder setSeenAt(long value) {
        bitField0_ |= 0x00000004;
        seenAt_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 seen_at = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearSeenAt() {
        bitField0_ = (bitField0_ & ~0x00000004);
        seenAt_ = 0L;
        onChanged();
        return this;
      }

      private boolean public_ ;
      /**
       * <code>optional bool public = 10;</code>
       * @return Whether the public field is set.
       */
      public boolean hasPublic() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional bool public = 10;</code>
       * @return The public.
       */
      public boolean getPublic() {
        return public_;
      }
      /**
       * <code>optional bool public = 10;</code>
       * @param value The public to set.
       * @return This builder for chaining.
       */
      public Builder setPublic(boolean value) {
        bitField0_ |= 0x00000008;
        public_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool public = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearPublic() {
        bitField0_ = (bitField0_ & ~0x00000008);
        public_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> formatAttributes_ =
        java.util.Collections.emptyList();
      private void ensureFormatAttributesIsMutable() {
        if (!((bitField0_ & 0x00000010) != 0)) {
          formatAttributes_ = new java.util.ArrayList<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute>(formatAttributes_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder, com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder> formatAttributesBuilder_;

      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> getFormatAttributesList() {
        if (formatAttributesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(formatAttributes_);
        } else {
          return formatAttributesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public int getFormatAttributesCount() {
        if (formatAttributesBuilder_ == null) {
          return formatAttributes_.size();
        } else {
          return formatAttributesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute getFormatAttributes(int index) {
        if (formatAttributesBuilder_ == null) {
          return formatAttributes_.get(index);
        } else {
          return formatAttributesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public Builder setFormatAttributes(
          int index, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute value) {
        if (formatAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFormatAttributesIsMutable();
          formatAttributes_.set(index, value);
          onChanged();
        } else {
          formatAttributesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public Builder setFormatAttributes(
          int index, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder builderForValue) {
        if (formatAttributesBuilder_ == null) {
          ensureFormatAttributesIsMutable();
          formatAttributes_.set(index, builderForValue.build());
          onChanged();
        } else {
          formatAttributesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public Builder addFormatAttributes(com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute value) {
        if (formatAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFormatAttributesIsMutable();
          formatAttributes_.add(value);
          onChanged();
        } else {
          formatAttributesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public Builder addFormatAttributes(
          int index, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute value) {
        if (formatAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFormatAttributesIsMutable();
          formatAttributes_.add(index, value);
          onChanged();
        } else {
          formatAttributesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public Builder addFormatAttributes(
          com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder builderForValue) {
        if (formatAttributesBuilder_ == null) {
          ensureFormatAttributesIsMutable();
          formatAttributes_.add(builderForValue.build());
          onChanged();
        } else {
          formatAttributesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public Builder addFormatAttributes(
          int index, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder builderForValue) {
        if (formatAttributesBuilder_ == null) {
          ensureFormatAttributesIsMutable();
          formatAttributes_.add(index, builderForValue.build());
          onChanged();
        } else {
          formatAttributesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public Builder addAllFormatAttributes(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute> values) {
        if (formatAttributesBuilder_ == null) {
          ensureFormatAttributesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, formatAttributes_);
          onChanged();
        } else {
          formatAttributesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public Builder clearFormatAttributes() {
        if (formatAttributesBuilder_ == null) {
          formatAttributes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          formatAttributesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public Builder removeFormatAttributes(int index) {
        if (formatAttributesBuilder_ == null) {
          ensureFormatAttributesIsMutable();
          formatAttributes_.remove(index);
          onChanged();
        } else {
          formatAttributesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder getFormatAttributesBuilder(
          int index) {
        return getFormatAttributesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder getFormatAttributesOrBuilder(
          int index) {
        if (formatAttributesBuilder_ == null) {
          return formatAttributes_.get(index);  } else {
          return formatAttributesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder> 
           getFormatAttributesOrBuilderList() {
        if (formatAttributesBuilder_ != null) {
          return formatAttributesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(formatAttributes_);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder addFormatAttributesBuilder() {
        return getFormatAttributesFieldBuilder().addBuilder(
            com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder addFormatAttributesBuilder(
          int index) {
        return getFormatAttributesFieldBuilder().addBuilder(
            index, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.FormatListAttribute format_attributes = 11;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder> 
           getFormatAttributesBuilderList() {
        return getFormatAttributesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder, com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder> 
          getFormatAttributesFieldBuilder() {
        if (formatAttributesBuilder_ == null) {
          formatAttributesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute, com.spotify.playlist4.Playlist4ApiProto.FormatListAttribute.Builder, com.spotify.playlist4.Playlist4ApiProto.FormatListAttributeOrBuilder>(
                  formatAttributes_,
                  ((bitField0_ & 0x00000010) != 0),
                  getParentForChildren(),
                  isClean());
          formatAttributes_ = null;
        }
        return formatAttributesBuilder_;
      }

      private com.google.protobuf.ByteString itemId_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes item_id = 12;</code>
       * @return Whether the itemId field is set.
       */
      public boolean hasItemId() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional bytes item_id = 12;</code>
       * @return The itemId.
       */
      public com.google.protobuf.ByteString getItemId() {
        return itemId_;
      }
      /**
       * <code>optional bytes item_id = 12;</code>
       * @param value The itemId to set.
       * @return This builder for chaining.
       */
      public Builder setItemId(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        itemId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes item_id = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearItemId() {
        bitField0_ = (bitField0_ & ~0x00000020);
        itemId_ = getDefaultInstance().getItemId();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.ItemAttributes)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.ItemAttributes)
    private static final com.spotify.playlist4.Playlist4ApiProto.ItemAttributes DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.ItemAttributes();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributes getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ItemAttributes>
        PARSER = new com.google.protobuf.AbstractParser<ItemAttributes>() {
      @java.lang.Override
      public ItemAttributes parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<ItemAttributes> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ItemAttributes> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.ItemAttributes getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AddOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.Add)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional int32 from_index = 1;</code>
     * @return Whether the fromIndex field is set.
     */
    boolean hasFromIndex();
    /**
     * <code>optional int32 from_index = 1;</code>
     * @return The fromIndex.
     */
    int getFromIndex();

    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> 
        getItemsList();
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.Item getItems(int index);
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
     */
    int getItemsCount();
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
     */
    java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
        getItemsOrBuilderList();
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder getItemsOrBuilder(
        int index);

    /**
     * <code>optional bool add_last = 4;</code>
     * @return Whether the addLast field is set.
     */
    boolean hasAddLast();
    /**
     * <code>optional bool add_last = 4;</code>
     * @return The addLast.
     */
    boolean getAddLast();

    /**
     * <code>optional bool add_first = 5;</code>
     * @return Whether the addFirst field is set.
     */
    boolean hasAddFirst();
    /**
     * <code>optional bool add_first = 5;</code>
     * @return The addFirst.
     */
    boolean getAddFirst();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.Add}
   */
  public  static final class Add extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.Add)
      AddOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Add.newBuilder() to construct.
    private Add(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Add() {
      items_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Add();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Add_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Add_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.Add.class, com.spotify.playlist4.Playlist4ApiProto.Add.Builder.class);
    }

    private int bitField0_;
    public static final int FROM_INDEX_FIELD_NUMBER = 1;
    private int fromIndex_;
    /**
     * <code>optional int32 from_index = 1;</code>
     * @return Whether the fromIndex field is set.
     */
    public boolean hasFromIndex() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional int32 from_index = 1;</code>
     * @return The fromIndex.
     */
    public int getFromIndex() {
      return fromIndex_;
    }

    public static final int ITEMS_FIELD_NUMBER = 2;
    private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> items_;
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> getItemsList() {
      return items_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
     */
    public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
        getItemsOrBuilderList() {
      return items_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
     */
    public int getItemsCount() {
      return items_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.Item getItems(int index) {
      return items_.get(index);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder getItemsOrBuilder(
        int index) {
      return items_.get(index);
    }

    public static final int ADD_LAST_FIELD_NUMBER = 4;
    private boolean addLast_;
    /**
     * <code>optional bool add_last = 4;</code>
     * @return Whether the addLast field is set.
     */
    public boolean hasAddLast() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional bool add_last = 4;</code>
     * @return The addLast.
     */
    public boolean getAddLast() {
      return addLast_;
    }

    public static final int ADD_FIRST_FIELD_NUMBER = 5;
    private boolean addFirst_;
    /**
     * <code>optional bool add_first = 5;</code>
     * @return Whether the addFirst field is set.
     */
    public boolean hasAddFirst() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional bool add_first = 5;</code>
     * @return The addFirst.
     */
    public boolean getAddFirst() {
      return addFirst_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Add parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Add parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Add parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Add parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Add parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Add parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Add parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Add parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Add parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Add parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Add parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Add parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.Add prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.Add}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.Add)
        com.spotify.playlist4.Playlist4ApiProto.AddOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Add_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Add_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.Add.class, com.spotify.playlist4.Playlist4ApiProto.Add.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.Add.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getItemsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        fromIndex_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (itemsBuilder_ == null) {
          items_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          itemsBuilder_.clear();
        }
        addLast_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        addFirst_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Add_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Add getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.Add.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Add build() {
        com.spotify.playlist4.Playlist4ApiProto.Add result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Add buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.Add result = new com.spotify.playlist4.Playlist4ApiProto.Add(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.fromIndex_ = fromIndex_;
          to_bitField0_ |= 0x00000001;
        }
        if (itemsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            items_ = java.util.Collections.unmodifiableList(items_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.items_ = items_;
        } else {
          result.items_ = itemsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.addLast_ = addLast_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.addFirst_ = addFirst_;
          to_bitField0_ |= 0x00000004;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private int fromIndex_ ;
      /**
       * <code>optional int32 from_index = 1;</code>
       * @return Whether the fromIndex field is set.
       */
      public boolean hasFromIndex() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional int32 from_index = 1;</code>
       * @return The fromIndex.
       */
      public int getFromIndex() {
        return fromIndex_;
      }
      /**
       * <code>optional int32 from_index = 1;</code>
       * @param value The fromIndex to set.
       * @return This builder for chaining.
       */
      public Builder setFromIndex(int value) {
        bitField0_ |= 0x00000001;
        fromIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 from_index = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFromIndex() {
        bitField0_ = (bitField0_ & ~0x00000001);
        fromIndex_ = 0;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> items_ =
        java.util.Collections.emptyList();
      private void ensureItemsIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          items_ = new java.util.ArrayList<com.spotify.playlist4.Playlist4ApiProto.Item>(items_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Item, com.spotify.playlist4.Playlist4ApiProto.Item.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> itemsBuilder_;

      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> getItemsList() {
        if (itemsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(items_);
        } else {
          return itemsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public int getItemsCount() {
        if (itemsBuilder_ == null) {
          return items_.size();
        } else {
          return itemsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item getItems(int index) {
        if (itemsBuilder_ == null) {
          return items_.get(index);
        } else {
          return itemsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public Builder setItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item value) {
        if (itemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureItemsIsMutable();
          items_.set(index, value);
          onChanged();
        } else {
          itemsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public Builder setItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item.Builder builderForValue) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.set(index, builderForValue.build());
          onChanged();
        } else {
          itemsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public Builder addItems(com.spotify.playlist4.Playlist4ApiProto.Item value) {
        if (itemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureItemsIsMutable();
          items_.add(value);
          onChanged();
        } else {
          itemsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public Builder addItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item value) {
        if (itemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureItemsIsMutable();
          items_.add(index, value);
          onChanged();
        } else {
          itemsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public Builder addItems(
          com.spotify.playlist4.Playlist4ApiProto.Item.Builder builderForValue) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.add(builderForValue.build());
          onChanged();
        } else {
          itemsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public Builder addItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item.Builder builderForValue) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.add(index, builderForValue.build());
          onChanged();
        } else {
          itemsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public Builder addAllItems(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.Item> values) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, items_);
          onChanged();
        } else {
          itemsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public Builder clearItems() {
        if (itemsBuilder_ == null) {
          items_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          itemsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public Builder removeItems(int index) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.remove(index);
          onChanged();
        } else {
          itemsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item.Builder getItemsBuilder(
          int index) {
        return getItemsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder getItemsOrBuilder(
          int index) {
        if (itemsBuilder_ == null) {
          return items_.get(index);  } else {
          return itemsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
           getItemsOrBuilderList() {
        if (itemsBuilder_ != null) {
          return itemsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(items_);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item.Builder addItemsBuilder() {
        return getItemsFieldBuilder().addBuilder(
            com.spotify.playlist4.Playlist4ApiProto.Item.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item.Builder addItemsBuilder(
          int index) {
        return getItemsFieldBuilder().addBuilder(
            index, com.spotify.playlist4.Playlist4ApiProto.Item.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 2;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item.Builder> 
           getItemsBuilderList() {
        return getItemsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Item, com.spotify.playlist4.Playlist4ApiProto.Item.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
          getItemsFieldBuilder() {
        if (itemsBuilder_ == null) {
          itemsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Item, com.spotify.playlist4.Playlist4ApiProto.Item.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder>(
                  items_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          items_ = null;
        }
        return itemsBuilder_;
      }

      private boolean addLast_ ;
      /**
       * <code>optional bool add_last = 4;</code>
       * @return Whether the addLast field is set.
       */
      public boolean hasAddLast() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional bool add_last = 4;</code>
       * @return The addLast.
       */
      public boolean getAddLast() {
        return addLast_;
      }
      /**
       * <code>optional bool add_last = 4;</code>
       * @param value The addLast to set.
       * @return This builder for chaining.
       */
      public Builder setAddLast(boolean value) {
        bitField0_ |= 0x00000004;
        addLast_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool add_last = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearAddLast() {
        bitField0_ = (bitField0_ & ~0x00000004);
        addLast_ = false;
        onChanged();
        return this;
      }

      private boolean addFirst_ ;
      /**
       * <code>optional bool add_first = 5;</code>
       * @return Whether the addFirst field is set.
       */
      public boolean hasAddFirst() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional bool add_first = 5;</code>
       * @return The addFirst.
       */
      public boolean getAddFirst() {
        return addFirst_;
      }
      /**
       * <code>optional bool add_first = 5;</code>
       * @param value The addFirst to set.
       * @return This builder for chaining.
       */
      public Builder setAddFirst(boolean value) {
        bitField0_ |= 0x00000008;
        addFirst_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool add_first = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearAddFirst() {
        bitField0_ = (bitField0_ & ~0x00000008);
        addFirst_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.Add)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.Add)
    private static final com.spotify.playlist4.Playlist4ApiProto.Add DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.Add();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Add getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Add>
        PARSER = new com.google.protobuf.AbstractParser<Add>() {
      @java.lang.Override
      public Add parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<Add> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Add> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.Add getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RemOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.Rem)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional int32 from_index = 1;</code>
     * @return Whether the fromIndex field is set.
     */
    boolean hasFromIndex();
    /**
     * <code>optional int32 from_index = 1;</code>
     * @return The fromIndex.
     */
    int getFromIndex();

    /**
     * <code>optional int32 length = 2;</code>
     * @return Whether the length field is set.
     */
    boolean hasLength();
    /**
     * <code>optional int32 length = 2;</code>
     * @return The length.
     */
    int getLength();

    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> 
        getItemsList();
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.Item getItems(int index);
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    int getItemsCount();
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
        getItemsOrBuilderList();
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder getItemsOrBuilder(
        int index);

    /**
     * <code>optional bool items_as_key = 7;</code>
     * @return Whether the itemsAsKey field is set.
     */
    boolean hasItemsAsKey();
    /**
     * <code>optional bool items_as_key = 7;</code>
     * @return The itemsAsKey.
     */
    boolean getItemsAsKey();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.Rem}
   */
  public  static final class Rem extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.Rem)
      RemOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Rem.newBuilder() to construct.
    private Rem(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Rem() {
      items_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Rem();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Rem_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Rem_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.Rem.class, com.spotify.playlist4.Playlist4ApiProto.Rem.Builder.class);
    }

    private int bitField0_;
    public static final int FROM_INDEX_FIELD_NUMBER = 1;
    private int fromIndex_;
    /**
     * <code>optional int32 from_index = 1;</code>
     * @return Whether the fromIndex field is set.
     */
    public boolean hasFromIndex() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional int32 from_index = 1;</code>
     * @return The fromIndex.
     */
    public int getFromIndex() {
      return fromIndex_;
    }

    public static final int LENGTH_FIELD_NUMBER = 2;
    private int length_;
    /**
     * <code>optional int32 length = 2;</code>
     * @return Whether the length field is set.
     */
    public boolean hasLength() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional int32 length = 2;</code>
     * @return The length.
     */
    public int getLength() {
      return length_;
    }

    public static final int ITEMS_FIELD_NUMBER = 3;
    private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> items_;
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> getItemsList() {
      return items_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
        getItemsOrBuilderList() {
      return items_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    public int getItemsCount() {
      return items_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.Item getItems(int index) {
      return items_.get(index);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder getItemsOrBuilder(
        int index) {
      return items_.get(index);
    }

    public static final int ITEMS_AS_KEY_FIELD_NUMBER = 7;
    private boolean itemsAsKey_;
    /**
     * <code>optional bool items_as_key = 7;</code>
     * @return Whether the itemsAsKey field is set.
     */
    public boolean hasItemsAsKey() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional bool items_as_key = 7;</code>
     * @return The itemsAsKey.
     */
    public boolean getItemsAsKey() {
      return itemsAsKey_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Rem parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.Rem prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.Rem}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.Rem)
        com.spotify.playlist4.Playlist4ApiProto.RemOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Rem_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Rem_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.Rem.class, com.spotify.playlist4.Playlist4ApiProto.Rem.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.Rem.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getItemsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        fromIndex_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        length_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (itemsBuilder_ == null) {
          items_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          itemsBuilder_.clear();
        }
        itemsAsKey_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Rem_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Rem getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.Rem.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Rem build() {
        com.spotify.playlist4.Playlist4ApiProto.Rem result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Rem buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.Rem result = new com.spotify.playlist4.Playlist4ApiProto.Rem(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.fromIndex_ = fromIndex_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.length_ = length_;
          to_bitField0_ |= 0x00000002;
        }
        if (itemsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0)) {
            items_ = java.util.Collections.unmodifiableList(items_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.items_ = items_;
        } else {
          result.items_ = itemsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.itemsAsKey_ = itemsAsKey_;
          to_bitField0_ |= 0x00000004;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private int fromIndex_ ;
      /**
       * <code>optional int32 from_index = 1;</code>
       * @return Whether the fromIndex field is set.
       */
      public boolean hasFromIndex() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional int32 from_index = 1;</code>
       * @return The fromIndex.
       */
      public int getFromIndex() {
        return fromIndex_;
      }
      /**
       * <code>optional int32 from_index = 1;</code>
       * @param value The fromIndex to set.
       * @return This builder for chaining.
       */
      public Builder setFromIndex(int value) {
        bitField0_ |= 0x00000001;
        fromIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 from_index = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFromIndex() {
        bitField0_ = (bitField0_ & ~0x00000001);
        fromIndex_ = 0;
        onChanged();
        return this;
      }

      private int length_ ;
      /**
       * <code>optional int32 length = 2;</code>
       * @return Whether the length field is set.
       */
      public boolean hasLength() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional int32 length = 2;</code>
       * @return The length.
       */
      public int getLength() {
        return length_;
      }
      /**
       * <code>optional int32 length = 2;</code>
       * @param value The length to set.
       * @return This builder for chaining.
       */
      public Builder setLength(int value) {
        bitField0_ |= 0x00000002;
        length_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 length = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearLength() {
        bitField0_ = (bitField0_ & ~0x00000002);
        length_ = 0;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> items_ =
        java.util.Collections.emptyList();
      private void ensureItemsIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          items_ = new java.util.ArrayList<com.spotify.playlist4.Playlist4ApiProto.Item>(items_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Item, com.spotify.playlist4.Playlist4ApiProto.Item.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> itemsBuilder_;

      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item> getItemsList() {
        if (itemsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(items_);
        } else {
          return itemsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public int getItemsCount() {
        if (itemsBuilder_ == null) {
          return items_.size();
        } else {
          return itemsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item getItems(int index) {
        if (itemsBuilder_ == null) {
          return items_.get(index);
        } else {
          return itemsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder setItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item value) {
        if (itemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureItemsIsMutable();
          items_.set(index, value);
          onChanged();
        } else {
          itemsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder setItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item.Builder builderForValue) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.set(index, builderForValue.build());
          onChanged();
        } else {
          itemsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder addItems(com.spotify.playlist4.Playlist4ApiProto.Item value) {
        if (itemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureItemsIsMutable();
          items_.add(value);
          onChanged();
        } else {
          itemsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder addItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item value) {
        if (itemsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureItemsIsMutable();
          items_.add(index, value);
          onChanged();
        } else {
          itemsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder addItems(
          com.spotify.playlist4.Playlist4ApiProto.Item.Builder builderForValue) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.add(builderForValue.build());
          onChanged();
        } else {
          itemsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder addItems(
          int index, com.spotify.playlist4.Playlist4ApiProto.Item.Builder builderForValue) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.add(index, builderForValue.build());
          onChanged();
        } else {
          itemsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder addAllItems(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.Item> values) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, items_);
          onChanged();
        } else {
          itemsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder clearItems() {
        if (itemsBuilder_ == null) {
          items_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          itemsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public Builder removeItems(int index) {
        if (itemsBuilder_ == null) {
          ensureItemsIsMutable();
          items_.remove(index);
          onChanged();
        } else {
          itemsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item.Builder getItemsBuilder(
          int index) {
        return getItemsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder getItemsOrBuilder(
          int index) {
        if (itemsBuilder_ == null) {
          return items_.get(index);  } else {
          return itemsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
           getItemsOrBuilderList() {
        if (itemsBuilder_ != null) {
          return itemsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(items_);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item.Builder addItemsBuilder() {
        return getItemsFieldBuilder().addBuilder(
            com.spotify.playlist4.Playlist4ApiProto.Item.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Item.Builder addItemsBuilder(
          int index) {
        return getItemsFieldBuilder().addBuilder(
            index, com.spotify.playlist4.Playlist4ApiProto.Item.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Item items = 3;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Item.Builder> 
           getItemsBuilderList() {
        return getItemsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Item, com.spotify.playlist4.Playlist4ApiProto.Item.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder> 
          getItemsFieldBuilder() {
        if (itemsBuilder_ == null) {
          itemsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Item, com.spotify.playlist4.Playlist4ApiProto.Item.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemOrBuilder>(
                  items_,
                  ((bitField0_ & 0x00000004) != 0),
                  getParentForChildren(),
                  isClean());
          items_ = null;
        }
        return itemsBuilder_;
      }

      private boolean itemsAsKey_ ;
      /**
       * <code>optional bool items_as_key = 7;</code>
       * @return Whether the itemsAsKey field is set.
       */
      public boolean hasItemsAsKey() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional bool items_as_key = 7;</code>
       * @return The itemsAsKey.
       */
      public boolean getItemsAsKey() {
        return itemsAsKey_;
      }
      /**
       * <code>optional bool items_as_key = 7;</code>
       * @param value The itemsAsKey to set.
       * @return This builder for chaining.
       */
      public Builder setItemsAsKey(boolean value) {
        bitField0_ |= 0x00000008;
        itemsAsKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool items_as_key = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearItemsAsKey() {
        bitField0_ = (bitField0_ & ~0x00000008);
        itemsAsKey_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.Rem)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.Rem)
    private static final com.spotify.playlist4.Playlist4ApiProto.Rem DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.Rem();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Rem getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Rem>
        PARSER = new com.google.protobuf.AbstractParser<Rem>() {
      @java.lang.Override
      public Rem parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<Rem> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Rem> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.Rem getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MovOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.Mov)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required int32 from_index = 1;</code>
     * @return Whether the fromIndex field is set.
     */
    boolean hasFromIndex();
    /**
     * <code>required int32 from_index = 1;</code>
     * @return The fromIndex.
     */
    int getFromIndex();

    /**
     * <code>required int32 length = 2;</code>
     * @return Whether the length field is set.
     */
    boolean hasLength();
    /**
     * <code>required int32 length = 2;</code>
     * @return The length.
     */
    int getLength();

    /**
     * <code>required int32 to_index = 3;</code>
     * @return Whether the toIndex field is set.
     */
    boolean hasToIndex();
    /**
     * <code>required int32 to_index = 3;</code>
     * @return The toIndex.
     */
    int getToIndex();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.Mov}
   */
  public  static final class Mov extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.Mov)
      MovOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Mov.newBuilder() to construct.
    private Mov(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Mov() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Mov();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Mov_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Mov_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.Mov.class, com.spotify.playlist4.Playlist4ApiProto.Mov.Builder.class);
    }

    private int bitField0_;
    public static final int FROM_INDEX_FIELD_NUMBER = 1;
    private int fromIndex_;
    /**
     * <code>required int32 from_index = 1;</code>
     * @return Whether the fromIndex field is set.
     */
    public boolean hasFromIndex() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required int32 from_index = 1;</code>
     * @return The fromIndex.
     */
    public int getFromIndex() {
      return fromIndex_;
    }

    public static final int LENGTH_FIELD_NUMBER = 2;
    private int length_;
    /**
     * <code>required int32 length = 2;</code>
     * @return Whether the length field is set.
     */
    public boolean hasLength() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required int32 length = 2;</code>
     * @return The length.
     */
    public int getLength() {
      return length_;
    }

    public static final int TO_INDEX_FIELD_NUMBER = 3;
    private int toIndex_;
    /**
     * <code>required int32 to_index = 3;</code>
     * @return Whether the toIndex field is set.
     */
    public boolean hasToIndex() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>required int32 to_index = 3;</code>
     * @return The toIndex.
     */
    public int getToIndex() {
      return toIndex_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Mov parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.Mov prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.Mov}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.Mov)
        com.spotify.playlist4.Playlist4ApiProto.MovOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Mov_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Mov_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.Mov.class, com.spotify.playlist4.Playlist4ApiProto.Mov.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.Mov.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        fromIndex_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        length_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        toIndex_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Mov_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Mov getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.Mov.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Mov build() {
        com.spotify.playlist4.Playlist4ApiProto.Mov result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Mov buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.Mov result = new com.spotify.playlist4.Playlist4ApiProto.Mov(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.fromIndex_ = fromIndex_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.length_ = length_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.toIndex_ = toIndex_;
          to_bitField0_ |= 0x00000004;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private int fromIndex_ ;
      /**
       * <code>required int32 from_index = 1;</code>
       * @return Whether the fromIndex field is set.
       */
      public boolean hasFromIndex() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required int32 from_index = 1;</code>
       * @return The fromIndex.
       */
      public int getFromIndex() {
        return fromIndex_;
      }
      /**
       * <code>required int32 from_index = 1;</code>
       * @param value The fromIndex to set.
       * @return This builder for chaining.
       */
      public Builder setFromIndex(int value) {
        bitField0_ |= 0x00000001;
        fromIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 from_index = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFromIndex() {
        bitField0_ = (bitField0_ & ~0x00000001);
        fromIndex_ = 0;
        onChanged();
        return this;
      }

      private int length_ ;
      /**
       * <code>required int32 length = 2;</code>
       * @return Whether the length field is set.
       */
      public boolean hasLength() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required int32 length = 2;</code>
       * @return The length.
       */
      public int getLength() {
        return length_;
      }
      /**
       * <code>required int32 length = 2;</code>
       * @param value The length to set.
       * @return This builder for chaining.
       */
      public Builder setLength(int value) {
        bitField0_ |= 0x00000002;
        length_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 length = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearLength() {
        bitField0_ = (bitField0_ & ~0x00000002);
        length_ = 0;
        onChanged();
        return this;
      }

      private int toIndex_ ;
      /**
       * <code>required int32 to_index = 3;</code>
       * @return Whether the toIndex field is set.
       */
      public boolean hasToIndex() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>required int32 to_index = 3;</code>
       * @return The toIndex.
       */
      public int getToIndex() {
        return toIndex_;
      }
      /**
       * <code>required int32 to_index = 3;</code>
       * @param value The toIndex to set.
       * @return This builder for chaining.
       */
      public Builder setToIndex(int value) {
        bitField0_ |= 0x00000004;
        toIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 to_index = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearToIndex() {
        bitField0_ = (bitField0_ & ~0x00000004);
        toIndex_ = 0;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.Mov)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.Mov)
    private static final com.spotify.playlist4.Playlist4ApiProto.Mov DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.Mov();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Mov getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Mov>
        PARSER = new com.google.protobuf.AbstractParser<Mov>() {
      @java.lang.Override
      public Mov parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<Mov> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Mov> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.Mov getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ItemAttributesPartialStateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.ItemAttributesPartialState)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
     * @return Whether the values field is set.
     */
    boolean hasValues();
    /**
     * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
     * @return The values.
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemAttributes getValues();
    /**
     * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder getValuesOrBuilder();

    /**
     * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
     * @return A list containing the noValue.
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind> getNoValueList();
    /**
     * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
     * @return The count of noValue.
     */
    int getNoValueCount();
    /**
     * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
     * @param index The index of the element to return.
     * @return The noValue at the given index.
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind getNoValue(int index);
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.ItemAttributesPartialState}
   */
  public  static final class ItemAttributesPartialState extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.ItemAttributesPartialState)
      ItemAttributesPartialStateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ItemAttributesPartialState.newBuilder() to construct.
    private ItemAttributesPartialState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ItemAttributesPartialState() {
      noValue_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ItemAttributesPartialState();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ItemAttributesPartialState_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ItemAttributesPartialState_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.class, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder.class);
    }

    private int bitField0_;
    public static final int VALUES_FIELD_NUMBER = 1;
    private com.spotify.playlist4.Playlist4ApiProto.ItemAttributes values_;
    /**
     * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
     * @return Whether the values field is set.
     */
    public boolean hasValues() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
     * @return The values.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemAttributes getValues() {
      return values_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.getDefaultInstance() : values_;
    }
    /**
     * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder getValuesOrBuilder() {
      return values_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.getDefaultInstance() : values_;
    }

    public static final int NO_VALUE_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Integer> noValue_;
    private static final com.google.protobuf.Internal.ListAdapter.Converter<
        java.lang.Integer, com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind> noValue_converter_ =
            new com.google.protobuf.Internal.ListAdapter.Converter<
                java.lang.Integer, com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind>() {
              public com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind convert(java.lang.Integer from) {
                @SuppressWarnings("deprecation")
                com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind result = com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind.valueOf(from);
                return result == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind.ITEM_UNKNOWN : result;
              }
            };
    /**
     * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
     * @return A list containing the noValue.
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind> getNoValueList() {
      return new com.google.protobuf.Internal.ListAdapter<
          java.lang.Integer, com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind>(noValue_, noValue_converter_);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
     * @return The count of noValue.
     */
    public int getNoValueCount() {
      return noValue_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
     * @param index The index of the element to return.
     * @return The noValue at the given index.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind getNoValue(int index) {
      return noValue_converter_.convert(noValue_.get(index));
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.ItemAttributesPartialState}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.ItemAttributesPartialState)
        com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ItemAttributesPartialState_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ItemAttributesPartialState_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.class, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getValuesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (valuesBuilder_ == null) {
          values_ = null;
        } else {
          valuesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        noValue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ItemAttributesPartialState_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState build() {
        com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState result = new com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (valuesBuilder_ == null) {
            result.values_ = values_;
          } else {
            result.values_ = valuesBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((bitField0_ & 0x00000002) != 0)) {
          noValue_ = java.util.Collections.unmodifiableList(noValue_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.noValue_ = noValue_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.spotify.playlist4.Playlist4ApiProto.ItemAttributes values_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributes, com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder> valuesBuilder_;
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
       * @return Whether the values field is set.
       */
      public boolean hasValues() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
       * @return The values.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributes getValues() {
        if (valuesBuilder_ == null) {
          return values_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.getDefaultInstance() : values_;
        } else {
          return valuesBuilder_.getMessage();
        }
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
       */
      public Builder setValues(com.spotify.playlist4.Playlist4ApiProto.ItemAttributes value) {
        if (valuesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          values_ = value;
          onChanged();
        } else {
          valuesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
       */
      public Builder setValues(
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder builderForValue) {
        if (valuesBuilder_ == null) {
          values_ = builderForValue.build();
          onChanged();
        } else {
          valuesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
       */
      public Builder mergeValues(com.spotify.playlist4.Playlist4ApiProto.ItemAttributes value) {
        if (valuesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              values_ != null &&
              values_ != com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.getDefaultInstance()) {
            values_ =
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.newBuilder(values_).mergeFrom(value).buildPartial();
          } else {
            values_ = value;
          }
          onChanged();
        } else {
          valuesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
       */
      public Builder clearValues() {
        if (valuesBuilder_ == null) {
          values_ = null;
          onChanged();
        } else {
          valuesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder getValuesBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getValuesFieldBuilder().getBuilder();
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder getValuesOrBuilder() {
        if (valuesBuilder_ != null) {
          return valuesBuilder_.getMessageOrBuilder();
        } else {
          return values_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.getDefaultInstance() : values_;
        }
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributes values = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributes, com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder> 
          getValuesFieldBuilder() {
        if (valuesBuilder_ == null) {
          valuesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributes, com.spotify.playlist4.Playlist4ApiProto.ItemAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesOrBuilder>(
                  getValues(),
                  getParentForChildren(),
                  isClean());
          values_ = null;
        }
        return valuesBuilder_;
      }

      private java.util.List<java.lang.Integer> noValue_ =
        java.util.Collections.emptyList();
      private void ensureNoValueIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          noValue_ = new java.util.ArrayList<java.lang.Integer>(noValue_);
          bitField0_ |= 0x00000002;
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
       * @return A list containing the noValue.
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind> getNoValueList() {
        return new com.google.protobuf.Internal.ListAdapter<
            java.lang.Integer, com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind>(noValue_, noValue_converter_);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
       * @return The count of noValue.
       */
      public int getNoValueCount() {
        return noValue_.size();
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
       * @param index The index of the element to return.
       * @return The noValue at the given index.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind getNoValue(int index) {
        return noValue_converter_.convert(noValue_.get(index));
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
       * @param index The index to set the value at.
       * @param value The noValue to set.
       * @return This builder for chaining.
       */
      public Builder setNoValue(
          int index, com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureNoValueIsMutable();
        noValue_.set(index, value.getNumber());
        onChanged();
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
       * @param value The noValue to add.
       * @return This builder for chaining.
       */
      public Builder addNoValue(com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureNoValueIsMutable();
        noValue_.add(value.getNumber());
        onChanged();
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
       * @param values The noValue to add.
       * @return This builder for chaining.
       */
      public Builder addAllNoValue(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind> values) {
        ensureNoValueIsMutable();
        for (com.spotify.playlist4.Playlist4ApiProto.ItemAttributeKind value : values) {
          noValue_.add(value.getNumber());
        }
        onChanged();
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ItemAttributeKind no_value = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearNoValue() {
        noValue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.ItemAttributesPartialState)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.ItemAttributesPartialState)
    private static final com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ItemAttributesPartialState>
        PARSER = new com.google.protobuf.AbstractParser<ItemAttributesPartialState>() {
      @java.lang.Override
      public ItemAttributesPartialState parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<ItemAttributesPartialState> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ItemAttributesPartialState> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ListAttributesPartialStateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.ListAttributesPartialState)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
     * @return Whether the values field is set.
     */
    boolean hasValues();
    /**
     * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
     * @return The values.
     */
    com.spotify.playlist4.Playlist4ApiProto.ListAttributes getValues();
    /**
     * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder getValuesOrBuilder();

    /**
     * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
     * @return A list containing the noValue.
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind> getNoValueList();
    /**
     * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
     * @return The count of noValue.
     */
    int getNoValueCount();
    /**
     * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
     * @param index The index of the element to return.
     * @return The noValue at the given index.
     */
    com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind getNoValue(int index);
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.ListAttributesPartialState}
   */
  public  static final class ListAttributesPartialState extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.ListAttributesPartialState)
      ListAttributesPartialStateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ListAttributesPartialState.newBuilder() to construct.
    private ListAttributesPartialState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ListAttributesPartialState() {
      noValue_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ListAttributesPartialState();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListAttributesPartialState_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListAttributesPartialState_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.class, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder.class);
    }

    private int bitField0_;
    public static final int VALUES_FIELD_NUMBER = 1;
    private com.spotify.playlist4.Playlist4ApiProto.ListAttributes values_;
    /**
     * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
     * @return Whether the values field is set.
     */
    public boolean hasValues() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
     * @return The values.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributes getValues() {
      return values_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : values_;
    }
    /**
     * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder getValuesOrBuilder() {
      return values_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : values_;
    }

    public static final int NO_VALUE_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Integer> noValue_;
    private static final com.google.protobuf.Internal.ListAdapter.Converter<
        java.lang.Integer, com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind> noValue_converter_ =
            new com.google.protobuf.Internal.ListAdapter.Converter<
                java.lang.Integer, com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind>() {
              public com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind convert(java.lang.Integer from) {
                @SuppressWarnings("deprecation")
                com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind result = com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind.valueOf(from);
                return result == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind.LIST_UNKNOWN : result;
              }
            };
    /**
     * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
     * @return A list containing the noValue.
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind> getNoValueList() {
      return new com.google.protobuf.Internal.ListAdapter<
          java.lang.Integer, com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind>(noValue_, noValue_converter_);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
     * @return The count of noValue.
     */
    public int getNoValueCount() {
      return noValue_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
     * @param index The index of the element to return.
     * @return The noValue at the given index.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind getNoValue(int index) {
      return noValue_converter_.convert(noValue_.get(index));
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.ListAttributesPartialState}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.ListAttributesPartialState)
        com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListAttributesPartialState_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListAttributesPartialState_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.class, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getValuesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (valuesBuilder_ == null) {
          values_ = null;
        } else {
          valuesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        noValue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListAttributesPartialState_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState build() {
        com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState result = new com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (valuesBuilder_ == null) {
            result.values_ = values_;
          } else {
            result.values_ = valuesBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((bitField0_ & 0x00000002) != 0)) {
          noValue_ = java.util.Collections.unmodifiableList(noValue_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.noValue_ = noValue_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.spotify.playlist4.Playlist4ApiProto.ListAttributes values_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListAttributes, com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder> valuesBuilder_;
      /**
       * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
       * @return Whether the values field is set.
       */
      public boolean hasValues() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
       * @return The values.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributes getValues() {
        if (valuesBuilder_ == null) {
          return values_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : values_;
        } else {
          return valuesBuilder_.getMessage();
        }
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
       */
      public Builder setValues(com.spotify.playlist4.Playlist4ApiProto.ListAttributes value) {
        if (valuesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          values_ = value;
          onChanged();
        } else {
          valuesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
       */
      public Builder setValues(
          com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder builderForValue) {
        if (valuesBuilder_ == null) {
          values_ = builderForValue.build();
          onChanged();
        } else {
          valuesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
       */
      public Builder mergeValues(com.spotify.playlist4.Playlist4ApiProto.ListAttributes value) {
        if (valuesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              values_ != null &&
              values_ != com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance()) {
            values_ =
              com.spotify.playlist4.Playlist4ApiProto.ListAttributes.newBuilder(values_).mergeFrom(value).buildPartial();
          } else {
            values_ = value;
          }
          onChanged();
        } else {
          valuesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
       */
      public Builder clearValues() {
        if (valuesBuilder_ == null) {
          values_ = null;
          onChanged();
        } else {
          valuesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder getValuesBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getValuesFieldBuilder().getBuilder();
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder getValuesOrBuilder() {
        if (valuesBuilder_ != null) {
          return valuesBuilder_.getMessageOrBuilder();
        } else {
          return values_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : values_;
        }
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributes values = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListAttributes, com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder> 
          getValuesFieldBuilder() {
        if (valuesBuilder_ == null) {
          valuesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.ListAttributes, com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder>(
                  getValues(),
                  getParentForChildren(),
                  isClean());
          values_ = null;
        }
        return valuesBuilder_;
      }

      private java.util.List<java.lang.Integer> noValue_ =
        java.util.Collections.emptyList();
      private void ensureNoValueIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          noValue_ = new java.util.ArrayList<java.lang.Integer>(noValue_);
          bitField0_ |= 0x00000002;
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
       * @return A list containing the noValue.
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind> getNoValueList() {
        return new com.google.protobuf.Internal.ListAdapter<
            java.lang.Integer, com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind>(noValue_, noValue_converter_);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
       * @return The count of noValue.
       */
      public int getNoValueCount() {
        return noValue_.size();
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
       * @param index The index of the element to return.
       * @return The noValue at the given index.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind getNoValue(int index) {
        return noValue_converter_.convert(noValue_.get(index));
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
       * @param index The index to set the value at.
       * @param value The noValue to set.
       * @return This builder for chaining.
       */
      public Builder setNoValue(
          int index, com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureNoValueIsMutable();
        noValue_.set(index, value.getNumber());
        onChanged();
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
       * @param value The noValue to add.
       * @return This builder for chaining.
       */
      public Builder addNoValue(com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureNoValueIsMutable();
        noValue_.add(value.getNumber());
        onChanged();
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
       * @param values The noValue to add.
       * @return This builder for chaining.
       */
      public Builder addAllNoValue(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind> values) {
        ensureNoValueIsMutable();
        for (com.spotify.playlist4.Playlist4ApiProto.ListAttributeKind value : values) {
          noValue_.add(value.getNumber());
        }
        onChanged();
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.ListAttributeKind no_value = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearNoValue() {
        noValue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.ListAttributesPartialState)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.ListAttributesPartialState)
    private static final com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ListAttributesPartialState>
        PARSER = new com.google.protobuf.AbstractParser<ListAttributesPartialState>() {
      @java.lang.Override
      public ListAttributesPartialState parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<ListAttributesPartialState> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ListAttributesPartialState> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface UpdateItemAttributesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.UpdateItemAttributes)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required int32 index = 1;</code>
     * @return Whether the index field is set.
     */
    boolean hasIndex();
    /**
     * <code>required int32 index = 1;</code>
     * @return The index.
     */
    int getIndex();

    /**
     * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
     * @return Whether the newAttributes field is set.
     */
    boolean hasNewAttributes();
    /**
     * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
     * @return The newAttributes.
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState getNewAttributes();
    /**
     * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder getNewAttributesOrBuilder();

    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
     * @return Whether the oldAttributes field is set.
     */
    boolean hasOldAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
     * @return The oldAttributes.
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState getOldAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder getOldAttributesOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.UpdateItemAttributes}
   */
  public  static final class UpdateItemAttributes extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.UpdateItemAttributes)
      UpdateItemAttributesOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use UpdateItemAttributes.newBuilder() to construct.
    private UpdateItemAttributes(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private UpdateItemAttributes() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new UpdateItemAttributes();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UpdateItemAttributes_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UpdateItemAttributes_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.class, com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.Builder.class);
    }

    private int bitField0_;
    public static final int INDEX_FIELD_NUMBER = 1;
    private int index_;
    /**
     * <code>required int32 index = 1;</code>
     * @return Whether the index field is set.
     */
    public boolean hasIndex() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required int32 index = 1;</code>
     * @return The index.
     */
    public int getIndex() {
      return index_;
    }

    public static final int NEW_ATTRIBUTES_FIELD_NUMBER = 2;
    private com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState newAttributes_;
    /**
     * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
     * @return Whether the newAttributes field is set.
     */
    public boolean hasNewAttributes() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
     * @return The newAttributes.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState getNewAttributes() {
      return newAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.getDefaultInstance() : newAttributes_;
    }
    /**
     * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder getNewAttributesOrBuilder() {
      return newAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.getDefaultInstance() : newAttributes_;
    }

    public static final int OLD_ATTRIBUTES_FIELD_NUMBER = 3;
    private com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState oldAttributes_;
    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
     * @return Whether the oldAttributes field is set.
     */
    public boolean hasOldAttributes() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
     * @return The oldAttributes.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState getOldAttributes() {
      return oldAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.getDefaultInstance() : oldAttributes_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder getOldAttributesOrBuilder() {
      return oldAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.getDefaultInstance() : oldAttributes_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.UpdateItemAttributes}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.UpdateItemAttributes)
        com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UpdateItemAttributes_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UpdateItemAttributes_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.class, com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getNewAttributesFieldBuilder();
          getOldAttributesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        index_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (newAttributesBuilder_ == null) {
          newAttributes_ = null;
        } else {
          newAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (oldAttributesBuilder_ == null) {
          oldAttributes_ = null;
        } else {
          oldAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UpdateItemAttributes_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes build() {
        com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes result = new com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.index_ = index_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (newAttributesBuilder_ == null) {
            result.newAttributes_ = newAttributes_;
          } else {
            result.newAttributes_ = newAttributesBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          if (oldAttributesBuilder_ == null) {
            result.oldAttributes_ = oldAttributes_;
          } else {
            result.oldAttributes_ = oldAttributesBuilder_.build();
          }
          to_bitField0_ |= 0x00000004;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private int index_ ;
      /**
       * <code>required int32 index = 1;</code>
       * @return Whether the index field is set.
       */
      public boolean hasIndex() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required int32 index = 1;</code>
       * @return The index.
       */
      public int getIndex() {
        return index_;
      }
      /**
       * <code>required int32 index = 1;</code>
       * @param value The index to set.
       * @return This builder for chaining.
       */
      public Builder setIndex(int value) {
        bitField0_ |= 0x00000001;
        index_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 index = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearIndex() {
        bitField0_ = (bitField0_ & ~0x00000001);
        index_ = 0;
        onChanged();
        return this;
      }

      private com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState newAttributes_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder> newAttributesBuilder_;
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
       * @return Whether the newAttributes field is set.
       */
      public boolean hasNewAttributes() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
       * @return The newAttributes.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState getNewAttributes() {
        if (newAttributesBuilder_ == null) {
          return newAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.getDefaultInstance() : newAttributes_;
        } else {
          return newAttributesBuilder_.getMessage();
        }
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
       */
      public Builder setNewAttributes(com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState value) {
        if (newAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          newAttributes_ = value;
          onChanged();
        } else {
          newAttributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
       */
      public Builder setNewAttributes(
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder builderForValue) {
        if (newAttributesBuilder_ == null) {
          newAttributes_ = builderForValue.build();
          onChanged();
        } else {
          newAttributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
       */
      public Builder mergeNewAttributes(com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState value) {
        if (newAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              newAttributes_ != null &&
              newAttributes_ != com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.getDefaultInstance()) {
            newAttributes_ =
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.newBuilder(newAttributes_).mergeFrom(value).buildPartial();
          } else {
            newAttributes_ = value;
          }
          onChanged();
        } else {
          newAttributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
       */
      public Builder clearNewAttributes() {
        if (newAttributesBuilder_ == null) {
          newAttributes_ = null;
          onChanged();
        } else {
          newAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder getNewAttributesBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getNewAttributesFieldBuilder().getBuilder();
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder getNewAttributesOrBuilder() {
        if (newAttributesBuilder_ != null) {
          return newAttributesBuilder_.getMessageOrBuilder();
        } else {
          return newAttributes_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.getDefaultInstance() : newAttributes_;
        }
      }
      /**
       * <code>required .spotify.playlist4.proto.ItemAttributesPartialState new_attributes = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder> 
          getNewAttributesFieldBuilder() {
        if (newAttributesBuilder_ == null) {
          newAttributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder>(
                  getNewAttributes(),
                  getParentForChildren(),
                  isClean());
          newAttributes_ = null;
        }
        return newAttributesBuilder_;
      }

      private com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState oldAttributes_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder> oldAttributesBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
       * @return Whether the oldAttributes field is set.
       */
      public boolean hasOldAttributes() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
       * @return The oldAttributes.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState getOldAttributes() {
        if (oldAttributesBuilder_ == null) {
          return oldAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.getDefaultInstance() : oldAttributes_;
        } else {
          return oldAttributesBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
       */
      public Builder setOldAttributes(com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState value) {
        if (oldAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          oldAttributes_ = value;
          onChanged();
        } else {
          oldAttributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
       */
      public Builder setOldAttributes(
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder builderForValue) {
        if (oldAttributesBuilder_ == null) {
          oldAttributes_ = builderForValue.build();
          onChanged();
        } else {
          oldAttributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
       */
      public Builder mergeOldAttributes(com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState value) {
        if (oldAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0) &&
              oldAttributes_ != null &&
              oldAttributes_ != com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.getDefaultInstance()) {
            oldAttributes_ =
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.newBuilder(oldAttributes_).mergeFrom(value).buildPartial();
          } else {
            oldAttributes_ = value;
          }
          onChanged();
        } else {
          oldAttributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
       */
      public Builder clearOldAttributes() {
        if (oldAttributesBuilder_ == null) {
          oldAttributes_ = null;
          onChanged();
        } else {
          oldAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder getOldAttributesBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getOldAttributesFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder getOldAttributesOrBuilder() {
        if (oldAttributesBuilder_ != null) {
          return oldAttributesBuilder_.getMessageOrBuilder();
        } else {
          return oldAttributes_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.getDefaultInstance() : oldAttributes_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ItemAttributesPartialState old_attributes = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder> 
          getOldAttributesFieldBuilder() {
        if (oldAttributesBuilder_ == null) {
          oldAttributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ItemAttributesPartialStateOrBuilder>(
                  getOldAttributes(),
                  getParentForChildren(),
                  isClean());
          oldAttributes_ = null;
        }
        return oldAttributesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.UpdateItemAttributes)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.UpdateItemAttributes)
    private static final com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<UpdateItemAttributes>
        PARSER = new com.google.protobuf.AbstractParser<UpdateItemAttributes>() {
      @java.lang.Override
      public UpdateItemAttributes parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<UpdateItemAttributes> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<UpdateItemAttributes> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface UpdateListAttributesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.UpdateListAttributes)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
     * @return Whether the newAttributes field is set.
     */
    boolean hasNewAttributes();
    /**
     * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
     * @return The newAttributes.
     */
    com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState getNewAttributes();
    /**
     * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder getNewAttributesOrBuilder();

    /**
     * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
     * @return Whether the oldAttributes field is set.
     */
    boolean hasOldAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
     * @return The oldAttributes.
     */
    com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState getOldAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder getOldAttributesOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.UpdateListAttributes}
   */
  public  static final class UpdateListAttributes extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.UpdateListAttributes)
      UpdateListAttributesOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use UpdateListAttributes.newBuilder() to construct.
    private UpdateListAttributes(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private UpdateListAttributes() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new UpdateListAttributes();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UpdateListAttributes_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UpdateListAttributes_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.class, com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.Builder.class);
    }

    private int bitField0_;
    public static final int NEW_ATTRIBUTES_FIELD_NUMBER = 1;
    private com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState newAttributes_;
    /**
     * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
     * @return Whether the newAttributes field is set.
     */
    public boolean hasNewAttributes() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
     * @return The newAttributes.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState getNewAttributes() {
      return newAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.getDefaultInstance() : newAttributes_;
    }
    /**
     * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder getNewAttributesOrBuilder() {
      return newAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.getDefaultInstance() : newAttributes_;
    }

    public static final int OLD_ATTRIBUTES_FIELD_NUMBER = 2;
    private com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState oldAttributes_;
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
     * @return Whether the oldAttributes field is set.
     */
    public boolean hasOldAttributes() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
     * @return The oldAttributes.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState getOldAttributes() {
      return oldAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.getDefaultInstance() : oldAttributes_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder getOldAttributesOrBuilder() {
      return oldAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.getDefaultInstance() : oldAttributes_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.UpdateListAttributes}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.UpdateListAttributes)
        com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UpdateListAttributes_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UpdateListAttributes_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.class, com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getNewAttributesFieldBuilder();
          getOldAttributesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (newAttributesBuilder_ == null) {
          newAttributes_ = null;
        } else {
          newAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (oldAttributesBuilder_ == null) {
          oldAttributes_ = null;
        } else {
          oldAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UpdateListAttributes_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes build() {
        com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes result = new com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (newAttributesBuilder_ == null) {
            result.newAttributes_ = newAttributes_;
          } else {
            result.newAttributes_ = newAttributesBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (oldAttributesBuilder_ == null) {
            result.oldAttributes_ = oldAttributes_;
          } else {
            result.oldAttributes_ = oldAttributesBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState newAttributes_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder> newAttributesBuilder_;
      /**
       * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
       * @return Whether the newAttributes field is set.
       */
      public boolean hasNewAttributes() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
       * @return The newAttributes.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState getNewAttributes() {
        if (newAttributesBuilder_ == null) {
          return newAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.getDefaultInstance() : newAttributes_;
        } else {
          return newAttributesBuilder_.getMessage();
        }
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
       */
      public Builder setNewAttributes(com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState value) {
        if (newAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          newAttributes_ = value;
          onChanged();
        } else {
          newAttributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
       */
      public Builder setNewAttributes(
          com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder builderForValue) {
        if (newAttributesBuilder_ == null) {
          newAttributes_ = builderForValue.build();
          onChanged();
        } else {
          newAttributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
       */
      public Builder mergeNewAttributes(com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState value) {
        if (newAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              newAttributes_ != null &&
              newAttributes_ != com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.getDefaultInstance()) {
            newAttributes_ =
              com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.newBuilder(newAttributes_).mergeFrom(value).buildPartial();
          } else {
            newAttributes_ = value;
          }
          onChanged();
        } else {
          newAttributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
       */
      public Builder clearNewAttributes() {
        if (newAttributesBuilder_ == null) {
          newAttributes_ = null;
          onChanged();
        } else {
          newAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder getNewAttributesBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getNewAttributesFieldBuilder().getBuilder();
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder getNewAttributesOrBuilder() {
        if (newAttributesBuilder_ != null) {
          return newAttributesBuilder_.getMessageOrBuilder();
        } else {
          return newAttributes_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.getDefaultInstance() : newAttributes_;
        }
      }
      /**
       * <code>required .spotify.playlist4.proto.ListAttributesPartialState new_attributes = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder> 
          getNewAttributesFieldBuilder() {
        if (newAttributesBuilder_ == null) {
          newAttributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder>(
                  getNewAttributes(),
                  getParentForChildren(),
                  isClean());
          newAttributes_ = null;
        }
        return newAttributesBuilder_;
      }

      private com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState oldAttributes_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder> oldAttributesBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
       * @return Whether the oldAttributes field is set.
       */
      public boolean hasOldAttributes() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
       * @return The oldAttributes.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState getOldAttributes() {
        if (oldAttributesBuilder_ == null) {
          return oldAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.getDefaultInstance() : oldAttributes_;
        } else {
          return oldAttributesBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
       */
      public Builder setOldAttributes(com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState value) {
        if (oldAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          oldAttributes_ = value;
          onChanged();
        } else {
          oldAttributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
       */
      public Builder setOldAttributes(
          com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder builderForValue) {
        if (oldAttributesBuilder_ == null) {
          oldAttributes_ = builderForValue.build();
          onChanged();
        } else {
          oldAttributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
       */
      public Builder mergeOldAttributes(com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState value) {
        if (oldAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              oldAttributes_ != null &&
              oldAttributes_ != com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.getDefaultInstance()) {
            oldAttributes_ =
              com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.newBuilder(oldAttributes_).mergeFrom(value).buildPartial();
          } else {
            oldAttributes_ = value;
          }
          onChanged();
        } else {
          oldAttributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
       */
      public Builder clearOldAttributes() {
        if (oldAttributesBuilder_ == null) {
          oldAttributes_ = null;
          onChanged();
        } else {
          oldAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder getOldAttributesBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getOldAttributesFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder getOldAttributesOrBuilder() {
        if (oldAttributesBuilder_ != null) {
          return oldAttributesBuilder_.getMessageOrBuilder();
        } else {
          return oldAttributes_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.getDefaultInstance() : oldAttributes_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributesPartialState old_attributes = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder> 
          getOldAttributesFieldBuilder() {
        if (oldAttributesBuilder_ == null) {
          oldAttributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialState.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesPartialStateOrBuilder>(
                  getOldAttributes(),
                  getParentForChildren(),
                  isClean());
          oldAttributes_ = null;
        }
        return oldAttributesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.UpdateListAttributes)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.UpdateListAttributes)
    private static final com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<UpdateListAttributes>
        PARSER = new com.google.protobuf.AbstractParser<UpdateListAttributes>() {
      @java.lang.Override
      public UpdateListAttributes parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<UpdateListAttributes> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<UpdateListAttributes> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface OpOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.Op)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .spotify.playlist4.proto.Op.Kind kind = 1;</code>
     * @return Whether the kind field is set.
     */
    boolean hasKind();
    /**
     * <code>required .spotify.playlist4.proto.Op.Kind kind = 1;</code>
     * @return The kind.
     */
    com.spotify.playlist4.Playlist4ApiProto.Op.Kind getKind();

    /**
     * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
     * @return Whether the add field is set.
     */
    boolean hasAdd();
    /**
     * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
     * @return The add.
     */
    com.spotify.playlist4.Playlist4ApiProto.Add getAdd();
    /**
     * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.AddOrBuilder getAddOrBuilder();

    /**
     * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
     * @return Whether the rem field is set.
     */
    boolean hasRem();
    /**
     * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
     * @return The rem.
     */
    com.spotify.playlist4.Playlist4ApiProto.Rem getRem();
    /**
     * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.RemOrBuilder getRemOrBuilder();

    /**
     * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
     * @return Whether the mov field is set.
     */
    boolean hasMov();
    /**
     * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
     * @return The mov.
     */
    com.spotify.playlist4.Playlist4ApiProto.Mov getMov();
    /**
     * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.MovOrBuilder getMovOrBuilder();

    /**
     * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
     * @return Whether the updateItemAttributes field is set.
     */
    boolean hasUpdateItemAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
     * @return The updateItemAttributes.
     */
    com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes getUpdateItemAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributesOrBuilder getUpdateItemAttributesOrBuilder();

    /**
     * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
     * @return Whether the updateListAttributes field is set.
     */
    boolean hasUpdateListAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
     * @return The updateListAttributes.
     */
    com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes getUpdateListAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributesOrBuilder getUpdateListAttributesOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.Op}
   */
  public  static final class Op extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.Op)
      OpOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Op.newBuilder() to construct.
    private Op(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Op() {
      kind_ = 0;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Op();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Op_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Op_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.Op.class, com.spotify.playlist4.Playlist4ApiProto.Op.Builder.class);
    }

    /**
     * Protobuf enum {@code spotify.playlist4.proto.Op.Kind}
     */
    public enum Kind
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>KIND_UNKNOWN = 0;</code>
       */
      KIND_UNKNOWN(0),
      /**
       * <code>ADD = 2;</code>
       */
      ADD(2),
      /**
       * <code>REM = 3;</code>
       */
      REM(3),
      /**
       * <code>MOV = 4;</code>
       */
      MOV(4),
      /**
       * <code>UPDATE_ITEM_ATTRIBUTES = 5;</code>
       */
      UPDATE_ITEM_ATTRIBUTES(5),
      /**
       * <code>UPDATE_LIST_ATTRIBUTES = 6;</code>
       */
      UPDATE_LIST_ATTRIBUTES(6),
      ;

      /**
       * <code>KIND_UNKNOWN = 0;</code>
       */
      public static final int KIND_UNKNOWN_VALUE = 0;
      /**
       * <code>ADD = 2;</code>
       */
      public static final int ADD_VALUE = 2;
      /**
       * <code>REM = 3;</code>
       */
      public static final int REM_VALUE = 3;
      /**
       * <code>MOV = 4;</code>
       */
      public static final int MOV_VALUE = 4;
      /**
       * <code>UPDATE_ITEM_ATTRIBUTES = 5;</code>
       */
      public static final int UPDATE_ITEM_ATTRIBUTES_VALUE = 5;
      /**
       * <code>UPDATE_LIST_ATTRIBUTES = 6;</code>
       */
      public static final int UPDATE_LIST_ATTRIBUTES_VALUE = 6;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Kind valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Kind forNumber(int value) {
        switch (value) {
          case 0: return KIND_UNKNOWN;
          case 2: return ADD;
          case 3: return REM;
          case 4: return MOV;
          case 5: return UPDATE_ITEM_ATTRIBUTES;
          case 6: return UPDATE_LIST_ATTRIBUTES;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Kind>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          Kind> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Kind>() {
              public Kind findValueByNumber(int number) {
                return Kind.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.Op.getDescriptor().getEnumTypes().get(0);
      }

      private static final Kind[] VALUES = values();

      public static Kind valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private Kind(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:spotify.playlist4.proto.Op.Kind)
    }

    private int bitField0_;
    public static final int KIND_FIELD_NUMBER = 1;
    private int kind_;
    /**
     * <code>required .spotify.playlist4.proto.Op.Kind kind = 1;</code>
     * @return Whether the kind field is set.
     */
    public boolean hasKind() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .spotify.playlist4.proto.Op.Kind kind = 1;</code>
     * @return The kind.
     */
    public com.spotify.playlist4.Playlist4ApiProto.Op.Kind getKind() {
      @SuppressWarnings("deprecation")
      com.spotify.playlist4.Playlist4ApiProto.Op.Kind result = com.spotify.playlist4.Playlist4ApiProto.Op.Kind.valueOf(kind_);
      return result == null ? com.spotify.playlist4.Playlist4ApiProto.Op.Kind.KIND_UNKNOWN : result;
    }

    public static final int ADD_FIELD_NUMBER = 2;
    private com.spotify.playlist4.Playlist4ApiProto.Add add_;
    /**
     * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
     * @return Whether the add field is set.
     */
    public boolean hasAdd() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
     * @return The add.
     */
    public com.spotify.playlist4.Playlist4ApiProto.Add getAdd() {
      return add_ == null ? com.spotify.playlist4.Playlist4ApiProto.Add.getDefaultInstance() : add_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.AddOrBuilder getAddOrBuilder() {
      return add_ == null ? com.spotify.playlist4.Playlist4ApiProto.Add.getDefaultInstance() : add_;
    }

    public static final int REM_FIELD_NUMBER = 3;
    private com.spotify.playlist4.Playlist4ApiProto.Rem rem_;
    /**
     * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
     * @return Whether the rem field is set.
     */
    public boolean hasRem() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
     * @return The rem.
     */
    public com.spotify.playlist4.Playlist4ApiProto.Rem getRem() {
      return rem_ == null ? com.spotify.playlist4.Playlist4ApiProto.Rem.getDefaultInstance() : rem_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.RemOrBuilder getRemOrBuilder() {
      return rem_ == null ? com.spotify.playlist4.Playlist4ApiProto.Rem.getDefaultInstance() : rem_;
    }

    public static final int MOV_FIELD_NUMBER = 4;
    private com.spotify.playlist4.Playlist4ApiProto.Mov mov_;
    /**
     * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
     * @return Whether the mov field is set.
     */
    public boolean hasMov() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
     * @return The mov.
     */
    public com.spotify.playlist4.Playlist4ApiProto.Mov getMov() {
      return mov_ == null ? com.spotify.playlist4.Playlist4ApiProto.Mov.getDefaultInstance() : mov_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.MovOrBuilder getMovOrBuilder() {
      return mov_ == null ? com.spotify.playlist4.Playlist4ApiProto.Mov.getDefaultInstance() : mov_;
    }

    public static final int UPDATE_ITEM_ATTRIBUTES_FIELD_NUMBER = 5;
    private com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes updateItemAttributes_;
    /**
     * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
     * @return Whether the updateItemAttributes field is set.
     */
    public boolean hasUpdateItemAttributes() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
     * @return The updateItemAttributes.
     */
    public com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes getUpdateItemAttributes() {
      return updateItemAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.getDefaultInstance() : updateItemAttributes_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributesOrBuilder getUpdateItemAttributesOrBuilder() {
      return updateItemAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.getDefaultInstance() : updateItemAttributes_;
    }

    public static final int UPDATE_LIST_ATTRIBUTES_FIELD_NUMBER = 6;
    private com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes updateListAttributes_;
    /**
     * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
     * @return Whether the updateListAttributes field is set.
     */
    public boolean hasUpdateListAttributes() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
     * @return The updateListAttributes.
     */
    public com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes getUpdateListAttributes() {
      return updateListAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.getDefaultInstance() : updateListAttributes_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributesOrBuilder getUpdateListAttributesOrBuilder() {
      return updateListAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.getDefaultInstance() : updateListAttributes_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Op parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Op parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Op parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Op parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Op parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Op parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Op parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Op parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Op parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Op parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Op parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Op parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.Op prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.Op}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.Op)
        com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Op_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Op_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.Op.class, com.spotify.playlist4.Playlist4ApiProto.Op.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.Op.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAddFieldBuilder();
          getRemFieldBuilder();
          getMovFieldBuilder();
          getUpdateItemAttributesFieldBuilder();
          getUpdateListAttributesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        kind_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (addBuilder_ == null) {
          add_ = null;
        } else {
          addBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (remBuilder_ == null) {
          rem_ = null;
        } else {
          remBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (movBuilder_ == null) {
          mov_ = null;
        } else {
          movBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (updateItemAttributesBuilder_ == null) {
          updateItemAttributes_ = null;
        } else {
          updateItemAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (updateListAttributesBuilder_ == null) {
          updateListAttributes_ = null;
        } else {
          updateListAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Op_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Op getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.Op.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Op build() {
        com.spotify.playlist4.Playlist4ApiProto.Op result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Op buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.Op result = new com.spotify.playlist4.Playlist4ApiProto.Op(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.kind_ = kind_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (addBuilder_ == null) {
            result.add_ = add_;
          } else {
            result.add_ = addBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          if (remBuilder_ == null) {
            result.rem_ = rem_;
          } else {
            result.rem_ = remBuilder_.build();
          }
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          if (movBuilder_ == null) {
            result.mov_ = mov_;
          } else {
            result.mov_ = movBuilder_.build();
          }
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          if (updateItemAttributesBuilder_ == null) {
            result.updateItemAttributes_ = updateItemAttributes_;
          } else {
            result.updateItemAttributes_ = updateItemAttributesBuilder_.build();
          }
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          if (updateListAttributesBuilder_ == null) {
            result.updateListAttributes_ = updateListAttributes_;
          } else {
            result.updateListAttributes_ = updateListAttributesBuilder_.build();
          }
          to_bitField0_ |= 0x00000020;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private int kind_ = 0;
      /**
       * <code>required .spotify.playlist4.proto.Op.Kind kind = 1;</code>
       * @return Whether the kind field is set.
       */
      public boolean hasKind() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required .spotify.playlist4.proto.Op.Kind kind = 1;</code>
       * @return The kind.
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Kind getKind() {
        @SuppressWarnings("deprecation")
        com.spotify.playlist4.Playlist4ApiProto.Op.Kind result = com.spotify.playlist4.Playlist4ApiProto.Op.Kind.valueOf(kind_);
        return result == null ? com.spotify.playlist4.Playlist4ApiProto.Op.Kind.KIND_UNKNOWN : result;
      }
      /**
       * <code>required .spotify.playlist4.proto.Op.Kind kind = 1;</code>
       * @param value The kind to set.
       * @return This builder for chaining.
       */
      public Builder setKind(com.spotify.playlist4.Playlist4ApiProto.Op.Kind value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        kind_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .spotify.playlist4.proto.Op.Kind kind = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearKind() {
        bitField0_ = (bitField0_ & ~0x00000001);
        kind_ = 0;
        onChanged();
        return this;
      }

      private com.spotify.playlist4.Playlist4ApiProto.Add add_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Add, com.spotify.playlist4.Playlist4ApiProto.Add.Builder, com.spotify.playlist4.Playlist4ApiProto.AddOrBuilder> addBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
       * @return Whether the add field is set.
       */
      public boolean hasAdd() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
       * @return The add.
       */
      public com.spotify.playlist4.Playlist4ApiProto.Add getAdd() {
        if (addBuilder_ == null) {
          return add_ == null ? com.spotify.playlist4.Playlist4ApiProto.Add.getDefaultInstance() : add_;
        } else {
          return addBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
       */
      public Builder setAdd(com.spotify.playlist4.Playlist4ApiProto.Add value) {
        if (addBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          add_ = value;
          onChanged();
        } else {
          addBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
       */
      public Builder setAdd(
          com.spotify.playlist4.Playlist4ApiProto.Add.Builder builderForValue) {
        if (addBuilder_ == null) {
          add_ = builderForValue.build();
          onChanged();
        } else {
          addBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
       */
      public Builder mergeAdd(com.spotify.playlist4.Playlist4ApiProto.Add value) {
        if (addBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              add_ != null &&
              add_ != com.spotify.playlist4.Playlist4ApiProto.Add.getDefaultInstance()) {
            add_ =
              com.spotify.playlist4.Playlist4ApiProto.Add.newBuilder(add_).mergeFrom(value).buildPartial();
          } else {
            add_ = value;
          }
          onChanged();
        } else {
          addBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
       */
      public Builder clearAdd() {
        if (addBuilder_ == null) {
          add_ = null;
          onChanged();
        } else {
          addBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Add.Builder getAddBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getAddFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.AddOrBuilder getAddOrBuilder() {
        if (addBuilder_ != null) {
          return addBuilder_.getMessageOrBuilder();
        } else {
          return add_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.Add.getDefaultInstance() : add_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.Add add = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Add, com.spotify.playlist4.Playlist4ApiProto.Add.Builder, com.spotify.playlist4.Playlist4ApiProto.AddOrBuilder> 
          getAddFieldBuilder() {
        if (addBuilder_ == null) {
          addBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Add, com.spotify.playlist4.Playlist4ApiProto.Add.Builder, com.spotify.playlist4.Playlist4ApiProto.AddOrBuilder>(
                  getAdd(),
                  getParentForChildren(),
                  isClean());
          add_ = null;
        }
        return addBuilder_;
      }

      private com.spotify.playlist4.Playlist4ApiProto.Rem rem_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Rem, com.spotify.playlist4.Playlist4ApiProto.Rem.Builder, com.spotify.playlist4.Playlist4ApiProto.RemOrBuilder> remBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
       * @return Whether the rem field is set.
       */
      public boolean hasRem() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
       * @return The rem.
       */
      public com.spotify.playlist4.Playlist4ApiProto.Rem getRem() {
        if (remBuilder_ == null) {
          return rem_ == null ? com.spotify.playlist4.Playlist4ApiProto.Rem.getDefaultInstance() : rem_;
        } else {
          return remBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
       */
      public Builder setRem(com.spotify.playlist4.Playlist4ApiProto.Rem value) {
        if (remBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rem_ = value;
          onChanged();
        } else {
          remBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
       */
      public Builder setRem(
          com.spotify.playlist4.Playlist4ApiProto.Rem.Builder builderForValue) {
        if (remBuilder_ == null) {
          rem_ = builderForValue.build();
          onChanged();
        } else {
          remBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
       */
      public Builder mergeRem(com.spotify.playlist4.Playlist4ApiProto.Rem value) {
        if (remBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0) &&
              rem_ != null &&
              rem_ != com.spotify.playlist4.Playlist4ApiProto.Rem.getDefaultInstance()) {
            rem_ =
              com.spotify.playlist4.Playlist4ApiProto.Rem.newBuilder(rem_).mergeFrom(value).buildPartial();
          } else {
            rem_ = value;
          }
          onChanged();
        } else {
          remBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
       */
      public Builder clearRem() {
        if (remBuilder_ == null) {
          rem_ = null;
          onChanged();
        } else {
          remBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Rem.Builder getRemBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getRemFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.RemOrBuilder getRemOrBuilder() {
        if (remBuilder_ != null) {
          return remBuilder_.getMessageOrBuilder();
        } else {
          return rem_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.Rem.getDefaultInstance() : rem_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.Rem rem = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Rem, com.spotify.playlist4.Playlist4ApiProto.Rem.Builder, com.spotify.playlist4.Playlist4ApiProto.RemOrBuilder> 
          getRemFieldBuilder() {
        if (remBuilder_ == null) {
          remBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Rem, com.spotify.playlist4.Playlist4ApiProto.Rem.Builder, com.spotify.playlist4.Playlist4ApiProto.RemOrBuilder>(
                  getRem(),
                  getParentForChildren(),
                  isClean());
          rem_ = null;
        }
        return remBuilder_;
      }

      private com.spotify.playlist4.Playlist4ApiProto.Mov mov_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Mov, com.spotify.playlist4.Playlist4ApiProto.Mov.Builder, com.spotify.playlist4.Playlist4ApiProto.MovOrBuilder> movBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
       * @return Whether the mov field is set.
       */
      public boolean hasMov() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
       * @return The mov.
       */
      public com.spotify.playlist4.Playlist4ApiProto.Mov getMov() {
        if (movBuilder_ == null) {
          return mov_ == null ? com.spotify.playlist4.Playlist4ApiProto.Mov.getDefaultInstance() : mov_;
        } else {
          return movBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
       */
      public Builder setMov(com.spotify.playlist4.Playlist4ApiProto.Mov value) {
        if (movBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          mov_ = value;
          onChanged();
        } else {
          movBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
       */
      public Builder setMov(
          com.spotify.playlist4.Playlist4ApiProto.Mov.Builder builderForValue) {
        if (movBuilder_ == null) {
          mov_ = builderForValue.build();
          onChanged();
        } else {
          movBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
       */
      public Builder mergeMov(com.spotify.playlist4.Playlist4ApiProto.Mov value) {
        if (movBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0) &&
              mov_ != null &&
              mov_ != com.spotify.playlist4.Playlist4ApiProto.Mov.getDefaultInstance()) {
            mov_ =
              com.spotify.playlist4.Playlist4ApiProto.Mov.newBuilder(mov_).mergeFrom(value).buildPartial();
          } else {
            mov_ = value;
          }
          onChanged();
        } else {
          movBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
       */
      public Builder clearMov() {
        if (movBuilder_ == null) {
          mov_ = null;
          onChanged();
        } else {
          movBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Mov.Builder getMovBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getMovFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.MovOrBuilder getMovOrBuilder() {
        if (movBuilder_ != null) {
          return movBuilder_.getMessageOrBuilder();
        } else {
          return mov_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.Mov.getDefaultInstance() : mov_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.Mov mov = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Mov, com.spotify.playlist4.Playlist4ApiProto.Mov.Builder, com.spotify.playlist4.Playlist4ApiProto.MovOrBuilder> 
          getMovFieldBuilder() {
        if (movBuilder_ == null) {
          movBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Mov, com.spotify.playlist4.Playlist4ApiProto.Mov.Builder, com.spotify.playlist4.Playlist4ApiProto.MovOrBuilder>(
                  getMov(),
                  getParentForChildren(),
                  isClean());
          mov_ = null;
        }
        return movBuilder_;
      }

      private com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes updateItemAttributes_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes, com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributesOrBuilder> updateItemAttributesBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
       * @return Whether the updateItemAttributes field is set.
       */
      public boolean hasUpdateItemAttributes() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
       * @return The updateItemAttributes.
       */
      public com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes getUpdateItemAttributes() {
        if (updateItemAttributesBuilder_ == null) {
          return updateItemAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.getDefaultInstance() : updateItemAttributes_;
        } else {
          return updateItemAttributesBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
       */
      public Builder setUpdateItemAttributes(com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes value) {
        if (updateItemAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          updateItemAttributes_ = value;
          onChanged();
        } else {
          updateItemAttributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
       */
      public Builder setUpdateItemAttributes(
          com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.Builder builderForValue) {
        if (updateItemAttributesBuilder_ == null) {
          updateItemAttributes_ = builderForValue.build();
          onChanged();
        } else {
          updateItemAttributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
       */
      public Builder mergeUpdateItemAttributes(com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes value) {
        if (updateItemAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0) &&
              updateItemAttributes_ != null &&
              updateItemAttributes_ != com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.getDefaultInstance()) {
            updateItemAttributes_ =
              com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.newBuilder(updateItemAttributes_).mergeFrom(value).buildPartial();
          } else {
            updateItemAttributes_ = value;
          }
          onChanged();
        } else {
          updateItemAttributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
       */
      public Builder clearUpdateItemAttributes() {
        if (updateItemAttributesBuilder_ == null) {
          updateItemAttributes_ = null;
          onChanged();
        } else {
          updateItemAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.Builder getUpdateItemAttributesBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getUpdateItemAttributesFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributesOrBuilder getUpdateItemAttributesOrBuilder() {
        if (updateItemAttributesBuilder_ != null) {
          return updateItemAttributesBuilder_.getMessageOrBuilder();
        } else {
          return updateItemAttributes_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.getDefaultInstance() : updateItemAttributes_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateItemAttributes update_item_attributes = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes, com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributesOrBuilder> 
          getUpdateItemAttributesFieldBuilder() {
        if (updateItemAttributesBuilder_ == null) {
          updateItemAttributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes, com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.UpdateItemAttributesOrBuilder>(
                  getUpdateItemAttributes(),
                  getParentForChildren(),
                  isClean());
          updateItemAttributes_ = null;
        }
        return updateItemAttributesBuilder_;
      }

      private com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes updateListAttributes_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes, com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributesOrBuilder> updateListAttributesBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
       * @return Whether the updateListAttributes field is set.
       */
      public boolean hasUpdateListAttributes() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
       * @return The updateListAttributes.
       */
      public com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes getUpdateListAttributes() {
        if (updateListAttributesBuilder_ == null) {
          return updateListAttributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.getDefaultInstance() : updateListAttributes_;
        } else {
          return updateListAttributesBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
       */
      public Builder setUpdateListAttributes(com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes value) {
        if (updateListAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          updateListAttributes_ = value;
          onChanged();
        } else {
          updateListAttributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
       */
      public Builder setUpdateListAttributes(
          com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.Builder builderForValue) {
        if (updateListAttributesBuilder_ == null) {
          updateListAttributes_ = builderForValue.build();
          onChanged();
        } else {
          updateListAttributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
       */
      public Builder mergeUpdateListAttributes(com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes value) {
        if (updateListAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0) &&
              updateListAttributes_ != null &&
              updateListAttributes_ != com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.getDefaultInstance()) {
            updateListAttributes_ =
              com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.newBuilder(updateListAttributes_).mergeFrom(value).buildPartial();
          } else {
            updateListAttributes_ = value;
          }
          onChanged();
        } else {
          updateListAttributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
       */
      public Builder clearUpdateListAttributes() {
        if (updateListAttributesBuilder_ == null) {
          updateListAttributes_ = null;
          onChanged();
        } else {
          updateListAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.Builder getUpdateListAttributesBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getUpdateListAttributesFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributesOrBuilder getUpdateListAttributesOrBuilder() {
        if (updateListAttributesBuilder_ != null) {
          return updateListAttributesBuilder_.getMessageOrBuilder();
        } else {
          return updateListAttributes_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.getDefaultInstance() : updateListAttributes_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.UpdateListAttributes update_list_attributes = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes, com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributesOrBuilder> 
          getUpdateListAttributesFieldBuilder() {
        if (updateListAttributesBuilder_ == null) {
          updateListAttributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes, com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.UpdateListAttributesOrBuilder>(
                  getUpdateListAttributes(),
                  getParentForChildren(),
                  isClean());
          updateListAttributes_ = null;
        }
        return updateListAttributesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.Op)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.Op)
    private static final com.spotify.playlist4.Playlist4ApiProto.Op DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.Op();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Op getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Op>
        PARSER = new com.google.protobuf.AbstractParser<Op>() {
      @java.lang.Override
      public Op parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<Op> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Op> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.Op getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface OpListOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.OpList)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> 
        getOpsList();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index);
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
     */
    int getOpsCount();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
     */
    java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
        getOpsOrBuilderList();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.OpList}
   */
  public  static final class OpList extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.OpList)
      OpListOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use OpList.newBuilder() to construct.
    private OpList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private OpList() {
      ops_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new OpList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_OpList_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_OpList_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.OpList.class, com.spotify.playlist4.Playlist4ApiProto.OpList.Builder.class);
    }

    public static final int OPS_FIELD_NUMBER = 1;
    private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> ops_;
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> getOpsList() {
      return ops_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
     */
    public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
        getOpsOrBuilderList() {
      return ops_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
     */
    public int getOpsCount() {
      return ops_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index) {
      return ops_.get(index);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
        int index) {
      return ops_.get(index);
    }

    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.OpList parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.OpList prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.OpList}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.OpList)
        com.spotify.playlist4.Playlist4ApiProto.OpListOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_OpList_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_OpList_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.OpList.class, com.spotify.playlist4.Playlist4ApiProto.OpList.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.OpList.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getOpsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (opsBuilder_ == null) {
          ops_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          opsBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_OpList_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.OpList getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.OpList.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.OpList build() {
        com.spotify.playlist4.Playlist4ApiProto.OpList result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.OpList buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.OpList result = new com.spotify.playlist4.Playlist4ApiProto.OpList(this);
        int from_bitField0_ = bitField0_;
        if (opsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            ops_ = java.util.Collections.unmodifiableList(ops_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.ops_ = ops_;
        } else {
          result.ops_ = opsBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> ops_ =
        java.util.Collections.emptyList();
      private void ensureOpsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          ops_ = new java.util.ArrayList<com.spotify.playlist4.Playlist4ApiProto.Op>(ops_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> opsBuilder_;

      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> getOpsList() {
        if (opsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(ops_);
        } else {
          return opsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public int getOpsCount() {
        if (opsBuilder_ == null) {
          return ops_.size();
        } else {
          return opsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index) {
        if (opsBuilder_ == null) {
          return ops_.get(index);
        } else {
          return opsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public Builder setOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.set(index, value);
          onChanged();
        } else {
          opsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public Builder setOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.set(index, builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public Builder addOps(com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.add(value);
          onChanged();
        } else {
          opsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public Builder addOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.add(index, value);
          onChanged();
        } else {
          opsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public Builder addOps(
          com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.add(builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public Builder addOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.add(index, builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public Builder addAllOps(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.Op> values) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, ops_);
          onChanged();
        } else {
          opsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public Builder clearOps() {
        if (opsBuilder_ == null) {
          ops_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          opsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public Builder removeOps(int index) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.remove(index);
          onChanged();
        } else {
          opsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder getOpsBuilder(
          int index) {
        return getOpsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
          int index) {
        if (opsBuilder_ == null) {
          return ops_.get(index);  } else {
          return opsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
           getOpsOrBuilderList() {
        if (opsBuilder_ != null) {
          return opsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(ops_);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder addOpsBuilder() {
        return getOpsFieldBuilder().addBuilder(
            com.spotify.playlist4.Playlist4ApiProto.Op.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder addOpsBuilder(
          int index) {
        return getOpsFieldBuilder().addBuilder(
            index, com.spotify.playlist4.Playlist4ApiProto.Op.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 1;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op.Builder> 
           getOpsBuilderList() {
        return getOpsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
          getOpsFieldBuilder() {
        if (opsBuilder_ == null) {
          opsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder>(
                  ops_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          ops_ = null;
        }
        return opsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.OpList)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.OpList)
    private static final com.spotify.playlist4.Playlist4ApiProto.OpList DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.OpList();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.OpList getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<OpList>
        PARSER = new com.google.protobuf.AbstractParser<OpList>() {
      @java.lang.Override
      public OpList parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<OpList> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<OpList> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.OpList getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ChangeInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.ChangeInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string user = 1;</code>
     * @return Whether the user field is set.
     */
    boolean hasUser();
    /**
     * <code>optional string user = 1;</code>
     * @return The user.
     */
    java.lang.String getUser();
    /**
     * <code>optional string user = 1;</code>
     * @return The bytes for user.
     */
    com.google.protobuf.ByteString
        getUserBytes();

    /**
     * <code>optional int64 timestamp = 2;</code>
     * @return Whether the timestamp field is set.
     */
    boolean hasTimestamp();
    /**
     * <code>optional int64 timestamp = 2;</code>
     * @return The timestamp.
     */
    long getTimestamp();

    /**
     * <code>optional bool admin = 3;</code>
     * @return Whether the admin field is set.
     */
    boolean hasAdmin();
    /**
     * <code>optional bool admin = 3;</code>
     * @return The admin.
     */
    boolean getAdmin();

    /**
     * <code>optional bool undo = 4;</code>
     * @return Whether the undo field is set.
     */
    boolean hasUndo();
    /**
     * <code>optional bool undo = 4;</code>
     * @return The undo.
     */
    boolean getUndo();

    /**
     * <code>optional bool redo = 5;</code>
     * @return Whether the redo field is set.
     */
    boolean hasRedo();
    /**
     * <code>optional bool redo = 5;</code>
     * @return The redo.
     */
    boolean getRedo();

    /**
     * <code>optional bool merge = 6;</code>
     * @return Whether the merge field is set.
     */
    boolean hasMerge();
    /**
     * <code>optional bool merge = 6;</code>
     * @return The merge.
     */
    boolean getMerge();

    /**
     * <code>optional bool compressed = 7;</code>
     * @return Whether the compressed field is set.
     */
    boolean hasCompressed();
    /**
     * <code>optional bool compressed = 7;</code>
     * @return The compressed.
     */
    boolean getCompressed();

    /**
     * <code>optional bool migration = 8;</code>
     * @return Whether the migration field is set.
     */
    boolean hasMigration();
    /**
     * <code>optional bool migration = 8;</code>
     * @return The migration.
     */
    boolean getMigration();

    /**
     * <code>optional int32 split_id = 9;</code>
     * @return Whether the splitId field is set.
     */
    boolean hasSplitId();
    /**
     * <code>optional int32 split_id = 9;</code>
     * @return The splitId.
     */
    int getSplitId();

    /**
     * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
     * @return Whether the source field is set.
     */
    boolean hasSource();
    /**
     * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
     * @return The source.
     */
    com.spotify.playlist4.Playlist4ApiProto.SourceInfo getSource();
    /**
     * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.SourceInfoOrBuilder getSourceOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.ChangeInfo}
   */
  public  static final class ChangeInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.ChangeInfo)
      ChangeInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ChangeInfo.newBuilder() to construct.
    private ChangeInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ChangeInfo() {
      user_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ChangeInfo();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ChangeInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ChangeInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.class, com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.Builder.class);
    }

    private int bitField0_;
    public static final int USER_FIELD_NUMBER = 1;
    private volatile java.lang.Object user_;
    /**
     * <code>optional string user = 1;</code>
     * @return Whether the user field is set.
     */
    public boolean hasUser() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string user = 1;</code>
     * @return The user.
     */
    public java.lang.String getUser() {
      java.lang.Object ref = user_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          user_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string user = 1;</code>
     * @return The bytes for user.
     */
    public com.google.protobuf.ByteString
        getUserBytes() {
      java.lang.Object ref = user_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        user_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 2;
    private long timestamp_;
    /**
     * <code>optional int64 timestamp = 2;</code>
     * @return Whether the timestamp field is set.
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional int64 timestamp = 2;</code>
     * @return The timestamp.
     */
    public long getTimestamp() {
      return timestamp_;
    }

    public static final int ADMIN_FIELD_NUMBER = 3;
    private boolean admin_;
    /**
     * <code>optional bool admin = 3;</code>
     * @return Whether the admin field is set.
     */
    public boolean hasAdmin() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional bool admin = 3;</code>
     * @return The admin.
     */
    public boolean getAdmin() {
      return admin_;
    }

    public static final int UNDO_FIELD_NUMBER = 4;
    private boolean undo_;
    /**
     * <code>optional bool undo = 4;</code>
     * @return Whether the undo field is set.
     */
    public boolean hasUndo() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional bool undo = 4;</code>
     * @return The undo.
     */
    public boolean getUndo() {
      return undo_;
    }

    public static final int REDO_FIELD_NUMBER = 5;
    private boolean redo_;
    /**
     * <code>optional bool redo = 5;</code>
     * @return Whether the redo field is set.
     */
    public boolean hasRedo() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional bool redo = 5;</code>
     * @return The redo.
     */
    public boolean getRedo() {
      return redo_;
    }

    public static final int MERGE_FIELD_NUMBER = 6;
    private boolean merge_;
    /**
     * <code>optional bool merge = 6;</code>
     * @return Whether the merge field is set.
     */
    public boolean hasMerge() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional bool merge = 6;</code>
     * @return The merge.
     */
    public boolean getMerge() {
      return merge_;
    }

    public static final int COMPRESSED_FIELD_NUMBER = 7;
    private boolean compressed_;
    /**
     * <code>optional bool compressed = 7;</code>
     * @return Whether the compressed field is set.
     */
    public boolean hasCompressed() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional bool compressed = 7;</code>
     * @return The compressed.
     */
    public boolean getCompressed() {
      return compressed_;
    }

    public static final int MIGRATION_FIELD_NUMBER = 8;
    private boolean migration_;
    /**
     * <code>optional bool migration = 8;</code>
     * @return Whether the migration field is set.
     */
    public boolean hasMigration() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional bool migration = 8;</code>
     * @return The migration.
     */
    public boolean getMigration() {
      return migration_;
    }

    public static final int SPLIT_ID_FIELD_NUMBER = 9;
    private int splitId_;
    /**
     * <code>optional int32 split_id = 9;</code>
     * @return Whether the splitId field is set.
     */
    public boolean hasSplitId() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>optional int32 split_id = 9;</code>
     * @return The splitId.
     */
    public int getSplitId() {
      return splitId_;
    }

    public static final int SOURCE_FIELD_NUMBER = 10;
    private com.spotify.playlist4.Playlist4ApiProto.SourceInfo source_;
    /**
     * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
     * @return Whether the source field is set.
     */
    public boolean hasSource() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
     * @return The source.
     */
    public com.spotify.playlist4.Playlist4ApiProto.SourceInfo getSource() {
      return source_ == null ? com.spotify.playlist4.Playlist4ApiProto.SourceInfo.getDefaultInstance() : source_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.SourceInfoOrBuilder getSourceOrBuilder() {
      return source_ == null ? com.spotify.playlist4.Playlist4ApiProto.SourceInfo.getDefaultInstance() : source_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.ChangeInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.ChangeInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.ChangeInfo)
        com.spotify.playlist4.Playlist4ApiProto.ChangeInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ChangeInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ChangeInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.class, com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSourceFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        user_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        admin_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        undo_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        redo_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        merge_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        compressed_ = false;
        bitField0_ = (bitField0_ & ~0x00000040);
        migration_ = false;
        bitField0_ = (bitField0_ & ~0x00000080);
        splitId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000100);
        if (sourceBuilder_ == null) {
          source_ = null;
        } else {
          sourceBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ChangeInfo_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ChangeInfo getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ChangeInfo build() {
        com.spotify.playlist4.Playlist4ApiProto.ChangeInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ChangeInfo buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.ChangeInfo result = new com.spotify.playlist4.Playlist4ApiProto.ChangeInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.user_ = user_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.timestamp_ = timestamp_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.admin_ = admin_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.undo_ = undo_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.redo_ = redo_;
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.merge_ = merge_;
          to_bitField0_ |= 0x00000020;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.compressed_ = compressed_;
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.migration_ = migration_;
          to_bitField0_ |= 0x00000080;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.splitId_ = splitId_;
          to_bitField0_ |= 0x00000100;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          if (sourceBuilder_ == null) {
            result.source_ = source_;
          } else {
            result.source_ = sourceBuilder_.build();
          }
          to_bitField0_ |= 0x00000200;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private java.lang.Object user_ = "";
      /**
       * <code>optional string user = 1;</code>
       * @return Whether the user field is set.
       */
      public boolean hasUser() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional string user = 1;</code>
       * @return The user.
       */
      public java.lang.String getUser() {
        java.lang.Object ref = user_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            user_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string user = 1;</code>
       * @return The bytes for user.
       */
      public com.google.protobuf.ByteString
          getUserBytes() {
        java.lang.Object ref = user_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          user_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string user = 1;</code>
       * @param value The user to set.
       * @return This builder for chaining.
       */
      public Builder setUser(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        user_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string user = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearUser() {
        bitField0_ = (bitField0_ & ~0x00000001);
        user_ = getDefaultInstance().getUser();
        onChanged();
        return this;
      }
      /**
       * <code>optional string user = 1;</code>
       * @param value The bytes for user to set.
       * @return This builder for chaining.
       */
      public Builder setUserBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        user_ = value;
        onChanged();
        return this;
      }

      private long timestamp_ ;
      /**
       * <code>optional int64 timestamp = 2;</code>
       * @return Whether the timestamp field is set.
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional int64 timestamp = 2;</code>
       * @return The timestamp.
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>optional int64 timestamp = 2;</code>
       * @param value The timestamp to set.
       * @return This builder for chaining.
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000002;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 timestamp = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000002);
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      private boolean admin_ ;
      /**
       * <code>optional bool admin = 3;</code>
       * @return Whether the admin field is set.
       */
      public boolean hasAdmin() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional bool admin = 3;</code>
       * @return The admin.
       */
      public boolean getAdmin() {
        return admin_;
      }
      /**
       * <code>optional bool admin = 3;</code>
       * @param value The admin to set.
       * @return This builder for chaining.
       */
      public Builder setAdmin(boolean value) {
        bitField0_ |= 0x00000004;
        admin_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool admin = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearAdmin() {
        bitField0_ = (bitField0_ & ~0x00000004);
        admin_ = false;
        onChanged();
        return this;
      }

      private boolean undo_ ;
      /**
       * <code>optional bool undo = 4;</code>
       * @return Whether the undo field is set.
       */
      public boolean hasUndo() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional bool undo = 4;</code>
       * @return The undo.
       */
      public boolean getUndo() {
        return undo_;
      }
      /**
       * <code>optional bool undo = 4;</code>
       * @param value The undo to set.
       * @return This builder for chaining.
       */
      public Builder setUndo(boolean value) {
        bitField0_ |= 0x00000008;
        undo_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool undo = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearUndo() {
        bitField0_ = (bitField0_ & ~0x00000008);
        undo_ = false;
        onChanged();
        return this;
      }

      private boolean redo_ ;
      /**
       * <code>optional bool redo = 5;</code>
       * @return Whether the redo field is set.
       */
      public boolean hasRedo() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional bool redo = 5;</code>
       * @return The redo.
       */
      public boolean getRedo() {
        return redo_;
      }
      /**
       * <code>optional bool redo = 5;</code>
       * @param value The redo to set.
       * @return This builder for chaining.
       */
      public Builder setRedo(boolean value) {
        bitField0_ |= 0x00000010;
        redo_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool redo = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearRedo() {
        bitField0_ = (bitField0_ & ~0x00000010);
        redo_ = false;
        onChanged();
        return this;
      }

      private boolean merge_ ;
      /**
       * <code>optional bool merge = 6;</code>
       * @return Whether the merge field is set.
       */
      public boolean hasMerge() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional bool merge = 6;</code>
       * @return The merge.
       */
      public boolean getMerge() {
        return merge_;
      }
      /**
       * <code>optional bool merge = 6;</code>
       * @param value The merge to set.
       * @return This builder for chaining.
       */
      public Builder setMerge(boolean value) {
        bitField0_ |= 0x00000020;
        merge_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool merge = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearMerge() {
        bitField0_ = (bitField0_ & ~0x00000020);
        merge_ = false;
        onChanged();
        return this;
      }

      private boolean compressed_ ;
      /**
       * <code>optional bool compressed = 7;</code>
       * @return Whether the compressed field is set.
       */
      public boolean hasCompressed() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional bool compressed = 7;</code>
       * @return The compressed.
       */
      public boolean getCompressed() {
        return compressed_;
      }
      /**
       * <code>optional bool compressed = 7;</code>
       * @param value The compressed to set.
       * @return This builder for chaining.
       */
      public Builder setCompressed(boolean value) {
        bitField0_ |= 0x00000040;
        compressed_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool compressed = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearCompressed() {
        bitField0_ = (bitField0_ & ~0x00000040);
        compressed_ = false;
        onChanged();
        return this;
      }

      private boolean migration_ ;
      /**
       * <code>optional bool migration = 8;</code>
       * @return Whether the migration field is set.
       */
      public boolean hasMigration() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional bool migration = 8;</code>
       * @return The migration.
       */
      public boolean getMigration() {
        return migration_;
      }
      /**
       * <code>optional bool migration = 8;</code>
       * @param value The migration to set.
       * @return This builder for chaining.
       */
      public Builder setMigration(boolean value) {
        bitField0_ |= 0x00000080;
        migration_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool migration = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearMigration() {
        bitField0_ = (bitField0_ & ~0x00000080);
        migration_ = false;
        onChanged();
        return this;
      }

      private int splitId_ ;
      /**
       * <code>optional int32 split_id = 9;</code>
       * @return Whether the splitId field is set.
       */
      public boolean hasSplitId() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <code>optional int32 split_id = 9;</code>
       * @return The splitId.
       */
      public int getSplitId() {
        return splitId_;
      }
      /**
       * <code>optional int32 split_id = 9;</code>
       * @param value The splitId to set.
       * @return This builder for chaining.
       */
      public Builder setSplitId(int value) {
        bitField0_ |= 0x00000100;
        splitId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 split_id = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearSplitId() {
        bitField0_ = (bitField0_ & ~0x00000100);
        splitId_ = 0;
        onChanged();
        return this;
      }

      private com.spotify.playlist4.Playlist4ApiProto.SourceInfo source_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.SourceInfo, com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Builder, com.spotify.playlist4.Playlist4ApiProto.SourceInfoOrBuilder> sourceBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
       * @return Whether the source field is set.
       */
      public boolean hasSource() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
       * @return The source.
       */
      public com.spotify.playlist4.Playlist4ApiProto.SourceInfo getSource() {
        if (sourceBuilder_ == null) {
          return source_ == null ? com.spotify.playlist4.Playlist4ApiProto.SourceInfo.getDefaultInstance() : source_;
        } else {
          return sourceBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
       */
      public Builder setSource(com.spotify.playlist4.Playlist4ApiProto.SourceInfo value) {
        if (sourceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          source_ = value;
          onChanged();
        } else {
          sourceBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
       */
      public Builder setSource(
          com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Builder builderForValue) {
        if (sourceBuilder_ == null) {
          source_ = builderForValue.build();
          onChanged();
        } else {
          sourceBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
       */
      public Builder mergeSource(com.spotify.playlist4.Playlist4ApiProto.SourceInfo value) {
        if (sourceBuilder_ == null) {
          if (((bitField0_ & 0x00000200) != 0) &&
              source_ != null &&
              source_ != com.spotify.playlist4.Playlist4ApiProto.SourceInfo.getDefaultInstance()) {
            source_ =
              com.spotify.playlist4.Playlist4ApiProto.SourceInfo.newBuilder(source_).mergeFrom(value).buildPartial();
          } else {
            source_ = value;
          }
          onChanged();
        } else {
          sourceBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
       */
      public Builder clearSource() {
        if (sourceBuilder_ == null) {
          source_ = null;
          onChanged();
        } else {
          sourceBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Builder getSourceBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getSourceFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.SourceInfoOrBuilder getSourceOrBuilder() {
        if (sourceBuilder_ != null) {
          return sourceBuilder_.getMessageOrBuilder();
        } else {
          return source_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.SourceInfo.getDefaultInstance() : source_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo source = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.SourceInfo, com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Builder, com.spotify.playlist4.Playlist4ApiProto.SourceInfoOrBuilder> 
          getSourceFieldBuilder() {
        if (sourceBuilder_ == null) {
          sourceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.SourceInfo, com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Builder, com.spotify.playlist4.Playlist4ApiProto.SourceInfoOrBuilder>(
                  getSource(),
                  getParentForChildren(),
                  isClean());
          source_ = null;
        }
        return sourceBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.ChangeInfo)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.ChangeInfo)
    private static final com.spotify.playlist4.Playlist4ApiProto.ChangeInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.ChangeInfo();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ChangeInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ChangeInfo>
        PARSER = new com.google.protobuf.AbstractParser<ChangeInfo>() {
      @java.lang.Override
      public ChangeInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<ChangeInfo> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ChangeInfo> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.ChangeInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SourceInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.SourceInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .spotify.playlist4.proto.SourceInfo.Client client = 1;</code>
     * @return Whether the client field is set.
     */
    boolean hasClient();
    /**
     * <code>optional .spotify.playlist4.proto.SourceInfo.Client client = 1;</code>
     * @return The client.
     */
    com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Client getClient();

    /**
     * <code>optional string app = 3;</code>
     * @return Whether the app field is set.
     */
    boolean hasApp();
    /**
     * <code>optional string app = 3;</code>
     * @return The app.
     */
    java.lang.String getApp();
    /**
     * <code>optional string app = 3;</code>
     * @return The bytes for app.
     */
    com.google.protobuf.ByteString
        getAppBytes();

    /**
     * <code>optional string source = 4;</code>
     * @return Whether the source field is set.
     */
    boolean hasSource();
    /**
     * <code>optional string source = 4;</code>
     * @return The source.
     */
    java.lang.String getSource();
    /**
     * <code>optional string source = 4;</code>
     * @return The bytes for source.
     */
    com.google.protobuf.ByteString
        getSourceBytes();

    /**
     * <code>optional string version = 5;</code>
     * @return Whether the version field is set.
     */
    boolean hasVersion();
    /**
     * <code>optional string version = 5;</code>
     * @return The version.
     */
    java.lang.String getVersion();
    /**
     * <code>optional string version = 5;</code>
     * @return The bytes for version.
     */
    com.google.protobuf.ByteString
        getVersionBytes();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.SourceInfo}
   */
  public  static final class SourceInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.SourceInfo)
      SourceInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SourceInfo.newBuilder() to construct.
    private SourceInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SourceInfo() {
      client_ = 0;
      app_ = "";
      source_ = "";
      version_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new SourceInfo();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SourceInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SourceInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.SourceInfo.class, com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Builder.class);
    }

    /**
     * Protobuf enum {@code spotify.playlist4.proto.SourceInfo.Client}
     */
    public enum Client
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>CLIENT_UNKNOWN = 0;</code>
       */
      CLIENT_UNKNOWN(0),
      /**
       * <code>NATIVE_HERMES = 1;</code>
       */
      NATIVE_HERMES(1),
      /**
       * <code>CLIENT = 2;</code>
       */
      CLIENT(2),
      /**
       * <code>PYTHON = 3;</code>
       */
      PYTHON(3),
      /**
       * <code>JAVA = 4;</code>
       */
      JAVA(4),
      /**
       * <code>WEBPLAYER = 5;</code>
       */
      WEBPLAYER(5),
      /**
       * <code>LIBSPOTIFY = 6;</code>
       */
      LIBSPOTIFY(6),
      ;

      /**
       * <code>CLIENT_UNKNOWN = 0;</code>
       */
      public static final int CLIENT_UNKNOWN_VALUE = 0;
      /**
       * <code>NATIVE_HERMES = 1;</code>
       */
      public static final int NATIVE_HERMES_VALUE = 1;
      /**
       * <code>CLIENT = 2;</code>
       */
      public static final int CLIENT_VALUE = 2;
      /**
       * <code>PYTHON = 3;</code>
       */
      public static final int PYTHON_VALUE = 3;
      /**
       * <code>JAVA = 4;</code>
       */
      public static final int JAVA_VALUE = 4;
      /**
       * <code>WEBPLAYER = 5;</code>
       */
      public static final int WEBPLAYER_VALUE = 5;
      /**
       * <code>LIBSPOTIFY = 6;</code>
       */
      public static final int LIBSPOTIFY_VALUE = 6;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Client valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Client forNumber(int value) {
        switch (value) {
          case 0: return CLIENT_UNKNOWN;
          case 1: return NATIVE_HERMES;
          case 2: return CLIENT;
          case 3: return PYTHON;
          case 4: return JAVA;
          case 5: return WEBPLAYER;
          case 6: return LIBSPOTIFY;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Client>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          Client> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Client>() {
              public Client findValueByNumber(int number) {
                return Client.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.SourceInfo.getDescriptor().getEnumTypes().get(0);
      }

      private static final Client[] VALUES = values();

      public static Client valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private Client(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:spotify.playlist4.proto.SourceInfo.Client)
    }

    private int bitField0_;
    public static final int CLIENT_FIELD_NUMBER = 1;
    private int client_;
    /**
     * <code>optional .spotify.playlist4.proto.SourceInfo.Client client = 1;</code>
     * @return Whether the client field is set.
     */
    public boolean hasClient() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.SourceInfo.Client client = 1;</code>
     * @return The client.
     */
    public com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Client getClient() {
      @SuppressWarnings("deprecation")
      com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Client result = com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Client.valueOf(client_);
      return result == null ? com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Client.CLIENT_UNKNOWN : result;
    }

    public static final int APP_FIELD_NUMBER = 3;
    private volatile java.lang.Object app_;
    /**
     * <code>optional string app = 3;</code>
     * @return Whether the app field is set.
     */
    public boolean hasApp() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string app = 3;</code>
     * @return The app.
     */
    public java.lang.String getApp() {
      java.lang.Object ref = app_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          app_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string app = 3;</code>
     * @return The bytes for app.
     */
    public com.google.protobuf.ByteString
        getAppBytes() {
      java.lang.Object ref = app_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        app_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SOURCE_FIELD_NUMBER = 4;
    private volatile java.lang.Object source_;
    /**
     * <code>optional string source = 4;</code>
     * @return Whether the source field is set.
     */
    public boolean hasSource() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional string source = 4;</code>
     * @return The source.
     */
    public java.lang.String getSource() {
      java.lang.Object ref = source_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          source_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string source = 4;</code>
     * @return The bytes for source.
     */
    public com.google.protobuf.ByteString
        getSourceBytes() {
      java.lang.Object ref = source_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        source_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VERSION_FIELD_NUMBER = 5;
    private volatile java.lang.Object version_;
    /**
     * <code>optional string version = 5;</code>
     * @return Whether the version field is set.
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional string version = 5;</code>
     * @return The version.
     */
    public java.lang.String getVersion() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          version_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string version = 5;</code>
     * @return The bytes for version.
     */
    public com.google.protobuf.ByteString
        getVersionBytes() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        version_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.SourceInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.SourceInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.SourceInfo)
        com.spotify.playlist4.Playlist4ApiProto.SourceInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SourceInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SourceInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.SourceInfo.class, com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.SourceInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        client_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        app_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        source_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        version_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SourceInfo_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.SourceInfo getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.SourceInfo.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.SourceInfo build() {
        com.spotify.playlist4.Playlist4ApiProto.SourceInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.SourceInfo buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.SourceInfo result = new com.spotify.playlist4.Playlist4ApiProto.SourceInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.client_ = client_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.app_ = app_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.source_ = source_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.version_ = version_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private int client_ = 0;
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo.Client client = 1;</code>
       * @return Whether the client field is set.
       */
      public boolean hasClient() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo.Client client = 1;</code>
       * @return The client.
       */
      public com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Client getClient() {
        @SuppressWarnings("deprecation")
        com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Client result = com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Client.valueOf(client_);
        return result == null ? com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Client.CLIENT_UNKNOWN : result;
      }
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo.Client client = 1;</code>
       * @param value The client to set.
       * @return This builder for chaining.
       */
      public Builder setClient(com.spotify.playlist4.Playlist4ApiProto.SourceInfo.Client value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        client_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.SourceInfo.Client client = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearClient() {
        bitField0_ = (bitField0_ & ~0x00000001);
        client_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object app_ = "";
      /**
       * <code>optional string app = 3;</code>
       * @return Whether the app field is set.
       */
      public boolean hasApp() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string app = 3;</code>
       * @return The app.
       */
      public java.lang.String getApp() {
        java.lang.Object ref = app_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            app_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string app = 3;</code>
       * @return The bytes for app.
       */
      public com.google.protobuf.ByteString
          getAppBytes() {
        java.lang.Object ref = app_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          app_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string app = 3;</code>
       * @param value The app to set.
       * @return This builder for chaining.
       */
      public Builder setApp(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        app_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string app = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearApp() {
        bitField0_ = (bitField0_ & ~0x00000002);
        app_ = getDefaultInstance().getApp();
        onChanged();
        return this;
      }
      /**
       * <code>optional string app = 3;</code>
       * @param value The bytes for app to set.
       * @return This builder for chaining.
       */
      public Builder setAppBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        app_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object source_ = "";
      /**
       * <code>optional string source = 4;</code>
       * @return Whether the source field is set.
       */
      public boolean hasSource() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional string source = 4;</code>
       * @return The source.
       */
      public java.lang.String getSource() {
        java.lang.Object ref = source_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            source_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string source = 4;</code>
       * @return The bytes for source.
       */
      public com.google.protobuf.ByteString
          getSourceBytes() {
        java.lang.Object ref = source_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          source_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string source = 4;</code>
       * @param value The source to set.
       * @return This builder for chaining.
       */
      public Builder setSource(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        source_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string source = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearSource() {
        bitField0_ = (bitField0_ & ~0x00000004);
        source_ = getDefaultInstance().getSource();
        onChanged();
        return this;
      }
      /**
       * <code>optional string source = 4;</code>
       * @param value The bytes for source to set.
       * @return This builder for chaining.
       */
      public Builder setSourceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        source_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object version_ = "";
      /**
       * <code>optional string version = 5;</code>
       * @return Whether the version field is set.
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional string version = 5;</code>
       * @return The version.
       */
      public java.lang.String getVersion() {
        java.lang.Object ref = version_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            version_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string version = 5;</code>
       * @return The bytes for version.
       */
      public com.google.protobuf.ByteString
          getVersionBytes() {
        java.lang.Object ref = version_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          version_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string version = 5;</code>
       * @param value The version to set.
       * @return This builder for chaining.
       */
      public Builder setVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000008);
        version_ = getDefaultInstance().getVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 5;</code>
       * @param value The bytes for version to set.
       * @return This builder for chaining.
       */
      public Builder setVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        version_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.SourceInfo)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.SourceInfo)
    private static final com.spotify.playlist4.Playlist4ApiProto.SourceInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.SourceInfo();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.SourceInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SourceInfo>
        PARSER = new com.google.protobuf.AbstractParser<SourceInfo>() {
      @java.lang.Override
      public SourceInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<SourceInfo> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SourceInfo> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.SourceInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DeltaOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.Delta)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes base_version = 1;</code>
     * @return Whether the baseVersion field is set.
     */
    boolean hasBaseVersion();
    /**
     * <code>optional bytes base_version = 1;</code>
     * @return The baseVersion.
     */
    com.google.protobuf.ByteString getBaseVersion();

    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> 
        getOpsList();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index);
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    int getOpsCount();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
        getOpsOrBuilderList();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
        int index);

    /**
     * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
     * @return Whether the info field is set.
     */
    boolean hasInfo();
    /**
     * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
     * @return The info.
     */
    com.spotify.playlist4.Playlist4ApiProto.ChangeInfo getInfo();
    /**
     * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ChangeInfoOrBuilder getInfoOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.Delta}
   */
  public  static final class Delta extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.Delta)
      DeltaOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Delta.newBuilder() to construct.
    private Delta(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Delta() {
      baseVersion_ = com.google.protobuf.ByteString.EMPTY;
      ops_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Delta();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Delta_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Delta_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.Delta.class, com.spotify.playlist4.Playlist4ApiProto.Delta.Builder.class);
    }

    private int bitField0_;
    public static final int BASE_VERSION_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString baseVersion_;
    /**
     * <code>optional bytes base_version = 1;</code>
     * @return Whether the baseVersion field is set.
     */
    public boolean hasBaseVersion() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes base_version = 1;</code>
     * @return The baseVersion.
     */
    public com.google.protobuf.ByteString getBaseVersion() {
      return baseVersion_;
    }

    public static final int OPS_FIELD_NUMBER = 2;
    private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> ops_;
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> getOpsList() {
      return ops_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
        getOpsOrBuilderList() {
      return ops_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    public int getOpsCount() {
      return ops_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index) {
      return ops_.get(index);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
        int index) {
      return ops_.get(index);
    }

    public static final int INFO_FIELD_NUMBER = 4;
    private com.spotify.playlist4.Playlist4ApiProto.ChangeInfo info_;
    /**
     * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
     * @return Whether the info field is set.
     */
    public boolean hasInfo() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
     * @return The info.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ChangeInfo getInfo() {
      return info_ == null ? com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.getDefaultInstance() : info_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ChangeInfoOrBuilder getInfoOrBuilder() {
      return info_ == null ? com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.getDefaultInstance() : info_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Delta parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.Delta prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.Delta}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.Delta)
        com.spotify.playlist4.Playlist4ApiProto.DeltaOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Delta_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Delta_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.Delta.class, com.spotify.playlist4.Playlist4ApiProto.Delta.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.Delta.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getOpsFieldBuilder();
          getInfoFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        baseVersion_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (opsBuilder_ == null) {
          ops_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          opsBuilder_.clear();
        }
        if (infoBuilder_ == null) {
          info_ = null;
        } else {
          infoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Delta_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Delta getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.Delta.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Delta build() {
        com.spotify.playlist4.Playlist4ApiProto.Delta result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Delta buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.Delta result = new com.spotify.playlist4.Playlist4ApiProto.Delta(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.baseVersion_ = baseVersion_;
        if (opsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            ops_ = java.util.Collections.unmodifiableList(ops_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.ops_ = ops_;
        } else {
          result.ops_ = opsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          if (infoBuilder_ == null) {
            result.info_ = info_;
          } else {
            result.info_ = infoBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString baseVersion_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes base_version = 1;</code>
       * @return Whether the baseVersion field is set.
       */
      public boolean hasBaseVersion() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes base_version = 1;</code>
       * @return The baseVersion.
       */
      public com.google.protobuf.ByteString getBaseVersion() {
        return baseVersion_;
      }
      /**
       * <code>optional bytes base_version = 1;</code>
       * @param value The baseVersion to set.
       * @return This builder for chaining.
       */
      public Builder setBaseVersion(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        baseVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes base_version = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearBaseVersion() {
        bitField0_ = (bitField0_ & ~0x00000001);
        baseVersion_ = getDefaultInstance().getBaseVersion();
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> ops_ =
        java.util.Collections.emptyList();
      private void ensureOpsIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          ops_ = new java.util.ArrayList<com.spotify.playlist4.Playlist4ApiProto.Op>(ops_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> opsBuilder_;

      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> getOpsList() {
        if (opsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(ops_);
        } else {
          return opsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public int getOpsCount() {
        if (opsBuilder_ == null) {
          return ops_.size();
        } else {
          return opsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index) {
        if (opsBuilder_ == null) {
          return ops_.get(index);
        } else {
          return opsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder setOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.set(index, value);
          onChanged();
        } else {
          opsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder setOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.set(index, builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder addOps(com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.add(value);
          onChanged();
        } else {
          opsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder addOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.add(index, value);
          onChanged();
        } else {
          opsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder addOps(
          com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.add(builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder addOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.add(index, builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder addAllOps(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.Op> values) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, ops_);
          onChanged();
        } else {
          opsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder clearOps() {
        if (opsBuilder_ == null) {
          ops_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          opsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder removeOps(int index) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.remove(index);
          onChanged();
        } else {
          opsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder getOpsBuilder(
          int index) {
        return getOpsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
          int index) {
        if (opsBuilder_ == null) {
          return ops_.get(index);  } else {
          return opsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
           getOpsOrBuilderList() {
        if (opsBuilder_ != null) {
          return opsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(ops_);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder addOpsBuilder() {
        return getOpsFieldBuilder().addBuilder(
            com.spotify.playlist4.Playlist4ApiProto.Op.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder addOpsBuilder(
          int index) {
        return getOpsFieldBuilder().addBuilder(
            index, com.spotify.playlist4.Playlist4ApiProto.Op.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op.Builder> 
           getOpsBuilderList() {
        return getOpsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
          getOpsFieldBuilder() {
        if (opsBuilder_ == null) {
          opsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder>(
                  ops_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          ops_ = null;
        }
        return opsBuilder_;
      }

      private com.spotify.playlist4.Playlist4ApiProto.ChangeInfo info_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ChangeInfo, com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.Builder, com.spotify.playlist4.Playlist4ApiProto.ChangeInfoOrBuilder> infoBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
       * @return Whether the info field is set.
       */
      public boolean hasInfo() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
       * @return The info.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ChangeInfo getInfo() {
        if (infoBuilder_ == null) {
          return info_ == null ? com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.getDefaultInstance() : info_;
        } else {
          return infoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
       */
      public Builder setInfo(com.spotify.playlist4.Playlist4ApiProto.ChangeInfo value) {
        if (infoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          info_ = value;
          onChanged();
        } else {
          infoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
       */
      public Builder setInfo(
          com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.Builder builderForValue) {
        if (infoBuilder_ == null) {
          info_ = builderForValue.build();
          onChanged();
        } else {
          infoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
       */
      public Builder mergeInfo(com.spotify.playlist4.Playlist4ApiProto.ChangeInfo value) {
        if (infoBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0) &&
              info_ != null &&
              info_ != com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.getDefaultInstance()) {
            info_ =
              com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.newBuilder(info_).mergeFrom(value).buildPartial();
          } else {
            info_ = value;
          }
          onChanged();
        } else {
          infoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
       */
      public Builder clearInfo() {
        if (infoBuilder_ == null) {
          info_ = null;
          onChanged();
        } else {
          infoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.Builder getInfoBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ChangeInfoOrBuilder getInfoOrBuilder() {
        if (infoBuilder_ != null) {
          return infoBuilder_.getMessageOrBuilder();
        } else {
          return info_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.getDefaultInstance() : info_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ChangeInfo info = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ChangeInfo, com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.Builder, com.spotify.playlist4.Playlist4ApiProto.ChangeInfoOrBuilder> 
          getInfoFieldBuilder() {
        if (infoBuilder_ == null) {
          infoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.ChangeInfo, com.spotify.playlist4.Playlist4ApiProto.ChangeInfo.Builder, com.spotify.playlist4.Playlist4ApiProto.ChangeInfoOrBuilder>(
                  getInfo(),
                  getParentForChildren(),
                  isClean());
          info_ = null;
        }
        return infoBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.Delta)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.Delta)
    private static final com.spotify.playlist4.Playlist4ApiProto.Delta DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.Delta();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Delta getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Delta>
        PARSER = new com.google.protobuf.AbstractParser<Delta>() {
      @java.lang.Override
      public Delta parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<Delta> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Delta> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.Delta getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DiffOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.Diff)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required bytes from_revision = 1;</code>
     * @return Whether the fromRevision field is set.
     */
    boolean hasFromRevision();
    /**
     * <code>required bytes from_revision = 1;</code>
     * @return The fromRevision.
     */
    com.google.protobuf.ByteString getFromRevision();

    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> 
        getOpsList();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index);
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    int getOpsCount();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
        getOpsOrBuilderList();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
        int index);

    /**
     * <code>required bytes to_revision = 3;</code>
     * @return Whether the toRevision field is set.
     */
    boolean hasToRevision();
    /**
     * <code>required bytes to_revision = 3;</code>
     * @return The toRevision.
     */
    com.google.protobuf.ByteString getToRevision();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.Diff}
   */
  public  static final class Diff extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.Diff)
      DiffOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Diff.newBuilder() to construct.
    private Diff(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Diff() {
      fromRevision_ = com.google.protobuf.ByteString.EMPTY;
      ops_ = java.util.Collections.emptyList();
      toRevision_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Diff();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Diff_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Diff_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.Diff.class, com.spotify.playlist4.Playlist4ApiProto.Diff.Builder.class);
    }

    private int bitField0_;
    public static final int FROM_REVISION_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString fromRevision_;
    /**
     * <code>required bytes from_revision = 1;</code>
     * @return Whether the fromRevision field is set.
     */
    public boolean hasFromRevision() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required bytes from_revision = 1;</code>
     * @return The fromRevision.
     */
    public com.google.protobuf.ByteString getFromRevision() {
      return fromRevision_;
    }

    public static final int OPS_FIELD_NUMBER = 2;
    private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> ops_;
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> getOpsList() {
      return ops_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
        getOpsOrBuilderList() {
      return ops_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    public int getOpsCount() {
      return ops_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index) {
      return ops_.get(index);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
        int index) {
      return ops_.get(index);
    }

    public static final int TO_REVISION_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString toRevision_;
    /**
     * <code>required bytes to_revision = 3;</code>
     * @return Whether the toRevision field is set.
     */
    public boolean hasToRevision() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required bytes to_revision = 3;</code>
     * @return The toRevision.
     */
    public com.google.protobuf.ByteString getToRevision() {
      return toRevision_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.Diff parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.Diff prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.Diff}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.Diff)
        com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Diff_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Diff_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.Diff.class, com.spotify.playlist4.Playlist4ApiProto.Diff.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.Diff.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getOpsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        fromRevision_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (opsBuilder_ == null) {
          ops_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          opsBuilder_.clear();
        }
        toRevision_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_Diff_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Diff getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.Diff.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Diff build() {
        com.spotify.playlist4.Playlist4ApiProto.Diff result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.Diff buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.Diff result = new com.spotify.playlist4.Playlist4ApiProto.Diff(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.fromRevision_ = fromRevision_;
        if (opsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            ops_ = java.util.Collections.unmodifiableList(ops_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.ops_ = ops_;
        } else {
          result.ops_ = opsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.toRevision_ = toRevision_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString fromRevision_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes from_revision = 1;</code>
       * @return Whether the fromRevision field is set.
       */
      public boolean hasFromRevision() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required bytes from_revision = 1;</code>
       * @return The fromRevision.
       */
      public com.google.protobuf.ByteString getFromRevision() {
        return fromRevision_;
      }
      /**
       * <code>required bytes from_revision = 1;</code>
       * @param value The fromRevision to set.
       * @return This builder for chaining.
       */
      public Builder setFromRevision(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        fromRevision_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes from_revision = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFromRevision() {
        bitField0_ = (bitField0_ & ~0x00000001);
        fromRevision_ = getDefaultInstance().getFromRevision();
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> ops_ =
        java.util.Collections.emptyList();
      private void ensureOpsIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          ops_ = new java.util.ArrayList<com.spotify.playlist4.Playlist4ApiProto.Op>(ops_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> opsBuilder_;

      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> getOpsList() {
        if (opsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(ops_);
        } else {
          return opsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public int getOpsCount() {
        if (opsBuilder_ == null) {
          return ops_.size();
        } else {
          return opsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index) {
        if (opsBuilder_ == null) {
          return ops_.get(index);
        } else {
          return opsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder setOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.set(index, value);
          onChanged();
        } else {
          opsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder setOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.set(index, builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder addOps(com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.add(value);
          onChanged();
        } else {
          opsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder addOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.add(index, value);
          onChanged();
        } else {
          opsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder addOps(
          com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.add(builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder addOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.add(index, builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder addAllOps(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.Op> values) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, ops_);
          onChanged();
        } else {
          opsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder clearOps() {
        if (opsBuilder_ == null) {
          ops_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          opsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public Builder removeOps(int index) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.remove(index);
          onChanged();
        } else {
          opsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder getOpsBuilder(
          int index) {
        return getOpsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
          int index) {
        if (opsBuilder_ == null) {
          return ops_.get(index);  } else {
          return opsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
           getOpsOrBuilderList() {
        if (opsBuilder_ != null) {
          return opsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(ops_);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder addOpsBuilder() {
        return getOpsFieldBuilder().addBuilder(
            com.spotify.playlist4.Playlist4ApiProto.Op.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder addOpsBuilder(
          int index) {
        return getOpsFieldBuilder().addBuilder(
            index, com.spotify.playlist4.Playlist4ApiProto.Op.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 2;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op.Builder> 
           getOpsBuilderList() {
        return getOpsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
          getOpsFieldBuilder() {
        if (opsBuilder_ == null) {
          opsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder>(
                  ops_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          ops_ = null;
        }
        return opsBuilder_;
      }

      private com.google.protobuf.ByteString toRevision_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes to_revision = 3;</code>
       * @return Whether the toRevision field is set.
       */
      public boolean hasToRevision() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>required bytes to_revision = 3;</code>
       * @return The toRevision.
       */
      public com.google.protobuf.ByteString getToRevision() {
        return toRevision_;
      }
      /**
       * <code>required bytes to_revision = 3;</code>
       * @param value The toRevision to set.
       * @return This builder for chaining.
       */
      public Builder setToRevision(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        toRevision_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes to_revision = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearToRevision() {
        bitField0_ = (bitField0_ & ~0x00000004);
        toRevision_ = getDefaultInstance().getToRevision();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.Diff)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.Diff)
    private static final com.spotify.playlist4.Playlist4ApiProto.Diff DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.Diff();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.Diff getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Diff>
        PARSER = new com.google.protobuf.AbstractParser<Diff>() {
      @java.lang.Override
      public Diff parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<Diff> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Diff> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.Diff getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ListChangesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.ListChanges)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes base_revision = 1;</code>
     * @return Whether the baseRevision field is set.
     */
    boolean hasBaseRevision();
    /**
     * <code>optional bytes base_revision = 1;</code>
     * @return The baseRevision.
     */
    com.google.protobuf.ByteString getBaseRevision();

    /**
     * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.Delta> 
        getDeltasList();
    /**
     * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.Delta getDeltas(int index);
    /**
     * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
     */
    int getDeltasCount();
    /**
     * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
     */
    java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.DeltaOrBuilder> 
        getDeltasOrBuilderList();
    /**
     * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.DeltaOrBuilder getDeltasOrBuilder(
        int index);

    /**
     * <code>optional bool want_resulting_revisions = 3;</code>
     * @return Whether the wantResultingRevisions field is set.
     */
    boolean hasWantResultingRevisions();
    /**
     * <code>optional bool want_resulting_revisions = 3;</code>
     * @return The wantResultingRevisions.
     */
    boolean getWantResultingRevisions();

    /**
     * <code>optional bool want_sync_result = 4;</code>
     * @return Whether the wantSyncResult field is set.
     */
    boolean hasWantSyncResult();
    /**
     * <code>optional bool want_sync_result = 4;</code>
     * @return The wantSyncResult.
     */
    boolean getWantSyncResult();

    /**
     * <code>repeated int64 nonces = 6;</code>
     * @return A list containing the nonces.
     */
    java.util.List<java.lang.Long> getNoncesList();
    /**
     * <code>repeated int64 nonces = 6;</code>
     * @return The count of nonces.
     */
    int getNoncesCount();
    /**
     * <code>repeated int64 nonces = 6;</code>
     * @param index The index of the element to return.
     * @return The nonces at the given index.
     */
    long getNonces(int index);
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.ListChanges}
   */
  public  static final class ListChanges extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.ListChanges)
      ListChangesOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ListChanges.newBuilder() to construct.
    private ListChanges(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ListChanges() {
      baseRevision_ = com.google.protobuf.ByteString.EMPTY;
      deltas_ = java.util.Collections.emptyList();
      nonces_ = emptyLongList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ListChanges();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListChanges_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListChanges_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.ListChanges.class, com.spotify.playlist4.Playlist4ApiProto.ListChanges.Builder.class);
    }

    private int bitField0_;
    public static final int BASE_REVISION_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString baseRevision_;
    /**
     * <code>optional bytes base_revision = 1;</code>
     * @return Whether the baseRevision field is set.
     */
    public boolean hasBaseRevision() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes base_revision = 1;</code>
     * @return The baseRevision.
     */
    public com.google.protobuf.ByteString getBaseRevision() {
      return baseRevision_;
    }

    public static final int DELTAS_FIELD_NUMBER = 2;
    private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Delta> deltas_;
    /**
     * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Delta> getDeltasList() {
      return deltas_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
     */
    public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.DeltaOrBuilder> 
        getDeltasOrBuilderList() {
      return deltas_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
     */
    public int getDeltasCount() {
      return deltas_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.Delta getDeltas(int index) {
      return deltas_.get(index);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.DeltaOrBuilder getDeltasOrBuilder(
        int index) {
      return deltas_.get(index);
    }

    public static final int WANT_RESULTING_REVISIONS_FIELD_NUMBER = 3;
    private boolean wantResultingRevisions_;
    /**
     * <code>optional bool want_resulting_revisions = 3;</code>
     * @return Whether the wantResultingRevisions field is set.
     */
    public boolean hasWantResultingRevisions() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional bool want_resulting_revisions = 3;</code>
     * @return The wantResultingRevisions.
     */
    public boolean getWantResultingRevisions() {
      return wantResultingRevisions_;
    }

    public static final int WANT_SYNC_RESULT_FIELD_NUMBER = 4;
    private boolean wantSyncResult_;
    /**
     * <code>optional bool want_sync_result = 4;</code>
     * @return Whether the wantSyncResult field is set.
     */
    public boolean hasWantSyncResult() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional bool want_sync_result = 4;</code>
     * @return The wantSyncResult.
     */
    public boolean getWantSyncResult() {
      return wantSyncResult_;
    }

    public static final int NONCES_FIELD_NUMBER = 6;
    private com.google.protobuf.Internal.LongList nonces_;
    /**
     * <code>repeated int64 nonces = 6;</code>
     * @return A list containing the nonces.
     */
    public java.util.List<java.lang.Long>
        getNoncesList() {
      return nonces_;
    }
    /**
     * <code>repeated int64 nonces = 6;</code>
     * @return The count of nonces.
     */
    public int getNoncesCount() {
      return nonces_.size();
    }
    /**
     * <code>repeated int64 nonces = 6;</code>
     * @param index The index of the element to return.
     * @return The nonces at the given index.
     */
    public long getNonces(int index) {
      return nonces_.getLong(index);
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.ListChanges prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.ListChanges}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.ListChanges)
        com.spotify.playlist4.Playlist4ApiProto.ListChangesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListChanges_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListChanges_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.ListChanges.class, com.spotify.playlist4.Playlist4ApiProto.ListChanges.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.ListChanges.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getDeltasFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        baseRevision_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (deltasBuilder_ == null) {
          deltas_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          deltasBuilder_.clear();
        }
        wantResultingRevisions_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        wantSyncResult_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        nonces_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ListChanges_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListChanges getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.ListChanges.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListChanges build() {
        com.spotify.playlist4.Playlist4ApiProto.ListChanges result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ListChanges buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.ListChanges result = new com.spotify.playlist4.Playlist4ApiProto.ListChanges(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.baseRevision_ = baseRevision_;
        if (deltasBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            deltas_ = java.util.Collections.unmodifiableList(deltas_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.deltas_ = deltas_;
        } else {
          result.deltas_ = deltasBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.wantResultingRevisions_ = wantResultingRevisions_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.wantSyncResult_ = wantSyncResult_;
          to_bitField0_ |= 0x00000004;
        }
        if (((bitField0_ & 0x00000010) != 0)) {
          nonces_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.nonces_ = nonces_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString baseRevision_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes base_revision = 1;</code>
       * @return Whether the baseRevision field is set.
       */
      public boolean hasBaseRevision() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes base_revision = 1;</code>
       * @return The baseRevision.
       */
      public com.google.protobuf.ByteString getBaseRevision() {
        return baseRevision_;
      }
      /**
       * <code>optional bytes base_revision = 1;</code>
       * @param value The baseRevision to set.
       * @return This builder for chaining.
       */
      public Builder setBaseRevision(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        baseRevision_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes base_revision = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearBaseRevision() {
        bitField0_ = (bitField0_ & ~0x00000001);
        baseRevision_ = getDefaultInstance().getBaseRevision();
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Delta> deltas_ =
        java.util.Collections.emptyList();
      private void ensureDeltasIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          deltas_ = new java.util.ArrayList<com.spotify.playlist4.Playlist4ApiProto.Delta>(deltas_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Delta, com.spotify.playlist4.Playlist4ApiProto.Delta.Builder, com.spotify.playlist4.Playlist4ApiProto.DeltaOrBuilder> deltasBuilder_;

      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Delta> getDeltasList() {
        if (deltasBuilder_ == null) {
          return java.util.Collections.unmodifiableList(deltas_);
        } else {
          return deltasBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public int getDeltasCount() {
        if (deltasBuilder_ == null) {
          return deltas_.size();
        } else {
          return deltasBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Delta getDeltas(int index) {
        if (deltasBuilder_ == null) {
          return deltas_.get(index);
        } else {
          return deltasBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public Builder setDeltas(
          int index, com.spotify.playlist4.Playlist4ApiProto.Delta value) {
        if (deltasBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDeltasIsMutable();
          deltas_.set(index, value);
          onChanged();
        } else {
          deltasBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public Builder setDeltas(
          int index, com.spotify.playlist4.Playlist4ApiProto.Delta.Builder builderForValue) {
        if (deltasBuilder_ == null) {
          ensureDeltasIsMutable();
          deltas_.set(index, builderForValue.build());
          onChanged();
        } else {
          deltasBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public Builder addDeltas(com.spotify.playlist4.Playlist4ApiProto.Delta value) {
        if (deltasBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDeltasIsMutable();
          deltas_.add(value);
          onChanged();
        } else {
          deltasBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public Builder addDeltas(
          int index, com.spotify.playlist4.Playlist4ApiProto.Delta value) {
        if (deltasBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDeltasIsMutable();
          deltas_.add(index, value);
          onChanged();
        } else {
          deltasBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public Builder addDeltas(
          com.spotify.playlist4.Playlist4ApiProto.Delta.Builder builderForValue) {
        if (deltasBuilder_ == null) {
          ensureDeltasIsMutable();
          deltas_.add(builderForValue.build());
          onChanged();
        } else {
          deltasBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public Builder addDeltas(
          int index, com.spotify.playlist4.Playlist4ApiProto.Delta.Builder builderForValue) {
        if (deltasBuilder_ == null) {
          ensureDeltasIsMutable();
          deltas_.add(index, builderForValue.build());
          onChanged();
        } else {
          deltasBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public Builder addAllDeltas(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.Delta> values) {
        if (deltasBuilder_ == null) {
          ensureDeltasIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, deltas_);
          onChanged();
        } else {
          deltasBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public Builder clearDeltas() {
        if (deltasBuilder_ == null) {
          deltas_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          deltasBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public Builder removeDeltas(int index) {
        if (deltasBuilder_ == null) {
          ensureDeltasIsMutable();
          deltas_.remove(index);
          onChanged();
        } else {
          deltasBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Delta.Builder getDeltasBuilder(
          int index) {
        return getDeltasFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.DeltaOrBuilder getDeltasOrBuilder(
          int index) {
        if (deltasBuilder_ == null) {
          return deltas_.get(index);  } else {
          return deltasBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.DeltaOrBuilder> 
           getDeltasOrBuilderList() {
        if (deltasBuilder_ != null) {
          return deltasBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(deltas_);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Delta.Builder addDeltasBuilder() {
        return getDeltasFieldBuilder().addBuilder(
            com.spotify.playlist4.Playlist4ApiProto.Delta.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Delta.Builder addDeltasBuilder(
          int index) {
        return getDeltasFieldBuilder().addBuilder(
            index, com.spotify.playlist4.Playlist4ApiProto.Delta.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Delta deltas = 2;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Delta.Builder> 
           getDeltasBuilderList() {
        return getDeltasFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Delta, com.spotify.playlist4.Playlist4ApiProto.Delta.Builder, com.spotify.playlist4.Playlist4ApiProto.DeltaOrBuilder> 
          getDeltasFieldBuilder() {
        if (deltasBuilder_ == null) {
          deltasBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Delta, com.spotify.playlist4.Playlist4ApiProto.Delta.Builder, com.spotify.playlist4.Playlist4ApiProto.DeltaOrBuilder>(
                  deltas_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          deltas_ = null;
        }
        return deltasBuilder_;
      }

      private boolean wantResultingRevisions_ ;
      /**
       * <code>optional bool want_resulting_revisions = 3;</code>
       * @return Whether the wantResultingRevisions field is set.
       */
      public boolean hasWantResultingRevisions() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional bool want_resulting_revisions = 3;</code>
       * @return The wantResultingRevisions.
       */
      public boolean getWantResultingRevisions() {
        return wantResultingRevisions_;
      }
      /**
       * <code>optional bool want_resulting_revisions = 3;</code>
       * @param value The wantResultingRevisions to set.
       * @return This builder for chaining.
       */
      public Builder setWantResultingRevisions(boolean value) {
        bitField0_ |= 0x00000004;
        wantResultingRevisions_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool want_resulting_revisions = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearWantResultingRevisions() {
        bitField0_ = (bitField0_ & ~0x00000004);
        wantResultingRevisions_ = false;
        onChanged();
        return this;
      }

      private boolean wantSyncResult_ ;
      /**
       * <code>optional bool want_sync_result = 4;</code>
       * @return Whether the wantSyncResult field is set.
       */
      public boolean hasWantSyncResult() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional bool want_sync_result = 4;</code>
       * @return The wantSyncResult.
       */
      public boolean getWantSyncResult() {
        return wantSyncResult_;
      }
      /**
       * <code>optional bool want_sync_result = 4;</code>
       * @param value The wantSyncResult to set.
       * @return This builder for chaining.
       */
      public Builder setWantSyncResult(boolean value) {
        bitField0_ |= 0x00000008;
        wantSyncResult_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool want_sync_result = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearWantSyncResult() {
        bitField0_ = (bitField0_ & ~0x00000008);
        wantSyncResult_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.LongList nonces_ = emptyLongList();
      private void ensureNoncesIsMutable() {
        if (!((bitField0_ & 0x00000010) != 0)) {
          nonces_ = mutableCopy(nonces_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <code>repeated int64 nonces = 6;</code>
       * @return A list containing the nonces.
       */
      public java.util.List<java.lang.Long>
          getNoncesList() {
        return ((bitField0_ & 0x00000010) != 0) ?
                 java.util.Collections.unmodifiableList(nonces_) : nonces_;
      }
      /**
       * <code>repeated int64 nonces = 6;</code>
       * @return The count of nonces.
       */
      public int getNoncesCount() {
        return nonces_.size();
      }
      /**
       * <code>repeated int64 nonces = 6;</code>
       * @param index The index of the element to return.
       * @return The nonces at the given index.
       */
      public long getNonces(int index) {
        return nonces_.getLong(index);
      }
      /**
       * <code>repeated int64 nonces = 6;</code>
       * @param index The index to set the value at.
       * @param value The nonces to set.
       * @return This builder for chaining.
       */
      public Builder setNonces(
          int index, long value) {
        ensureNoncesIsMutable();
        nonces_.setLong(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 nonces = 6;</code>
       * @param value The nonces to add.
       * @return This builder for chaining.
       */
      public Builder addNonces(long value) {
        ensureNoncesIsMutable();
        nonces_.addLong(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 nonces = 6;</code>
       * @param values The nonces to add.
       * @return This builder for chaining.
       */
      public Builder addAllNonces(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureNoncesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, nonces_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 nonces = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearNonces() {
        nonces_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.ListChanges)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.ListChanges)
    private static final com.spotify.playlist4.Playlist4ApiProto.ListChanges DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.ListChanges();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ListChanges getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ListChanges>
        PARSER = new com.google.protobuf.AbstractParser<ListChanges>() {
      @java.lang.Override
      public ListChanges parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<ListChanges> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ListChanges> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.ListChanges getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SelectedListContentOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.SelectedListContent)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes revision = 1;</code>
     * @return Whether the revision field is set.
     */
    boolean hasRevision();
    /**
     * <code>optional bytes revision = 1;</code>
     * @return The revision.
     */
    com.google.protobuf.ByteString getRevision();

    /**
     * <code>optional int32 length = 2;</code>
     * @return Whether the length field is set.
     */
    boolean hasLength();
    /**
     * <code>optional int32 length = 2;</code>
     * @return The length.
     */
    int getLength();

    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
     * @return Whether the attributes field is set.
     */
    boolean hasAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
     * @return The attributes.
     */
    com.spotify.playlist4.Playlist4ApiProto.ListAttributes getAttributes();
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder getAttributesOrBuilder();

    /**
     * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
     * @return Whether the contents field is set.
     */
    boolean hasContents();
    /**
     * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
     * @return The contents.
     */
    com.spotify.playlist4.Playlist4ApiProto.ListItems getContents();
    /**
     * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.ListItemsOrBuilder getContentsOrBuilder();

    /**
     * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
     * @return Whether the diff field is set.
     */
    boolean hasDiff();
    /**
     * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
     * @return The diff.
     */
    com.spotify.playlist4.Playlist4ApiProto.Diff getDiff();
    /**
     * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder getDiffOrBuilder();

    /**
     * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
     * @return Whether the syncResult field is set.
     */
    boolean hasSyncResult();
    /**
     * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
     * @return The syncResult.
     */
    com.spotify.playlist4.Playlist4ApiProto.Diff getSyncResult();
    /**
     * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder getSyncResultOrBuilder();

    /**
     * <code>repeated bytes resulting_revisions = 8;</code>
     * @return A list containing the resultingRevisions.
     */
    java.util.List<com.google.protobuf.ByteString> getResultingRevisionsList();
    /**
     * <code>repeated bytes resulting_revisions = 8;</code>
     * @return The count of resultingRevisions.
     */
    int getResultingRevisionsCount();
    /**
     * <code>repeated bytes resulting_revisions = 8;</code>
     * @param index The index of the element to return.
     * @return The resultingRevisions at the given index.
     */
    com.google.protobuf.ByteString getResultingRevisions(int index);

    /**
     * <code>optional bool multiple_heads = 9;</code>
     * @return Whether the multipleHeads field is set.
     */
    boolean hasMultipleHeads();
    /**
     * <code>optional bool multiple_heads = 9;</code>
     * @return The multipleHeads.
     */
    boolean getMultipleHeads();

    /**
     * <code>optional bool up_to_date = 10;</code>
     * @return Whether the upToDate field is set.
     */
    boolean hasUpToDate();
    /**
     * <code>optional bool up_to_date = 10;</code>
     * @return The upToDate.
     */
    boolean getUpToDate();

    /**
     * <code>repeated int64 nonces = 14;</code>
     * @return A list containing the nonces.
     */
    java.util.List<java.lang.Long> getNoncesList();
    /**
     * <code>repeated int64 nonces = 14;</code>
     * @return The count of nonces.
     */
    int getNoncesCount();
    /**
     * <code>repeated int64 nonces = 14;</code>
     * @param index The index of the element to return.
     * @return The nonces at the given index.
     */
    long getNonces(int index);

    /**
     * <code>optional int64 timestamp = 15;</code>
     * @return Whether the timestamp field is set.
     */
    boolean hasTimestamp();
    /**
     * <code>optional int64 timestamp = 15;</code>
     * @return The timestamp.
     */
    long getTimestamp();

    /**
     * <code>optional string owner_username = 16;</code>
     * @return Whether the ownerUsername field is set.
     */
    boolean hasOwnerUsername();
    /**
     * <code>optional string owner_username = 16;</code>
     * @return The ownerUsername.
     */
    java.lang.String getOwnerUsername();
    /**
     * <code>optional string owner_username = 16;</code>
     * @return The bytes for ownerUsername.
     */
    com.google.protobuf.ByteString
        getOwnerUsernameBytes();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.SelectedListContent}
   */
  public  static final class SelectedListContent extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.SelectedListContent)
      SelectedListContentOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SelectedListContent.newBuilder() to construct.
    private SelectedListContent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SelectedListContent() {
      revision_ = com.google.protobuf.ByteString.EMPTY;
      resultingRevisions_ = java.util.Collections.emptyList();
      nonces_ = emptyLongList();
      ownerUsername_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new SelectedListContent();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SelectedListContent_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SelectedListContent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.SelectedListContent.class, com.spotify.playlist4.Playlist4ApiProto.SelectedListContent.Builder.class);
    }

    private int bitField0_;
    public static final int REVISION_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString revision_;
    /**
     * <code>optional bytes revision = 1;</code>
     * @return Whether the revision field is set.
     */
    public boolean hasRevision() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes revision = 1;</code>
     * @return The revision.
     */
    public com.google.protobuf.ByteString getRevision() {
      return revision_;
    }

    public static final int LENGTH_FIELD_NUMBER = 2;
    private int length_;
    /**
     * <code>optional int32 length = 2;</code>
     * @return Whether the length field is set.
     */
    public boolean hasLength() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional int32 length = 2;</code>
     * @return The length.
     */
    public int getLength() {
      return length_;
    }

    public static final int ATTRIBUTES_FIELD_NUMBER = 3;
    private com.spotify.playlist4.Playlist4ApiProto.ListAttributes attributes_;
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
     * @return Whether the attributes field is set.
     */
    public boolean hasAttributes() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
     * @return The attributes.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributes getAttributes() {
      return attributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : attributes_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder getAttributesOrBuilder() {
      return attributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : attributes_;
    }

    public static final int CONTENTS_FIELD_NUMBER = 5;
    private com.spotify.playlist4.Playlist4ApiProto.ListItems contents_;
    /**
     * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
     * @return Whether the contents field is set.
     */
    public boolean hasContents() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
     * @return The contents.
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListItems getContents() {
      return contents_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListItems.getDefaultInstance() : contents_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.ListItemsOrBuilder getContentsOrBuilder() {
      return contents_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListItems.getDefaultInstance() : contents_;
    }

    public static final int DIFF_FIELD_NUMBER = 6;
    private com.spotify.playlist4.Playlist4ApiProto.Diff diff_;
    /**
     * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
     * @return Whether the diff field is set.
     */
    public boolean hasDiff() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
     * @return The diff.
     */
    public com.spotify.playlist4.Playlist4ApiProto.Diff getDiff() {
      return diff_ == null ? com.spotify.playlist4.Playlist4ApiProto.Diff.getDefaultInstance() : diff_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder getDiffOrBuilder() {
      return diff_ == null ? com.spotify.playlist4.Playlist4ApiProto.Diff.getDefaultInstance() : diff_;
    }

    public static final int SYNC_RESULT_FIELD_NUMBER = 7;
    private com.spotify.playlist4.Playlist4ApiProto.Diff syncResult_;
    /**
     * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
     * @return Whether the syncResult field is set.
     */
    public boolean hasSyncResult() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
     * @return The syncResult.
     */
    public com.spotify.playlist4.Playlist4ApiProto.Diff getSyncResult() {
      return syncResult_ == null ? com.spotify.playlist4.Playlist4ApiProto.Diff.getDefaultInstance() : syncResult_;
    }
    /**
     * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder getSyncResultOrBuilder() {
      return syncResult_ == null ? com.spotify.playlist4.Playlist4ApiProto.Diff.getDefaultInstance() : syncResult_;
    }

    public static final int RESULTING_REVISIONS_FIELD_NUMBER = 8;
    private java.util.List<com.google.protobuf.ByteString> resultingRevisions_;
    /**
     * <code>repeated bytes resulting_revisions = 8;</code>
     * @return A list containing the resultingRevisions.
     */
    public java.util.List<com.google.protobuf.ByteString>
        getResultingRevisionsList() {
      return resultingRevisions_;
    }
    /**
     * <code>repeated bytes resulting_revisions = 8;</code>
     * @return The count of resultingRevisions.
     */
    public int getResultingRevisionsCount() {
      return resultingRevisions_.size();
    }
    /**
     * <code>repeated bytes resulting_revisions = 8;</code>
     * @param index The index of the element to return.
     * @return The resultingRevisions at the given index.
     */
    public com.google.protobuf.ByteString getResultingRevisions(int index) {
      return resultingRevisions_.get(index);
    }

    public static final int MULTIPLE_HEADS_FIELD_NUMBER = 9;
    private boolean multipleHeads_;
    /**
     * <code>optional bool multiple_heads = 9;</code>
     * @return Whether the multipleHeads field is set.
     */
    public boolean hasMultipleHeads() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional bool multiple_heads = 9;</code>
     * @return The multipleHeads.
     */
    public boolean getMultipleHeads() {
      return multipleHeads_;
    }

    public static final int UP_TO_DATE_FIELD_NUMBER = 10;
    private boolean upToDate_;
    /**
     * <code>optional bool up_to_date = 10;</code>
     * @return Whether the upToDate field is set.
     */
    public boolean hasUpToDate() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional bool up_to_date = 10;</code>
     * @return The upToDate.
     */
    public boolean getUpToDate() {
      return upToDate_;
    }

    public static final int NONCES_FIELD_NUMBER = 14;
    private com.google.protobuf.Internal.LongList nonces_;
    /**
     * <code>repeated int64 nonces = 14;</code>
     * @return A list containing the nonces.
     */
    public java.util.List<java.lang.Long>
        getNoncesList() {
      return nonces_;
    }
    /**
     * <code>repeated int64 nonces = 14;</code>
     * @return The count of nonces.
     */
    public int getNoncesCount() {
      return nonces_.size();
    }
    /**
     * <code>repeated int64 nonces = 14;</code>
     * @param index The index of the element to return.
     * @return The nonces at the given index.
     */
    public long getNonces(int index) {
      return nonces_.getLong(index);
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 15;
    private long timestamp_;
    /**
     * <code>optional int64 timestamp = 15;</code>
     * @return Whether the timestamp field is set.
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>optional int64 timestamp = 15;</code>
     * @return The timestamp.
     */
    public long getTimestamp() {
      return timestamp_;
    }

    public static final int OWNER_USERNAME_FIELD_NUMBER = 16;
    private volatile java.lang.Object ownerUsername_;
    /**
     * <code>optional string owner_username = 16;</code>
     * @return Whether the ownerUsername field is set.
     */
    public boolean hasOwnerUsername() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>optional string owner_username = 16;</code>
     * @return The ownerUsername.
     */
    public java.lang.String getOwnerUsername() {
      java.lang.Object ref = ownerUsername_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          ownerUsername_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string owner_username = 16;</code>
     * @return The bytes for ownerUsername.
     */
    public com.google.protobuf.ByteString
        getOwnerUsernameBytes() {
      java.lang.Object ref = ownerUsername_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        ownerUsername_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.SelectedListContent prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.SelectedListContent}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.SelectedListContent)
        com.spotify.playlist4.Playlist4ApiProto.SelectedListContentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SelectedListContent_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SelectedListContent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.SelectedListContent.class, com.spotify.playlist4.Playlist4ApiProto.SelectedListContent.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.SelectedListContent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAttributesFieldBuilder();
          getContentsFieldBuilder();
          getDiffFieldBuilder();
          getSyncResultFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        revision_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        length_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (attributesBuilder_ == null) {
          attributes_ = null;
        } else {
          attributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (contentsBuilder_ == null) {
          contents_ = null;
        } else {
          contentsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (diffBuilder_ == null) {
          diff_ = null;
        } else {
          diffBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (syncResultBuilder_ == null) {
          syncResult_ = null;
        } else {
          syncResultBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        resultingRevisions_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000040);
        multipleHeads_ = false;
        bitField0_ = (bitField0_ & ~0x00000080);
        upToDate_ = false;
        bitField0_ = (bitField0_ & ~0x00000100);
        nonces_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000200);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000400);
        ownerUsername_ = "";
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SelectedListContent_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.SelectedListContent getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.SelectedListContent.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.SelectedListContent build() {
        com.spotify.playlist4.Playlist4ApiProto.SelectedListContent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.SelectedListContent buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.SelectedListContent result = new com.spotify.playlist4.Playlist4ApiProto.SelectedListContent(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.revision_ = revision_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.length_ = length_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          if (attributesBuilder_ == null) {
            result.attributes_ = attributes_;
          } else {
            result.attributes_ = attributesBuilder_.build();
          }
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          if (contentsBuilder_ == null) {
            result.contents_ = contents_;
          } else {
            result.contents_ = contentsBuilder_.build();
          }
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          if (diffBuilder_ == null) {
            result.diff_ = diff_;
          } else {
            result.diff_ = diffBuilder_.build();
          }
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          if (syncResultBuilder_ == null) {
            result.syncResult_ = syncResult_;
          } else {
            result.syncResult_ = syncResultBuilder_.build();
          }
          to_bitField0_ |= 0x00000020;
        }
        if (((bitField0_ & 0x00000040) != 0)) {
          resultingRevisions_ = java.util.Collections.unmodifiableList(resultingRevisions_);
          bitField0_ = (bitField0_ & ~0x00000040);
        }
        result.resultingRevisions_ = resultingRevisions_;
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.multipleHeads_ = multipleHeads_;
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.upToDate_ = upToDate_;
          to_bitField0_ |= 0x00000080;
        }
        if (((bitField0_ & 0x00000200) != 0)) {
          nonces_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000200);
        }
        result.nonces_ = nonces_;
        if (((from_bitField0_ & 0x00000400) != 0)) {
          result.timestamp_ = timestamp_;
          to_bitField0_ |= 0x00000100;
        }
        if (((from_bitField0_ & 0x00000800) != 0)) {
          to_bitField0_ |= 0x00000200;
        }
        result.ownerUsername_ = ownerUsername_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString revision_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes revision = 1;</code>
       * @return Whether the revision field is set.
       */
      public boolean hasRevision() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes revision = 1;</code>
       * @return The revision.
       */
      public com.google.protobuf.ByteString getRevision() {
        return revision_;
      }
      /**
       * <code>optional bytes revision = 1;</code>
       * @param value The revision to set.
       * @return This builder for chaining.
       */
      public Builder setRevision(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        revision_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes revision = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearRevision() {
        bitField0_ = (bitField0_ & ~0x00000001);
        revision_ = getDefaultInstance().getRevision();
        onChanged();
        return this;
      }

      private int length_ ;
      /**
       * <code>optional int32 length = 2;</code>
       * @return Whether the length field is set.
       */
      public boolean hasLength() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional int32 length = 2;</code>
       * @return The length.
       */
      public int getLength() {
        return length_;
      }
      /**
       * <code>optional int32 length = 2;</code>
       * @param value The length to set.
       * @return This builder for chaining.
       */
      public Builder setLength(int value) {
        bitField0_ |= 0x00000002;
        length_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 length = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearLength() {
        bitField0_ = (bitField0_ & ~0x00000002);
        length_ = 0;
        onChanged();
        return this;
      }

      private com.spotify.playlist4.Playlist4ApiProto.ListAttributes attributes_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListAttributes, com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder> attributesBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
       * @return Whether the attributes field is set.
       */
      public boolean hasAttributes() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
       * @return The attributes.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributes getAttributes() {
        if (attributesBuilder_ == null) {
          return attributes_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : attributes_;
        } else {
          return attributesBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
       */
      public Builder setAttributes(com.spotify.playlist4.Playlist4ApiProto.ListAttributes value) {
        if (attributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          attributes_ = value;
          onChanged();
        } else {
          attributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
       */
      public Builder setAttributes(
          com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder builderForValue) {
        if (attributesBuilder_ == null) {
          attributes_ = builderForValue.build();
          onChanged();
        } else {
          attributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
       */
      public Builder mergeAttributes(com.spotify.playlist4.Playlist4ApiProto.ListAttributes value) {
        if (attributesBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0) &&
              attributes_ != null &&
              attributes_ != com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance()) {
            attributes_ =
              com.spotify.playlist4.Playlist4ApiProto.ListAttributes.newBuilder(attributes_).mergeFrom(value).buildPartial();
          } else {
            attributes_ = value;
          }
          onChanged();
        } else {
          attributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
       */
      public Builder clearAttributes() {
        if (attributesBuilder_ == null) {
          attributes_ = null;
          onChanged();
        } else {
          attributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder getAttributesBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getAttributesFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder getAttributesOrBuilder() {
        if (attributesBuilder_ != null) {
          return attributesBuilder_.getMessageOrBuilder();
        } else {
          return attributes_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.ListAttributes.getDefaultInstance() : attributes_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListAttributes attributes = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListAttributes, com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder> 
          getAttributesFieldBuilder() {
        if (attributesBuilder_ == null) {
          attributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.ListAttributes, com.spotify.playlist4.Playlist4ApiProto.ListAttributes.Builder, com.spotify.playlist4.Playlist4ApiProto.ListAttributesOrBuilder>(
                  getAttributes(),
                  getParentForChildren(),
                  isClean());
          attributes_ = null;
        }
        return attributesBuilder_;
      }

      private com.spotify.playlist4.Playlist4ApiProto.ListItems contents_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListItems, com.spotify.playlist4.Playlist4ApiProto.ListItems.Builder, com.spotify.playlist4.Playlist4ApiProto.ListItemsOrBuilder> contentsBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
       * @return Whether the contents field is set.
       */
      public boolean hasContents() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
       * @return The contents.
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListItems getContents() {
        if (contentsBuilder_ == null) {
          return contents_ == null ? com.spotify.playlist4.Playlist4ApiProto.ListItems.getDefaultInstance() : contents_;
        } else {
          return contentsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
       */
      public Builder setContents(com.spotify.playlist4.Playlist4ApiProto.ListItems value) {
        if (contentsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          contents_ = value;
          onChanged();
        } else {
          contentsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
       */
      public Builder setContents(
          com.spotify.playlist4.Playlist4ApiProto.ListItems.Builder builderForValue) {
        if (contentsBuilder_ == null) {
          contents_ = builderForValue.build();
          onChanged();
        } else {
          contentsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
       */
      public Builder mergeContents(com.spotify.playlist4.Playlist4ApiProto.ListItems value) {
        if (contentsBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0) &&
              contents_ != null &&
              contents_ != com.spotify.playlist4.Playlist4ApiProto.ListItems.getDefaultInstance()) {
            contents_ =
              com.spotify.playlist4.Playlist4ApiProto.ListItems.newBuilder(contents_).mergeFrom(value).buildPartial();
          } else {
            contents_ = value;
          }
          onChanged();
        } else {
          contentsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
       */
      public Builder clearContents() {
        if (contentsBuilder_ == null) {
          contents_ = null;
          onChanged();
        } else {
          contentsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListItems.Builder getContentsBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getContentsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.ListItemsOrBuilder getContentsOrBuilder() {
        if (contentsBuilder_ != null) {
          return contentsBuilder_.getMessageOrBuilder();
        } else {
          return contents_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.ListItems.getDefaultInstance() : contents_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.ListItems contents = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.ListItems, com.spotify.playlist4.Playlist4ApiProto.ListItems.Builder, com.spotify.playlist4.Playlist4ApiProto.ListItemsOrBuilder> 
          getContentsFieldBuilder() {
        if (contentsBuilder_ == null) {
          contentsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.ListItems, com.spotify.playlist4.Playlist4ApiProto.ListItems.Builder, com.spotify.playlist4.Playlist4ApiProto.ListItemsOrBuilder>(
                  getContents(),
                  getParentForChildren(),
                  isClean());
          contents_ = null;
        }
        return contentsBuilder_;
      }

      private com.spotify.playlist4.Playlist4ApiProto.Diff diff_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Diff, com.spotify.playlist4.Playlist4ApiProto.Diff.Builder, com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder> diffBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
       * @return Whether the diff field is set.
       */
      public boolean hasDiff() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
       * @return The diff.
       */
      public com.spotify.playlist4.Playlist4ApiProto.Diff getDiff() {
        if (diffBuilder_ == null) {
          return diff_ == null ? com.spotify.playlist4.Playlist4ApiProto.Diff.getDefaultInstance() : diff_;
        } else {
          return diffBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
       */
      public Builder setDiff(com.spotify.playlist4.Playlist4ApiProto.Diff value) {
        if (diffBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          diff_ = value;
          onChanged();
        } else {
          diffBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
       */
      public Builder setDiff(
          com.spotify.playlist4.Playlist4ApiProto.Diff.Builder builderForValue) {
        if (diffBuilder_ == null) {
          diff_ = builderForValue.build();
          onChanged();
        } else {
          diffBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
       */
      public Builder mergeDiff(com.spotify.playlist4.Playlist4ApiProto.Diff value) {
        if (diffBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0) &&
              diff_ != null &&
              diff_ != com.spotify.playlist4.Playlist4ApiProto.Diff.getDefaultInstance()) {
            diff_ =
              com.spotify.playlist4.Playlist4ApiProto.Diff.newBuilder(diff_).mergeFrom(value).buildPartial();
          } else {
            diff_ = value;
          }
          onChanged();
        } else {
          diffBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
       */
      public Builder clearDiff() {
        if (diffBuilder_ == null) {
          diff_ = null;
          onChanged();
        } else {
          diffBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Diff.Builder getDiffBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getDiffFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder getDiffOrBuilder() {
        if (diffBuilder_ != null) {
          return diffBuilder_.getMessageOrBuilder();
        } else {
          return diff_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.Diff.getDefaultInstance() : diff_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff diff = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Diff, com.spotify.playlist4.Playlist4ApiProto.Diff.Builder, com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder> 
          getDiffFieldBuilder() {
        if (diffBuilder_ == null) {
          diffBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Diff, com.spotify.playlist4.Playlist4ApiProto.Diff.Builder, com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder>(
                  getDiff(),
                  getParentForChildren(),
                  isClean());
          diff_ = null;
        }
        return diffBuilder_;
      }

      private com.spotify.playlist4.Playlist4ApiProto.Diff syncResult_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Diff, com.spotify.playlist4.Playlist4ApiProto.Diff.Builder, com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder> syncResultBuilder_;
      /**
       * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
       * @return Whether the syncResult field is set.
       */
      public boolean hasSyncResult() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
       * @return The syncResult.
       */
      public com.spotify.playlist4.Playlist4ApiProto.Diff getSyncResult() {
        if (syncResultBuilder_ == null) {
          return syncResult_ == null ? com.spotify.playlist4.Playlist4ApiProto.Diff.getDefaultInstance() : syncResult_;
        } else {
          return syncResultBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
       */
      public Builder setSyncResult(com.spotify.playlist4.Playlist4ApiProto.Diff value) {
        if (syncResultBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          syncResult_ = value;
          onChanged();
        } else {
          syncResultBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
       */
      public Builder setSyncResult(
          com.spotify.playlist4.Playlist4ApiProto.Diff.Builder builderForValue) {
        if (syncResultBuilder_ == null) {
          syncResult_ = builderForValue.build();
          onChanged();
        } else {
          syncResultBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
       */
      public Builder mergeSyncResult(com.spotify.playlist4.Playlist4ApiProto.Diff value) {
        if (syncResultBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0) &&
              syncResult_ != null &&
              syncResult_ != com.spotify.playlist4.Playlist4ApiProto.Diff.getDefaultInstance()) {
            syncResult_ =
              com.spotify.playlist4.Playlist4ApiProto.Diff.newBuilder(syncResult_).mergeFrom(value).buildPartial();
          } else {
            syncResult_ = value;
          }
          onChanged();
        } else {
          syncResultBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
       */
      public Builder clearSyncResult() {
        if (syncResultBuilder_ == null) {
          syncResult_ = null;
          onChanged();
        } else {
          syncResultBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Diff.Builder getSyncResultBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getSyncResultFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder getSyncResultOrBuilder() {
        if (syncResultBuilder_ != null) {
          return syncResultBuilder_.getMessageOrBuilder();
        } else {
          return syncResult_ == null ?
              com.spotify.playlist4.Playlist4ApiProto.Diff.getDefaultInstance() : syncResult_;
        }
      }
      /**
       * <code>optional .spotify.playlist4.proto.Diff sync_result = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Diff, com.spotify.playlist4.Playlist4ApiProto.Diff.Builder, com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder> 
          getSyncResultFieldBuilder() {
        if (syncResultBuilder_ == null) {
          syncResultBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Diff, com.spotify.playlist4.Playlist4ApiProto.Diff.Builder, com.spotify.playlist4.Playlist4ApiProto.DiffOrBuilder>(
                  getSyncResult(),
                  getParentForChildren(),
                  isClean());
          syncResult_ = null;
        }
        return syncResultBuilder_;
      }

      private java.util.List<com.google.protobuf.ByteString> resultingRevisions_ = java.util.Collections.emptyList();
      private void ensureResultingRevisionsIsMutable() {
        if (!((bitField0_ & 0x00000040) != 0)) {
          resultingRevisions_ = new java.util.ArrayList<com.google.protobuf.ByteString>(resultingRevisions_);
          bitField0_ |= 0x00000040;
         }
      }
      /**
       * <code>repeated bytes resulting_revisions = 8;</code>
       * @return A list containing the resultingRevisions.
       */
      public java.util.List<com.google.protobuf.ByteString>
          getResultingRevisionsList() {
        return ((bitField0_ & 0x00000040) != 0) ?
                 java.util.Collections.unmodifiableList(resultingRevisions_) : resultingRevisions_;
      }
      /**
       * <code>repeated bytes resulting_revisions = 8;</code>
       * @return The count of resultingRevisions.
       */
      public int getResultingRevisionsCount() {
        return resultingRevisions_.size();
      }
      /**
       * <code>repeated bytes resulting_revisions = 8;</code>
       * @param index The index of the element to return.
       * @return The resultingRevisions at the given index.
       */
      public com.google.protobuf.ByteString getResultingRevisions(int index) {
        return resultingRevisions_.get(index);
      }
      /**
       * <code>repeated bytes resulting_revisions = 8;</code>
       * @param index The index to set the value at.
       * @param value The resultingRevisions to set.
       * @return This builder for chaining.
       */
      public Builder setResultingRevisions(
          int index, com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureResultingRevisionsIsMutable();
        resultingRevisions_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes resulting_revisions = 8;</code>
       * @param value The resultingRevisions to add.
       * @return This builder for chaining.
       */
      public Builder addResultingRevisions(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureResultingRevisionsIsMutable();
        resultingRevisions_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes resulting_revisions = 8;</code>
       * @param values The resultingRevisions to add.
       * @return This builder for chaining.
       */
      public Builder addAllResultingRevisions(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        ensureResultingRevisionsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, resultingRevisions_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes resulting_revisions = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearResultingRevisions() {
        resultingRevisions_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000040);
        onChanged();
        return this;
      }

      private boolean multipleHeads_ ;
      /**
       * <code>optional bool multiple_heads = 9;</code>
       * @return Whether the multipleHeads field is set.
       */
      public boolean hasMultipleHeads() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional bool multiple_heads = 9;</code>
       * @return The multipleHeads.
       */
      public boolean getMultipleHeads() {
        return multipleHeads_;
      }
      /**
       * <code>optional bool multiple_heads = 9;</code>
       * @param value The multipleHeads to set.
       * @return This builder for chaining.
       */
      public Builder setMultipleHeads(boolean value) {
        bitField0_ |= 0x00000080;
        multipleHeads_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool multiple_heads = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearMultipleHeads() {
        bitField0_ = (bitField0_ & ~0x00000080);
        multipleHeads_ = false;
        onChanged();
        return this;
      }

      private boolean upToDate_ ;
      /**
       * <code>optional bool up_to_date = 10;</code>
       * @return Whether the upToDate field is set.
       */
      public boolean hasUpToDate() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <code>optional bool up_to_date = 10;</code>
       * @return The upToDate.
       */
      public boolean getUpToDate() {
        return upToDate_;
      }
      /**
       * <code>optional bool up_to_date = 10;</code>
       * @param value The upToDate to set.
       * @return This builder for chaining.
       */
      public Builder setUpToDate(boolean value) {
        bitField0_ |= 0x00000100;
        upToDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool up_to_date = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearUpToDate() {
        bitField0_ = (bitField0_ & ~0x00000100);
        upToDate_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.LongList nonces_ = emptyLongList();
      private void ensureNoncesIsMutable() {
        if (!((bitField0_ & 0x00000200) != 0)) {
          nonces_ = mutableCopy(nonces_);
          bitField0_ |= 0x00000200;
         }
      }
      /**
       * <code>repeated int64 nonces = 14;</code>
       * @return A list containing the nonces.
       */
      public java.util.List<java.lang.Long>
          getNoncesList() {
        return ((bitField0_ & 0x00000200) != 0) ?
                 java.util.Collections.unmodifiableList(nonces_) : nonces_;
      }
      /**
       * <code>repeated int64 nonces = 14;</code>
       * @return The count of nonces.
       */
      public int getNoncesCount() {
        return nonces_.size();
      }
      /**
       * <code>repeated int64 nonces = 14;</code>
       * @param index The index of the element to return.
       * @return The nonces at the given index.
       */
      public long getNonces(int index) {
        return nonces_.getLong(index);
      }
      /**
       * <code>repeated int64 nonces = 14;</code>
       * @param index The index to set the value at.
       * @param value The nonces to set.
       * @return This builder for chaining.
       */
      public Builder setNonces(
          int index, long value) {
        ensureNoncesIsMutable();
        nonces_.setLong(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 nonces = 14;</code>
       * @param value The nonces to add.
       * @return This builder for chaining.
       */
      public Builder addNonces(long value) {
        ensureNoncesIsMutable();
        nonces_.addLong(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 nonces = 14;</code>
       * @param values The nonces to add.
       * @return This builder for chaining.
       */
      public Builder addAllNonces(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureNoncesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, nonces_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 nonces = 14;</code>
       * @return This builder for chaining.
       */
      public Builder clearNonces() {
        nonces_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000200);
        onChanged();
        return this;
      }

      private long timestamp_ ;
      /**
       * <code>optional int64 timestamp = 15;</code>
       * @return Whether the timestamp field is set.
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000400) != 0);
      }
      /**
       * <code>optional int64 timestamp = 15;</code>
       * @return The timestamp.
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>optional int64 timestamp = 15;</code>
       * @param value The timestamp to set.
       * @return This builder for chaining.
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000400;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 timestamp = 15;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000400);
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object ownerUsername_ = "";
      /**
       * <code>optional string owner_username = 16;</code>
       * @return Whether the ownerUsername field is set.
       */
      public boolean hasOwnerUsername() {
        return ((bitField0_ & 0x00000800) != 0);
      }
      /**
       * <code>optional string owner_username = 16;</code>
       * @return The ownerUsername.
       */
      public java.lang.String getOwnerUsername() {
        java.lang.Object ref = ownerUsername_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            ownerUsername_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string owner_username = 16;</code>
       * @return The bytes for ownerUsername.
       */
      public com.google.protobuf.ByteString
          getOwnerUsernameBytes() {
        java.lang.Object ref = ownerUsername_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          ownerUsername_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string owner_username = 16;</code>
       * @param value The ownerUsername to set.
       * @return This builder for chaining.
       */
      public Builder setOwnerUsername(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        ownerUsername_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string owner_username = 16;</code>
       * @return This builder for chaining.
       */
      public Builder clearOwnerUsername() {
        bitField0_ = (bitField0_ & ~0x00000800);
        ownerUsername_ = getDefaultInstance().getOwnerUsername();
        onChanged();
        return this;
      }
      /**
       * <code>optional string owner_username = 16;</code>
       * @param value The bytes for ownerUsername to set.
       * @return This builder for chaining.
       */
      public Builder setOwnerUsernameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        ownerUsername_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.SelectedListContent)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.SelectedListContent)
    private static final com.spotify.playlist4.Playlist4ApiProto.SelectedListContent DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.SelectedListContent();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.SelectedListContent getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SelectedListContent>
        PARSER = new com.google.protobuf.AbstractParser<SelectedListContent>() {
      @java.lang.Override
      public SelectedListContent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<SelectedListContent> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SelectedListContent> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.SelectedListContent getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CreateListReplyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.CreateListReply)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required bytes uri = 1;</code>
     * @return Whether the uri field is set.
     */
    boolean hasUri();
    /**
     * <code>required bytes uri = 1;</code>
     * @return The uri.
     */
    com.google.protobuf.ByteString getUri();

    /**
     * <code>optional bytes revision = 2;</code>
     * @return Whether the revision field is set.
     */
    boolean hasRevision();
    /**
     * <code>optional bytes revision = 2;</code>
     * @return The revision.
     */
    com.google.protobuf.ByteString getRevision();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.CreateListReply}
   */
  public  static final class CreateListReply extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.CreateListReply)
      CreateListReplyOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CreateListReply.newBuilder() to construct.
    private CreateListReply(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CreateListReply() {
      uri_ = com.google.protobuf.ByteString.EMPTY;
      revision_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new CreateListReply();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_CreateListReply_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_CreateListReply_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.CreateListReply.class, com.spotify.playlist4.Playlist4ApiProto.CreateListReply.Builder.class);
    }

    private int bitField0_;
    public static final int URI_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString uri_;
    /**
     * <code>required bytes uri = 1;</code>
     * @return Whether the uri field is set.
     */
    public boolean hasUri() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required bytes uri = 1;</code>
     * @return The uri.
     */
    public com.google.protobuf.ByteString getUri() {
      return uri_;
    }

    public static final int REVISION_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString revision_;
    /**
     * <code>optional bytes revision = 2;</code>
     * @return Whether the revision field is set.
     */
    public boolean hasRevision() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional bytes revision = 2;</code>
     * @return The revision.
     */
    public com.google.protobuf.ByteString getRevision() {
      return revision_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.CreateListReply prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.CreateListReply}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.CreateListReply)
        com.spotify.playlist4.Playlist4ApiProto.CreateListReplyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_CreateListReply_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_CreateListReply_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.CreateListReply.class, com.spotify.playlist4.Playlist4ApiProto.CreateListReply.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.CreateListReply.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        uri_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        revision_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_CreateListReply_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.CreateListReply getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.CreateListReply.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.CreateListReply build() {
        com.spotify.playlist4.Playlist4ApiProto.CreateListReply result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.CreateListReply buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.CreateListReply result = new com.spotify.playlist4.Playlist4ApiProto.CreateListReply(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.uri_ = uri_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.revision_ = revision_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString uri_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes uri = 1;</code>
       * @return Whether the uri field is set.
       */
      public boolean hasUri() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required bytes uri = 1;</code>
       * @return The uri.
       */
      public com.google.protobuf.ByteString getUri() {
        return uri_;
      }
      /**
       * <code>required bytes uri = 1;</code>
       * @param value The uri to set.
       * @return This builder for chaining.
       */
      public Builder setUri(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        uri_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes uri = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearUri() {
        bitField0_ = (bitField0_ & ~0x00000001);
        uri_ = getDefaultInstance().getUri();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString revision_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes revision = 2;</code>
       * @return Whether the revision field is set.
       */
      public boolean hasRevision() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional bytes revision = 2;</code>
       * @return The revision.
       */
      public com.google.protobuf.ByteString getRevision() {
        return revision_;
      }
      /**
       * <code>optional bytes revision = 2;</code>
       * @param value The revision to set.
       * @return This builder for chaining.
       */
      public Builder setRevision(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        revision_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes revision = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearRevision() {
        bitField0_ = (bitField0_ & ~0x00000002);
        revision_ = getDefaultInstance().getRevision();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.CreateListReply)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.CreateListReply)
    private static final com.spotify.playlist4.Playlist4ApiProto.CreateListReply DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.CreateListReply();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.CreateListReply getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<CreateListReply>
        PARSER = new com.google.protobuf.AbstractParser<CreateListReply>() {
      @java.lang.Override
      public CreateListReply parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<CreateListReply> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<CreateListReply> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.CreateListReply getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ModifyReplyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.ModifyReply)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required bytes uri = 1;</code>
     * @return Whether the uri field is set.
     */
    boolean hasUri();
    /**
     * <code>required bytes uri = 1;</code>
     * @return The uri.
     */
    com.google.protobuf.ByteString getUri();

    /**
     * <code>optional bytes revision = 2;</code>
     * @return Whether the revision field is set.
     */
    boolean hasRevision();
    /**
     * <code>optional bytes revision = 2;</code>
     * @return The revision.
     */
    com.google.protobuf.ByteString getRevision();
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.ModifyReply}
   */
  public  static final class ModifyReply extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.ModifyReply)
      ModifyReplyOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ModifyReply.newBuilder() to construct.
    private ModifyReply(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ModifyReply() {
      uri_ = com.google.protobuf.ByteString.EMPTY;
      revision_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ModifyReply();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ModifyReply_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ModifyReply_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.ModifyReply.class, com.spotify.playlist4.Playlist4ApiProto.ModifyReply.Builder.class);
    }

    private int bitField0_;
    public static final int URI_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString uri_;
    /**
     * <code>required bytes uri = 1;</code>
     * @return Whether the uri field is set.
     */
    public boolean hasUri() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required bytes uri = 1;</code>
     * @return The uri.
     */
    public com.google.protobuf.ByteString getUri() {
      return uri_;
    }

    public static final int REVISION_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString revision_;
    /**
     * <code>optional bytes revision = 2;</code>
     * @return Whether the revision field is set.
     */
    public boolean hasRevision() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional bytes revision = 2;</code>
     * @return The revision.
     */
    public com.google.protobuf.ByteString getRevision() {
      return revision_;
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.ModifyReply prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.ModifyReply}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.ModifyReply)
        com.spotify.playlist4.Playlist4ApiProto.ModifyReplyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ModifyReply_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ModifyReply_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.ModifyReply.class, com.spotify.playlist4.Playlist4ApiProto.ModifyReply.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.ModifyReply.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        uri_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        revision_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_ModifyReply_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ModifyReply getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.ModifyReply.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ModifyReply build() {
        com.spotify.playlist4.Playlist4ApiProto.ModifyReply result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.ModifyReply buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.ModifyReply result = new com.spotify.playlist4.Playlist4ApiProto.ModifyReply(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.uri_ = uri_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.revision_ = revision_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString uri_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes uri = 1;</code>
       * @return Whether the uri field is set.
       */
      public boolean hasUri() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required bytes uri = 1;</code>
       * @return The uri.
       */
      public com.google.protobuf.ByteString getUri() {
        return uri_;
      }
      /**
       * <code>required bytes uri = 1;</code>
       * @param value The uri to set.
       * @return This builder for chaining.
       */
      public Builder setUri(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        uri_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes uri = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearUri() {
        bitField0_ = (bitField0_ & ~0x00000001);
        uri_ = getDefaultInstance().getUri();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString revision_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes revision = 2;</code>
       * @return Whether the revision field is set.
       */
      public boolean hasRevision() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional bytes revision = 2;</code>
       * @return The revision.
       */
      public com.google.protobuf.ByteString getRevision() {
        return revision_;
      }
      /**
       * <code>optional bytes revision = 2;</code>
       * @param value The revision to set.
       * @return This builder for chaining.
       */
      public Builder setRevision(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        revision_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes revision = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearRevision() {
        bitField0_ = (bitField0_ & ~0x00000002);
        revision_ = getDefaultInstance().getRevision();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.ModifyReply)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.ModifyReply)
    private static final com.spotify.playlist4.Playlist4ApiProto.ModifyReply DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.ModifyReply();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.ModifyReply getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ModifyReply>
        PARSER = new com.google.protobuf.AbstractParser<ModifyReply>() {
      @java.lang.Override
      public ModifyReply parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<ModifyReply> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ModifyReply> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.ModifyReply getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SubscribeRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.SubscribeRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated bytes uris = 1;</code>
     * @return A list containing the uris.
     */
    java.util.List<com.google.protobuf.ByteString> getUrisList();
    /**
     * <code>repeated bytes uris = 1;</code>
     * @return The count of uris.
     */
    int getUrisCount();
    /**
     * <code>repeated bytes uris = 1;</code>
     * @param index The index of the element to return.
     * @return The uris at the given index.
     */
    com.google.protobuf.ByteString getUris(int index);
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.SubscribeRequest}
   */
  public  static final class SubscribeRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.SubscribeRequest)
      SubscribeRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SubscribeRequest.newBuilder() to construct.
    private SubscribeRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SubscribeRequest() {
      uris_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new SubscribeRequest();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SubscribeRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SubscribeRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest.class, com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest.Builder.class);
    }

    public static final int URIS_FIELD_NUMBER = 1;
    private java.util.List<com.google.protobuf.ByteString> uris_;
    /**
     * <code>repeated bytes uris = 1;</code>
     * @return A list containing the uris.
     */
    public java.util.List<com.google.protobuf.ByteString>
        getUrisList() {
      return uris_;
    }
    /**
     * <code>repeated bytes uris = 1;</code>
     * @return The count of uris.
     */
    public int getUrisCount() {
      return uris_.size();
    }
    /**
     * <code>repeated bytes uris = 1;</code>
     * @param index The index of the element to return.
     * @return The uris at the given index.
     */
    public com.google.protobuf.ByteString getUris(int index) {
      return uris_.get(index);
    }

    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.SubscribeRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.SubscribeRequest)
        com.spotify.playlist4.Playlist4ApiProto.SubscribeRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SubscribeRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SubscribeRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest.class, com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        uris_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_SubscribeRequest_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest build() {
        com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest result = new com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) != 0)) {
          uris_ = java.util.Collections.unmodifiableList(uris_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.uris_ = uris_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private java.util.List<com.google.protobuf.ByteString> uris_ = java.util.Collections.emptyList();
      private void ensureUrisIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          uris_ = new java.util.ArrayList<com.google.protobuf.ByteString>(uris_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @return A list containing the uris.
       */
      public java.util.List<com.google.protobuf.ByteString>
          getUrisList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(uris_) : uris_;
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @return The count of uris.
       */
      public int getUrisCount() {
        return uris_.size();
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @param index The index of the element to return.
       * @return The uris at the given index.
       */
      public com.google.protobuf.ByteString getUris(int index) {
        return uris_.get(index);
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @param index The index to set the value at.
       * @param value The uris to set.
       * @return This builder for chaining.
       */
      public Builder setUris(
          int index, com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureUrisIsMutable();
        uris_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @param value The uris to add.
       * @return This builder for chaining.
       */
      public Builder addUris(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureUrisIsMutable();
        uris_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @param values The uris to add.
       * @return This builder for chaining.
       */
      public Builder addAllUris(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        ensureUrisIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, uris_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearUris() {
        uris_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.SubscribeRequest)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.SubscribeRequest)
    private static final com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SubscribeRequest>
        PARSER = new com.google.protobuf.AbstractParser<SubscribeRequest>() {
      @java.lang.Override
      public SubscribeRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<SubscribeRequest> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SubscribeRequest> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.SubscribeRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface UnsubscribeRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.UnsubscribeRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated bytes uris = 1;</code>
     * @return A list containing the uris.
     */
    java.util.List<com.google.protobuf.ByteString> getUrisList();
    /**
     * <code>repeated bytes uris = 1;</code>
     * @return The count of uris.
     */
    int getUrisCount();
    /**
     * <code>repeated bytes uris = 1;</code>
     * @param index The index of the element to return.
     * @return The uris at the given index.
     */
    com.google.protobuf.ByteString getUris(int index);
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.UnsubscribeRequest}
   */
  public  static final class UnsubscribeRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.UnsubscribeRequest)
      UnsubscribeRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use UnsubscribeRequest.newBuilder() to construct.
    private UnsubscribeRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private UnsubscribeRequest() {
      uris_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new UnsubscribeRequest();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UnsubscribeRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UnsubscribeRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest.class, com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest.Builder.class);
    }

    public static final int URIS_FIELD_NUMBER = 1;
    private java.util.List<com.google.protobuf.ByteString> uris_;
    /**
     * <code>repeated bytes uris = 1;</code>
     * @return A list containing the uris.
     */
    public java.util.List<com.google.protobuf.ByteString>
        getUrisList() {
      return uris_;
    }
    /**
     * <code>repeated bytes uris = 1;</code>
     * @return The count of uris.
     */
    public int getUrisCount() {
      return uris_.size();
    }
    /**
     * <code>repeated bytes uris = 1;</code>
     * @param index The index of the element to return.
     * @return The uris at the given index.
     */
    public com.google.protobuf.ByteString getUris(int index) {
      return uris_.get(index);
    }

    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.UnsubscribeRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.UnsubscribeRequest)
        com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UnsubscribeRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UnsubscribeRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest.class, com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        uris_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_UnsubscribeRequest_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest build() {
        com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest result = new com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) != 0)) {
          uris_ = java.util.Collections.unmodifiableList(uris_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.uris_ = uris_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private java.util.List<com.google.protobuf.ByteString> uris_ = java.util.Collections.emptyList();
      private void ensureUrisIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          uris_ = new java.util.ArrayList<com.google.protobuf.ByteString>(uris_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @return A list containing the uris.
       */
      public java.util.List<com.google.protobuf.ByteString>
          getUrisList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(uris_) : uris_;
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @return The count of uris.
       */
      public int getUrisCount() {
        return uris_.size();
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @param index The index of the element to return.
       * @return The uris at the given index.
       */
      public com.google.protobuf.ByteString getUris(int index) {
        return uris_.get(index);
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @param index The index to set the value at.
       * @param value The uris to set.
       * @return This builder for chaining.
       */
      public Builder setUris(
          int index, com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureUrisIsMutable();
        uris_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @param value The uris to add.
       * @return This builder for chaining.
       */
      public Builder addUris(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureUrisIsMutable();
        uris_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @param values The uris to add.
       * @return This builder for chaining.
       */
      public Builder addAllUris(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        ensureUrisIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, uris_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes uris = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearUris() {
        uris_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.UnsubscribeRequest)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.UnsubscribeRequest)
    private static final com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<UnsubscribeRequest>
        PARSER = new com.google.protobuf.AbstractParser<UnsubscribeRequest>() {
      @java.lang.Override
      public UnsubscribeRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<UnsubscribeRequest> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<UnsubscribeRequest> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.UnsubscribeRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PlaylistModificationInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.playlist4.proto.PlaylistModificationInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes uri = 1;</code>
     * @return Whether the uri field is set.
     */
    boolean hasUri();
    /**
     * <code>optional bytes uri = 1;</code>
     * @return The uri.
     */
    com.google.protobuf.ByteString getUri();

    /**
     * <code>optional bytes new_revision = 2;</code>
     * @return Whether the newRevision field is set.
     */
    boolean hasNewRevision();
    /**
     * <code>optional bytes new_revision = 2;</code>
     * @return The newRevision.
     */
    com.google.protobuf.ByteString getNewRevision();

    /**
     * <code>optional bytes parent_revision = 3;</code>
     * @return Whether the parentRevision field is set.
     */
    boolean hasParentRevision();
    /**
     * <code>optional bytes parent_revision = 3;</code>
     * @return The parentRevision.
     */
    com.google.protobuf.ByteString getParentRevision();

    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
     */
    java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> 
        getOpsList();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index);
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
     */
    int getOpsCount();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
     */
    java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
        getOpsOrBuilderList();
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
     */
    com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code spotify.playlist4.proto.PlaylistModificationInfo}
   */
  public  static final class PlaylistModificationInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.playlist4.proto.PlaylistModificationInfo)
      PlaylistModificationInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PlaylistModificationInfo.newBuilder() to construct.
    private PlaylistModificationInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PlaylistModificationInfo() {
      uri_ = com.google.protobuf.ByteString.EMPTY;
      newRevision_ = com.google.protobuf.ByteString.EMPTY;
      parentRevision_ = com.google.protobuf.ByteString.EMPTY;
      ops_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new PlaylistModificationInfo();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_PlaylistModificationInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_PlaylistModificationInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo.class, com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo.Builder.class);
    }

    private int bitField0_;
    public static final int URI_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString uri_;
    /**
     * <code>optional bytes uri = 1;</code>
     * @return Whether the uri field is set.
     */
    public boolean hasUri() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes uri = 1;</code>
     * @return The uri.
     */
    public com.google.protobuf.ByteString getUri() {
      return uri_;
    }

    public static final int NEW_REVISION_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString newRevision_;
    /**
     * <code>optional bytes new_revision = 2;</code>
     * @return Whether the newRevision field is set.
     */
    public boolean hasNewRevision() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional bytes new_revision = 2;</code>
     * @return The newRevision.
     */
    public com.google.protobuf.ByteString getNewRevision() {
      return newRevision_;
    }

    public static final int PARENT_REVISION_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString parentRevision_;
    /**
     * <code>optional bytes parent_revision = 3;</code>
     * @return Whether the parentRevision field is set.
     */
    public boolean hasParentRevision() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional bytes parent_revision = 3;</code>
     * @return The parentRevision.
     */
    public com.google.protobuf.ByteString getParentRevision() {
      return parentRevision_;
    }

    public static final int OPS_FIELD_NUMBER = 4;
    private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> ops_;
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
     */
    public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> getOpsList() {
      return ops_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
     */
    public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
        getOpsOrBuilderList() {
      return ops_;
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
     */
    public int getOpsCount() {
      return ops_.size();
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index) {
      return ops_.get(index);
    }
    /**
     * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
     */
    public com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
        int index) {
      return ops_.get(index);
    }

    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.playlist4.proto.PlaylistModificationInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.playlist4.proto.PlaylistModificationInfo)
        com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_PlaylistModificationInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_PlaylistModificationInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo.class, com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo.Builder.class);
      }

      // Construct using com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getOpsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        uri_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        newRevision_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        parentRevision_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (opsBuilder_ == null) {
          ops_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          opsBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.playlist4.Playlist4ApiProto.internal_static_spotify_playlist4_proto_PlaylistModificationInfo_descriptor;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo getDefaultInstanceForType() {
        return com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo build() {
        com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo buildPartial() {
        com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo result = new com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.uri_ = uri_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.newRevision_ = newRevision_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.parentRevision_ = parentRevision_;
        if (opsBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0)) {
            ops_ = java.util.Collections.unmodifiableList(ops_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.ops_ = ops_;
        } else {
          result.ops_ = opsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString uri_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes uri = 1;</code>
       * @return Whether the uri field is set.
       */
      public boolean hasUri() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes uri = 1;</code>
       * @return The uri.
       */
      public com.google.protobuf.ByteString getUri() {
        return uri_;
      }
      /**
       * <code>optional bytes uri = 1;</code>
       * @param value The uri to set.
       * @return This builder for chaining.
       */
      public Builder setUri(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        uri_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes uri = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearUri() {
        bitField0_ = (bitField0_ & ~0x00000001);
        uri_ = getDefaultInstance().getUri();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString newRevision_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes new_revision = 2;</code>
       * @return Whether the newRevision field is set.
       */
      public boolean hasNewRevision() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional bytes new_revision = 2;</code>
       * @return The newRevision.
       */
      public com.google.protobuf.ByteString getNewRevision() {
        return newRevision_;
      }
      /**
       * <code>optional bytes new_revision = 2;</code>
       * @param value The newRevision to set.
       * @return This builder for chaining.
       */
      public Builder setNewRevision(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        newRevision_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes new_revision = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearNewRevision() {
        bitField0_ = (bitField0_ & ~0x00000002);
        newRevision_ = getDefaultInstance().getNewRevision();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString parentRevision_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes parent_revision = 3;</code>
       * @return Whether the parentRevision field is set.
       */
      public boolean hasParentRevision() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional bytes parent_revision = 3;</code>
       * @return The parentRevision.
       */
      public com.google.protobuf.ByteString getParentRevision() {
        return parentRevision_;
      }
      /**
       * <code>optional bytes parent_revision = 3;</code>
       * @param value The parentRevision to set.
       * @return This builder for chaining.
       */
      public Builder setParentRevision(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        parentRevision_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes parent_revision = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearParentRevision() {
        bitField0_ = (bitField0_ & ~0x00000004);
        parentRevision_ = getDefaultInstance().getParentRevision();
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> ops_ =
        java.util.Collections.emptyList();
      private void ensureOpsIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          ops_ = new java.util.ArrayList<com.spotify.playlist4.Playlist4ApiProto.Op>(ops_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> opsBuilder_;

      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op> getOpsList() {
        if (opsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(ops_);
        } else {
          return opsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public int getOpsCount() {
        if (opsBuilder_ == null) {
          return ops_.size();
        } else {
          return opsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op getOps(int index) {
        if (opsBuilder_ == null) {
          return ops_.get(index);
        } else {
          return opsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public Builder setOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.set(index, value);
          onChanged();
        } else {
          opsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public Builder setOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.set(index, builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public Builder addOps(com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.add(value);
          onChanged();
        } else {
          opsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public Builder addOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op value) {
        if (opsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsIsMutable();
          ops_.add(index, value);
          onChanged();
        } else {
          opsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public Builder addOps(
          com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.add(builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public Builder addOps(
          int index, com.spotify.playlist4.Playlist4ApiProto.Op.Builder builderForValue) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.add(index, builderForValue.build());
          onChanged();
        } else {
          opsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public Builder addAllOps(
          java.lang.Iterable<? extends com.spotify.playlist4.Playlist4ApiProto.Op> values) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, ops_);
          onChanged();
        } else {
          opsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public Builder clearOps() {
        if (opsBuilder_ == null) {
          ops_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          opsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public Builder removeOps(int index) {
        if (opsBuilder_ == null) {
          ensureOpsIsMutable();
          ops_.remove(index);
          onChanged();
        } else {
          opsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder getOpsBuilder(
          int index) {
        return getOpsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder getOpsOrBuilder(
          int index) {
        if (opsBuilder_ == null) {
          return ops_.get(index);  } else {
          return opsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public java.util.List<? extends com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
           getOpsOrBuilderList() {
        if (opsBuilder_ != null) {
          return opsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(ops_);
        }
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder addOpsBuilder() {
        return getOpsFieldBuilder().addBuilder(
            com.spotify.playlist4.Playlist4ApiProto.Op.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public com.spotify.playlist4.Playlist4ApiProto.Op.Builder addOpsBuilder(
          int index) {
        return getOpsFieldBuilder().addBuilder(
            index, com.spotify.playlist4.Playlist4ApiProto.Op.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.playlist4.proto.Op ops = 4;</code>
       */
      public java.util.List<com.spotify.playlist4.Playlist4ApiProto.Op.Builder> 
           getOpsBuilderList() {
        return getOpsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder> 
          getOpsFieldBuilder() {
        if (opsBuilder_ == null) {
          opsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.playlist4.Playlist4ApiProto.Op, com.spotify.playlist4.Playlist4ApiProto.Op.Builder, com.spotify.playlist4.Playlist4ApiProto.OpOrBuilder>(
                  ops_,
                  ((bitField0_ & 0x00000008) != 0),
                  getParentForChildren(),
                  isClean());
          ops_ = null;
        }
        return opsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:spotify.playlist4.proto.PlaylistModificationInfo)
    }

    // @@protoc_insertion_point(class_scope:spotify.playlist4.proto.PlaylistModificationInfo)
    private static final com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo();
    }

    public static com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<PlaylistModificationInfo>
        PARSER = new com.google.protobuf.AbstractParser<PlaylistModificationInfo>() {
      @java.lang.Override
      public PlaylistModificationInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<PlaylistModificationInfo> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<PlaylistModificationInfo> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.spotify.playlist4.Playlist4ApiProto.PlaylistModificationInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_Item_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_Item_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_MetaItem_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_MetaItem_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_ListItems_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_ListItems_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_FormatListAttribute_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_FormatListAttribute_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_ListAttributes_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_ListAttributes_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_ItemAttributes_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_ItemAttributes_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_Add_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_Add_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_Rem_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_Rem_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_Mov_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_Mov_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_ItemAttributesPartialState_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_ItemAttributesPartialState_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_ListAttributesPartialState_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_ListAttributesPartialState_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_UpdateItemAttributes_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_UpdateItemAttributes_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_UpdateListAttributes_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_UpdateListAttributes_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_Op_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_Op_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_OpList_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_OpList_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_ChangeInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_ChangeInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_SourceInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_SourceInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_Delta_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_Delta_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_Diff_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_Diff_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_ListChanges_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_ListChanges_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_SelectedListContent_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_SelectedListContent_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_CreateListReply_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_CreateListReply_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_ModifyReply_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_ModifyReply_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_SubscribeRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_SubscribeRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_UnsubscribeRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_UnsubscribeRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_playlist4_proto_PlaylistModificationInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_playlist4_proto_PlaylistModificationInfo_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\030playlist4_external.proto\022\027spotify.play" +
      "list4.proto\"P\n\004Item\022\013\n\003uri\030\001 \002(\t\022;\n\nattr" +
      "ibutes\030\002 \001(\0132\'.spotify.playlist4.proto.I" +
      "temAttributes\"\224\001\n\010MetaItem\022\020\n\010revision\030\001" +
      " \001(\014\022;\n\nattributes\030\002 \001(\0132\'.spotify.playl" +
      "ist4.proto.ListAttributes\022\016\n\006length\030\003 \001(" +
      "\005\022\021\n\ttimestamp\030\004 \001(\003\022\026\n\016owner_username\030\005" +
      " \001(\t\"\220\001\n\tListItems\022\013\n\003pos\030\001 \002(\005\022\021\n\ttrunc" +
      "ated\030\002 \002(\010\022,\n\005items\030\003 \003(\0132\035.spotify.play" +
      "list4.proto.Item\0225\n\nmeta_items\030\004 \003(\0132!.s" +
      "potify.playlist4.proto.MetaItem\"1\n\023Forma" +
      "tListAttribute\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001" +
      "(\t\"\366\001\n\016ListAttributes\022\014\n\004name\030\001 \001(\t\022\023\n\013d" +
      "escription\030\002 \001(\t\022\017\n\007picture\030\003 \001(\014\022\025\n\rcol" +
      "laborative\030\004 \001(\010\022\023\n\013pl3_version\030\005 \001(\t\022\030\n" +
      "\020deleted_by_owner\030\006 \001(\010\022\021\n\tclient_id\030\n \001" +
      "(\t\022\016\n\006format\030\013 \001(\t\022G\n\021format_attributes\030" +
      "\014 \003(\0132,.spotify.playlist4.proto.FormatLi" +
      "stAttribute\"\260\001\n\016ItemAttributes\022\020\n\010added_" +
      "by\030\001 \001(\t\022\021\n\ttimestamp\030\002 \001(\003\022\017\n\007seen_at\030\t" +
      " \001(\003\022\016\n\006public\030\n \001(\010\022G\n\021format_attribute" +
      "s\030\013 \003(\0132,.spotify.playlist4.proto.Format" +
      "ListAttribute\022\017\n\007item_id\030\014 \001(\014\"l\n\003Add\022\022\n" +
      "\nfrom_index\030\001 \001(\005\022,\n\005items\030\002 \003(\0132\035.spoti" +
      "fy.playlist4.proto.Item\022\020\n\010add_last\030\004 \001(" +
      "\010\022\021\n\tadd_first\030\005 \001(\010\"m\n\003Rem\022\022\n\nfrom_inde" +
      "x\030\001 \001(\005\022\016\n\006length\030\002 \001(\005\022,\n\005items\030\003 \003(\0132\035" +
      ".spotify.playlist4.proto.Item\022\024\n\014items_a" +
      "s_key\030\007 \001(\010\";\n\003Mov\022\022\n\nfrom_index\030\001 \002(\005\022\016" +
      "\n\006length\030\002 \002(\005\022\020\n\010to_index\030\003 \002(\005\"\223\001\n\032Ite" +
      "mAttributesPartialState\0227\n\006values\030\001 \002(\0132" +
      "\'.spotify.playlist4.proto.ItemAttributes" +
      "\022<\n\010no_value\030\002 \003(\0162*.spotify.playlist4.p" +
      "roto.ItemAttributeKind\"\223\001\n\032ListAttribute" +
      "sPartialState\0227\n\006values\030\001 \002(\0132\'.spotify." +
      "playlist4.proto.ListAttributes\022<\n\010no_val" +
      "ue\030\002 \003(\0162*.spotify.playlist4.proto.ListA" +
      "ttributeKind\"\277\001\n\024UpdateItemAttributes\022\r\n" +
      "\005index\030\001 \002(\005\022K\n\016new_attributes\030\002 \002(\01323.s" +
      "potify.playlist4.proto.ItemAttributesPar" +
      "tialState\022K\n\016old_attributes\030\003 \001(\01323.spot" +
      "ify.playlist4.proto.ItemAttributesPartia" +
      "lState\"\260\001\n\024UpdateListAttributes\022K\n\016new_a" +
      "ttributes\030\001 \002(\01323.spotify.playlist4.prot" +
      "o.ListAttributesPartialState\022K\n\016old_attr" +
      "ibutes\030\002 \001(\01323.spotify.playlist4.proto.L" +
      "istAttributesPartialState\"\300\003\n\002Op\022.\n\004kind" +
      "\030\001 \002(\0162 .spotify.playlist4.proto.Op.Kind" +
      "\022)\n\003add\030\002 \001(\0132\034.spotify.playlist4.proto." +
      "Add\022)\n\003rem\030\003 \001(\0132\034.spotify.playlist4.pro" +
      "to.Rem\022)\n\003mov\030\004 \001(\0132\034.spotify.playlist4." +
      "proto.Mov\022M\n\026update_item_attributes\030\005 \001(" +
      "\0132-.spotify.playlist4.proto.UpdateItemAt" +
      "tributes\022M\n\026update_list_attributes\030\006 \001(\013" +
      "2-.spotify.playlist4.proto.UpdateListAtt" +
      "ributes\"k\n\004Kind\022\020\n\014KIND_UNKNOWN\020\000\022\007\n\003ADD" +
      "\020\002\022\007\n\003REM\020\003\022\007\n\003MOV\020\004\022\032\n\026UPDATE_ITEM_ATTR" +
      "IBUTES\020\005\022\032\n\026UPDATE_LIST_ATTRIBUTES\020\006\"2\n\006" +
      "OpList\022(\n\003ops\030\001 \003(\0132\033.spotify.playlist4." +
      "proto.Op\"\325\001\n\nChangeInfo\022\014\n\004user\030\001 \001(\t\022\021\n" +
      "\ttimestamp\030\002 \001(\003\022\r\n\005admin\030\003 \001(\010\022\014\n\004undo\030" +
      "\004 \001(\010\022\014\n\004redo\030\005 \001(\010\022\r\n\005merge\030\006 \001(\010\022\022\n\nco" +
      "mpressed\030\007 \001(\010\022\021\n\tmigration\030\010 \001(\010\022\020\n\010spl" +
      "it_id\030\t \001(\005\0223\n\006source\030\n \001(\0132#.spotify.pl" +
      "aylist4.proto.SourceInfo\"\350\001\n\nSourceInfo\022" +
      ":\n\006client\030\001 \001(\0162*.spotify.playlist4.prot" +
      "o.SourceInfo.Client\022\013\n\003app\030\003 \001(\t\022\016\n\006sour" +
      "ce\030\004 \001(\t\022\017\n\007version\030\005 \001(\t\"p\n\006Client\022\022\n\016C" +
      "LIENT_UNKNOWN\020\000\022\021\n\rNATIVE_HERMES\020\001\022\n\n\006CL" +
      "IENT\020\002\022\n\n\006PYTHON\020\003\022\010\n\004JAVA\020\004\022\r\n\tWEBPLAYE" +
      "R\020\005\022\016\n\nLIBSPOTIFY\020\006\"z\n\005Delta\022\024\n\014base_ver" +
      "sion\030\001 \001(\014\022(\n\003ops\030\002 \003(\0132\033.spotify.playli" +
      "st4.proto.Op\0221\n\004info\030\004 \001(\0132#.spotify.pla" +
      "ylist4.proto.ChangeInfo\"\\\n\004Diff\022\025\n\rfrom_" +
      "revision\030\001 \002(\014\022(\n\003ops\030\002 \003(\0132\033.spotify.pl" +
      "aylist4.proto.Op\022\023\n\013to_revision\030\003 \002(\014\"\240\001" +
      "\n\013ListChanges\022\025\n\rbase_revision\030\001 \001(\014\022.\n\006" +
      "deltas\030\002 \003(\0132\036.spotify.playlist4.proto.D" +
      "elta\022 \n\030want_resulting_revisions\030\003 \001(\010\022\030" +
      "\n\020want_sync_result\030\004 \001(\010\022\016\n\006nonces\030\006 \003(\003" +
      "\"\217\003\n\023SelectedListContent\022\020\n\010revision\030\001 \001" +
      "(\014\022\016\n\006length\030\002 \001(\005\022;\n\nattributes\030\003 \001(\0132\'" +
      ".spotify.playlist4.proto.ListAttributes\022" +
      "4\n\010contents\030\005 \001(\0132\".spotify.playlist4.pr" +
      "oto.ListItems\022+\n\004diff\030\006 \001(\0132\035.spotify.pl" +
      "aylist4.proto.Diff\0222\n\013sync_result\030\007 \001(\0132" +
      "\035.spotify.playlist4.proto.Diff\022\033\n\023result" +
      "ing_revisions\030\010 \003(\014\022\026\n\016multiple_heads\030\t " +
      "\001(\010\022\022\n\nup_to_date\030\n \001(\010\022\016\n\006nonces\030\016 \003(\003\022" +
      "\021\n\ttimestamp\030\017 \001(\003\022\026\n\016owner_username\030\020 \001" +
      "(\t\"0\n\017CreateListReply\022\013\n\003uri\030\001 \002(\014\022\020\n\010re" +
      "vision\030\002 \001(\014\",\n\013ModifyReply\022\013\n\003uri\030\001 \002(\014" +
      "\022\020\n\010revision\030\002 \001(\014\" \n\020SubscribeRequest\022\014" +
      "\n\004uris\030\001 \003(\014\"\"\n\022UnsubscribeRequest\022\014\n\004ur" +
      "is\030\001 \003(\014\"\200\001\n\030PlaylistModificationInfo\022\013\n" +
      "\003uri\030\001 \001(\014\022\024\n\014new_revision\030\002 \001(\014\022\027\n\017pare" +
      "nt_revision\030\003 \001(\014\022(\n\003ops\030\004 \003(\0132\033.spotify" +
      ".playlist4.proto.Op*\346\001\n\021ListAttributeKin" +
      "d\022\020\n\014LIST_UNKNOWN\020\000\022\r\n\tLIST_NAME\020\001\022\024\n\020LI" +
      "ST_DESCRIPTION\020\002\022\020\n\014LIST_PICTURE\020\003\022\026\n\022LI" +
      "ST_COLLABORATIVE\020\004\022\024\n\020LIST_PL3_VERSION\020\005" +
      "\022\031\n\025LIST_DELETED_BY_OWNER\020\006\022\022\n\016LIST_CLIE" +
      "NT_ID\020\n\022\017\n\013LIST_FORMAT\020\013\022\032\n\026LIST_FORMAT_" +
      "ATTRIBUTES\020\014*\230\001\n\021ItemAttributeKind\022\020\n\014IT" +
      "EM_UNKNOWN\020\000\022\021\n\rITEM_ADDED_BY\020\001\022\022\n\016ITEM_" +
      "TIMESTAMP\020\002\022\020\n\014ITEM_SEEN_AT\020\t\022\017\n\013ITEM_PU" +
      "BLIC\020\n\022\032\n\026ITEM_FORMAT_ATTRIBUTES\020\013\022\013\n\007IT" +
      "EM_ID\020\014B,\n\025com.spotify.playlist4B\021Playli" +
      "st4ApiProtoH\002"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        });
    internal_static_spotify_playlist4_proto_Item_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_spotify_playlist4_proto_Item_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_Item_descriptor,
        new java.lang.String[] { "Uri", "Attributes", });
    internal_static_spotify_playlist4_proto_MetaItem_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_spotify_playlist4_proto_MetaItem_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_MetaItem_descriptor,
        new java.lang.String[] { "Revision", "Attributes", "Length", "Timestamp", "OwnerUsername", });
    internal_static_spotify_playlist4_proto_ListItems_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_spotify_playlist4_proto_ListItems_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_ListItems_descriptor,
        new java.lang.String[] { "Pos", "Truncated", "Items", "MetaItems", });
    internal_static_spotify_playlist4_proto_FormatListAttribute_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_spotify_playlist4_proto_FormatListAttribute_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_FormatListAttribute_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_spotify_playlist4_proto_ListAttributes_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_spotify_playlist4_proto_ListAttributes_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_ListAttributes_descriptor,
        new java.lang.String[] { "Name", "Description", "Picture", "Collaborative", "Pl3Version", "DeletedByOwner", "ClientId", "Format", "FormatAttributes", });
    internal_static_spotify_playlist4_proto_ItemAttributes_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_spotify_playlist4_proto_ItemAttributes_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_ItemAttributes_descriptor,
        new java.lang.String[] { "AddedBy", "Timestamp", "SeenAt", "Public", "FormatAttributes", "ItemId", });
    internal_static_spotify_playlist4_proto_Add_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_spotify_playlist4_proto_Add_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_Add_descriptor,
        new java.lang.String[] { "FromIndex", "Items", "AddLast", "AddFirst", });
    internal_static_spotify_playlist4_proto_Rem_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_spotify_playlist4_proto_Rem_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_Rem_descriptor,
        new java.lang.String[] { "FromIndex", "Length", "Items", "ItemsAsKey", });
    internal_static_spotify_playlist4_proto_Mov_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_spotify_playlist4_proto_Mov_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_Mov_descriptor,
        new java.lang.String[] { "FromIndex", "Length", "ToIndex", });
    internal_static_spotify_playlist4_proto_ItemAttributesPartialState_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_spotify_playlist4_proto_ItemAttributesPartialState_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_ItemAttributesPartialState_descriptor,
        new java.lang.String[] { "Values", "NoValue", });
    internal_static_spotify_playlist4_proto_ListAttributesPartialState_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_spotify_playlist4_proto_ListAttributesPartialState_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_ListAttributesPartialState_descriptor,
        new java.lang.String[] { "Values", "NoValue", });
    internal_static_spotify_playlist4_proto_UpdateItemAttributes_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_spotify_playlist4_proto_UpdateItemAttributes_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_UpdateItemAttributes_descriptor,
        new java.lang.String[] { "Index", "NewAttributes", "OldAttributes", });
    internal_static_spotify_playlist4_proto_UpdateListAttributes_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_spotify_playlist4_proto_UpdateListAttributes_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_UpdateListAttributes_descriptor,
        new java.lang.String[] { "NewAttributes", "OldAttributes", });
    internal_static_spotify_playlist4_proto_Op_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_spotify_playlist4_proto_Op_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_Op_descriptor,
        new java.lang.String[] { "Kind", "Add", "Rem", "Mov", "UpdateItemAttributes", "UpdateListAttributes", });
    internal_static_spotify_playlist4_proto_OpList_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_spotify_playlist4_proto_OpList_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_OpList_descriptor,
        new java.lang.String[] { "Ops", });
    internal_static_spotify_playlist4_proto_ChangeInfo_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_spotify_playlist4_proto_ChangeInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_ChangeInfo_descriptor,
        new java.lang.String[] { "User", "Timestamp", "Admin", "Undo", "Redo", "Merge", "Compressed", "Migration", "SplitId", "Source", });
    internal_static_spotify_playlist4_proto_SourceInfo_descriptor =
      getDescriptor().getMessageTypes().get(16);
    internal_static_spotify_playlist4_proto_SourceInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_SourceInfo_descriptor,
        new java.lang.String[] { "Client", "App", "Source", "Version", });
    internal_static_spotify_playlist4_proto_Delta_descriptor =
      getDescriptor().getMessageTypes().get(17);
    internal_static_spotify_playlist4_proto_Delta_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_Delta_descriptor,
        new java.lang.String[] { "BaseVersion", "Ops", "Info", });
    internal_static_spotify_playlist4_proto_Diff_descriptor =
      getDescriptor().getMessageTypes().get(18);
    internal_static_spotify_playlist4_proto_Diff_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_Diff_descriptor,
        new java.lang.String[] { "FromRevision", "Ops", "ToRevision", });
    internal_static_spotify_playlist4_proto_ListChanges_descriptor =
      getDescriptor().getMessageTypes().get(19);
    internal_static_spotify_playlist4_proto_ListChanges_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_ListChanges_descriptor,
        new java.lang.String[] { "BaseRevision", "Deltas", "WantResultingRevisions", "WantSyncResult", "Nonces", });
    internal_static_spotify_playlist4_proto_SelectedListContent_descriptor =
      getDescriptor().getMessageTypes().get(20);
    internal_static_spotify_playlist4_proto_SelectedListContent_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_SelectedListContent_descriptor,
        new java.lang.String[] { "Revision", "Length", "Attributes", "Contents", "Diff", "SyncResult", "ResultingRevisions", "MultipleHeads", "UpToDate", "Nonces", "Timestamp", "OwnerUsername", });
    internal_static_spotify_playlist4_proto_CreateListReply_descriptor =
      getDescriptor().getMessageTypes().get(21);
    internal_static_spotify_playlist4_proto_CreateListReply_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_CreateListReply_descriptor,
        new java.lang.String[] { "Uri", "Revision", });
    internal_static_spotify_playlist4_proto_ModifyReply_descriptor =
      getDescriptor().getMessageTypes().get(22);
    internal_static_spotify_playlist4_proto_ModifyReply_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_ModifyReply_descriptor,
        new java.lang.String[] { "Uri", "Revision", });
    internal_static_spotify_playlist4_proto_SubscribeRequest_descriptor =
      getDescriptor().getMessageTypes().get(23);
    internal_static_spotify_playlist4_proto_SubscribeRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_SubscribeRequest_descriptor,
        new java.lang.String[] { "Uris", });
    internal_static_spotify_playlist4_proto_UnsubscribeRequest_descriptor =
      getDescriptor().getMessageTypes().get(24);
    internal_static_spotify_playlist4_proto_UnsubscribeRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_UnsubscribeRequest_descriptor,
        new java.lang.String[] { "Uris", });
    internal_static_spotify_playlist4_proto_PlaylistModificationInfo_descriptor =
      getDescriptor().getMessageTypes().get(25);
    internal_static_spotify_playlist4_proto_PlaylistModificationInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_playlist4_proto_PlaylistModificationInfo_descriptor,
        new java.lang.String[] { "Uri", "NewRevision", "ParentRevision", "Ops", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
