public class org.apache.cassandra.dht.RangeStreamer
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.cassandra.dht.RangeStreamer
  super_class: java.lang.Object
{
  private static final org.slf4j.Logger logger;
    descriptor: Lorg/slf4j/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final java.util.Collection<org.apache.cassandra.dht.Token> tokens;
    descriptor: Ljava/util/Collection;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Collection<Lorg/apache/cassandra/dht/Token;>;

  private final org.apache.cassandra.locator.TokenMetadata metadata;
    descriptor: Lorg/apache/cassandra/locator/TokenMetadata;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.net.InetAddress address;
    descriptor: Ljava/net/InetAddress;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.String description;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.google.common.collect.Multimap<java.lang.String, java.util.Map$Entry<java.net.InetAddress, java.util.Collection<org.apache.cassandra.dht.Range<org.apache.cassandra.dht.Token>>>> toFetch;
    descriptor: Lcom/google/common/collect/Multimap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lcom/google/common/collect/Multimap<Ljava/lang/String;Ljava/util/Map$Entry<Ljava/net/InetAddress;Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;>;>;

  private final java.util.Set<org.apache.cassandra.dht.RangeStreamer$ISourceFilter> sourceFilters;
    descriptor: Ljava/util/Set;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Set<Lorg/apache/cassandra/dht/RangeStreamer$ISourceFilter;>;

  private final org.apache.cassandra.streaming.StreamPlan streamPlan;
    descriptor: Lorg/apache/cassandra/streaming/StreamPlan;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final boolean useStrictConsistency;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.apache.cassandra.locator.IEndpointSnitch snitch;
    descriptor: Lorg/apache/cassandra/locator/IEndpointSnitch;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.apache.cassandra.dht.StreamStateStore stateStore;
    descriptor: Lorg/apache/cassandra/dht/StreamStateStore;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 48
            ldc Lorg/apache/cassandra/dht/RangeStreamer;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic org.apache.cassandra.dht.RangeStreamer.$assertionsDisabled:Z
         3: .line 50
            ldc Lorg/apache/cassandra/dht/RangeStreamer;
            invokestatic org.slf4j.LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
            putstatic org.apache.cassandra.dht.RangeStreamer.logger:Lorg/slf4j/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(org.apache.cassandra.locator.TokenMetadata, java.util.Collection<org.apache.cassandra.dht.Token>, java.net.InetAddress, java.lang.String, boolean, org.apache.cassandra.locator.IEndpointSnitch, org.apache.cassandra.dht.StreamStateStore, );
    descriptor: (Lorg/apache/cassandra/locator/TokenMetadata;Ljava/util/Collection;Ljava/net/InetAddress;Ljava/lang/String;ZLorg/apache/cassandra/locator/IEndpointSnitch;Lorg/apache/cassandra/dht/StreamStateStore;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=9, args_size=9
        start local 0 // org.apache.cassandra.dht.RangeStreamer this
        start local 1 // org.apache.cassandra.locator.TokenMetadata metadata
        start local 2 // java.util.Collection tokens
        start local 3 // java.net.InetAddress address
        start local 4 // java.lang.String description
        start local 5 // boolean useStrictConsistency
        start local 6 // org.apache.cassandra.locator.IEndpointSnitch snitch
        start local 7 // org.apache.cassandra.dht.StreamStateStore stateStore
        start local 8 // boolean connectSequentially
         0: .line 143
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 60
            aload 0 /* this */
            invokestatic com.google.common.collect.HashMultimap.create:()Lcom/google/common/collect/HashMultimap;
            putfield org.apache.cassandra.dht.RangeStreamer.toFetch:Lcom/google/common/collect/Multimap;
         2: .line 61
            aload 0 /* this */
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            putfield org.apache.cassandra.dht.RangeStreamer.sourceFilters:Ljava/util/Set;
         3: .line 152
            aload 0 /* this */
            aload 1 /* metadata */
            putfield org.apache.cassandra.dht.RangeStreamer.metadata:Lorg/apache/cassandra/locator/TokenMetadata;
         4: .line 153
            aload 0 /* this */
            aload 2 /* tokens */
            putfield org.apache.cassandra.dht.RangeStreamer.tokens:Ljava/util/Collection;
         5: .line 154
            aload 0 /* this */
            aload 3 /* address */
            putfield org.apache.cassandra.dht.RangeStreamer.address:Ljava/net/InetAddress;
         6: .line 155
            aload 0 /* this */
            aload 4 /* description */
            putfield org.apache.cassandra.dht.RangeStreamer.description:Ljava/lang/String;
         7: .line 156
            aload 0 /* this */
            new org.apache.cassandra.streaming.StreamPlan
            dup
            aload 4 /* description */
            iconst_1
            iload 8 /* connectSequentially */
            invokespecial org.apache.cassandra.streaming.StreamPlan.<init>:(Ljava/lang/String;ZZ)V
            putfield org.apache.cassandra.dht.RangeStreamer.streamPlan:Lorg/apache/cassandra/streaming/StreamPlan;
         8: .line 157
            aload 0 /* this */
            iload 5 /* useStrictConsistency */
            putfield org.apache.cassandra.dht.RangeStreamer.useStrictConsistency:Z
         9: .line 158
            aload 0 /* this */
            aload 6 /* snitch */
            putfield org.apache.cassandra.dht.RangeStreamer.snitch:Lorg/apache/cassandra/locator/IEndpointSnitch;
        10: .line 159
            aload 0 /* this */
            aload 7 /* stateStore */
            putfield org.apache.cassandra.dht.RangeStreamer.stateStore:Lorg/apache/cassandra/dht/StreamStateStore;
        11: .line 160
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.streamPlan:Lorg/apache/cassandra/streaming/StreamPlan;
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.stateStore:Lorg/apache/cassandra/dht/StreamStateStore;
            iconst_0
            anewarray org.apache.cassandra.streaming.StreamEventHandler
            invokevirtual org.apache.cassandra.streaming.StreamPlan.listeners:(Lorg/apache/cassandra/streaming/StreamEventHandler;[Lorg/apache/cassandra/streaming/StreamEventHandler;)Lorg/apache/cassandra/streaming/StreamPlan;
            pop
        12: .line 161
            return
        end local 8 // boolean connectSequentially
        end local 7 // org.apache.cassandra.dht.StreamStateStore stateStore
        end local 6 // org.apache.cassandra.locator.IEndpointSnitch snitch
        end local 5 // boolean useStrictConsistency
        end local 4 // java.lang.String description
        end local 3 // java.net.InetAddress address
        end local 2 // java.util.Collection tokens
        end local 1 // org.apache.cassandra.locator.TokenMetadata metadata
        end local 0 // org.apache.cassandra.dht.RangeStreamer this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   13     0                  this  Lorg/apache/cassandra/dht/RangeStreamer;
            0   13     1              metadata  Lorg/apache/cassandra/locator/TokenMetadata;
            0   13     2                tokens  Ljava/util/Collection<Lorg/apache/cassandra/dht/Token;>;
            0   13     3               address  Ljava/net/InetAddress;
            0   13     4           description  Ljava/lang/String;
            0   13     5  useStrictConsistency  Z
            0   13     6                snitch  Lorg/apache/cassandra/locator/IEndpointSnitch;
            0   13     7            stateStore  Lorg/apache/cassandra/dht/StreamStateStore;
            0   13     8   connectSequentially  Z
    Signature: (Lorg/apache/cassandra/locator/TokenMetadata;Ljava/util/Collection<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;Ljava/lang/String;ZLorg/apache/cassandra/locator/IEndpointSnitch;Lorg/apache/cassandra/dht/StreamStateStore;Z)V
    MethodParameters:
                      Name  Flags
      metadata              
      tokens                
      address               
      description           
      useStrictConsistency  
      snitch                
      stateStore            
      connectSequentially   

  public void addSourceFilter(org.apache.cassandra.dht.RangeStreamer$ISourceFilter);
    descriptor: (Lorg/apache/cassandra/dht/RangeStreamer$ISourceFilter;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.cassandra.dht.RangeStreamer this
        start local 1 // org.apache.cassandra.dht.RangeStreamer$ISourceFilter filter
         0: .line 165
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.sourceFilters:Ljava/util/Set;
            aload 1 /* filter */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         1: .line 166
            return
        end local 1 // org.apache.cassandra.dht.RangeStreamer$ISourceFilter filter
        end local 0 // org.apache.cassandra.dht.RangeStreamer this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/apache/cassandra/dht/RangeStreamer;
            0    2     1  filter  Lorg/apache/cassandra/dht/RangeStreamer$ISourceFilter;
    MethodParameters:
        Name  Flags
      filter  

  public void addRanges(java.lang.String, java.util.Collection<org.apache.cassandra.dht.Range<org.apache.cassandra.dht.Token>>);
    descriptor: (Ljava/lang/String;Ljava/util/Collection;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=8, args_size=3
        start local 0 // org.apache.cassandra.dht.RangeStreamer this
        start local 1 // java.lang.String keyspaceName
        start local 2 // java.util.Collection ranges
         0: .line 176
            aload 0 /* this */
            aload 1 /* keyspaceName */
            invokevirtual org.apache.cassandra.dht.RangeStreamer.useStrictSourcesForRanges:(Ljava/lang/String;)Z
            ifeq 2
         1: .line 177
            aload 0 /* this */
            aload 1 /* keyspaceName */
            aload 2 /* ranges */
            invokevirtual org.apache.cassandra.dht.RangeStreamer.getAllRangesWithStrictSourcesFor:(Ljava/lang/String;Ljava/util/Collection;)Lcom/google/common/collect/Multimap;
            goto 3
      StackMap locals:
      StackMap stack:
         2: aload 0 /* this */
            aload 1 /* keyspaceName */
            aload 2 /* ranges */
            invokevirtual org.apache.cassandra.dht.RangeStreamer.getAllRangesWithSourcesFor:(Ljava/lang/String;Ljava/util/Collection;)Lcom/google/common/collect/Multimap;
         3: .line 176
      StackMap locals:
      StackMap stack: com.google.common.collect.Multimap
            astore 3 /* rangesForKeyspace */
        start local 3 // com.google.common.collect.Multimap rangesForKeyspace
         4: .line 179
            getstatic org.apache.cassandra.dht.RangeStreamer.logger:Lorg/slf4j/Logger;
            invokeinterface org.slf4j.Logger.isTraceEnabled:()Z
            ifeq 9
         5: .line 181
            aload 3 /* rangesForKeyspace */
            invokeinterface com.google.common.collect.Multimap.entries:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 5
            goto 8
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
         6: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 4 /* entry */
        start local 4 // java.util.Map$Entry entry
         7: .line 182
            getstatic org.apache.cassandra.dht.RangeStreamer.logger:Lorg/slf4j/Logger;
            ldc "{}: range {} exists on {}"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.description:Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 4 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            aastore
            dup
            iconst_2
            aload 4 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            aastore
            invokeinterface org.slf4j.Logger.trace:(Ljava/lang/String;[Ljava/lang/Object;)V
        end local 4 // java.util.Map$Entry entry
         8: .line 181
      StackMap locals:
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
         9: .line 185
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection com.google.common.collect.Multimap
      StackMap stack:
            aload 3 /* rangesForKeyspace */
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.sourceFilters:Ljava/util/Set;
            aload 1 /* keyspaceName */
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.useStrictConsistency:Z
            invokestatic org.apache.cassandra.dht.RangeStreamer.getRangeFetchMap:(Lcom/google/common/collect/Multimap;Ljava/util/Collection;Ljava/lang/String;Z)Lcom/google/common/collect/Multimap;
            invokeinterface com.google.common.collect.Multimap.asMap:()Ljava/util/Map;
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 5
            goto 17
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
        10: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 4 /* entry */
        start local 4 // java.util.Map$Entry entry
        11: .line 187
            getstatic org.apache.cassandra.dht.RangeStreamer.logger:Lorg/slf4j/Logger;
            invokeinterface org.slf4j.Logger.isTraceEnabled:()Z
            ifeq 16
        12: .line 189
            aload 4 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.Collection
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 7
            goto 15
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection com.google.common.collect.Multimap java.util.Map$Entry java.util.Iterator top java.util.Iterator
      StackMap stack:
        13: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.dht.Range
            astore 6 /* r */
        start local 6 // org.apache.cassandra.dht.Range r
        14: .line 190
            getstatic org.apache.cassandra.dht.RangeStreamer.logger:Lorg/slf4j/Logger;
            ldc "{}: range {} from source {} for keyspace {}"
            iconst_4
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.description:Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 6 /* r */
            aastore
            dup
            iconst_2
            aload 4 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            aastore
            dup
            iconst_3
            aload 1 /* keyspaceName */
            aastore
            invokeinterface org.slf4j.Logger.trace:(Ljava/lang/String;[Ljava/lang/Object;)V
        end local 6 // org.apache.cassandra.dht.Range r
        15: .line 189
      StackMap locals:
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 13
        16: .line 192
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection com.google.common.collect.Multimap java.util.Map$Entry java.util.Iterator
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.toFetch:Lcom/google/common/collect/Multimap;
            aload 1 /* keyspaceName */
            aload 4 /* entry */
            invokeinterface com.google.common.collect.Multimap.put:(Ljava/lang/Object;Ljava/lang/Object;)Z
            pop
        end local 4 // java.util.Map$Entry entry
        17: .line 185
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 10
        18: .line 194
            return
        end local 3 // com.google.common.collect.Multimap rangesForKeyspace
        end local 2 // java.util.Collection ranges
        end local 1 // java.lang.String keyspaceName
        end local 0 // org.apache.cassandra.dht.RangeStreamer this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   19     0               this  Lorg/apache/cassandra/dht/RangeStreamer;
            0   19     1       keyspaceName  Ljava/lang/String;
            0   19     2             ranges  Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
            4   19     3  rangesForKeyspace  Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
            7    8     4              entry  Ljava/util/Map$Entry<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
           11   17     4              entry  Ljava/util/Map$Entry<Ljava/net/InetAddress;Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;>;
           14   15     6                  r  Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;
    Signature: (Ljava/lang/String;Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;)V
    MethodParameters:
              Name  Flags
      keyspaceName  
      ranges        

  private boolean useStrictSourcesForRanges(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.apache.cassandra.dht.RangeStreamer this
        start local 1 // java.lang.String keyspaceName
         0: .line 202
            aload 1 /* keyspaceName */
            invokestatic org.apache.cassandra.db.Keyspace.open:(Ljava/lang/String;)Lorg/apache/cassandra/db/Keyspace;
            invokevirtual org.apache.cassandra.db.Keyspace.getReplicationStrategy:()Lorg/apache/cassandra/locator/AbstractReplicationStrategy;
            astore 2 /* strat */
        start local 2 // org.apache.cassandra.locator.AbstractReplicationStrategy strat
         1: .line 203
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.useStrictConsistency:Z
            ifeq 5
         2: .line 204
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.tokens:Ljava/util/Collection;
            ifnull 5
         3: .line 205
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.metadata:Lorg/apache/cassandra/locator/TokenMetadata;
            invokevirtual org.apache.cassandra.locator.TokenMetadata.getAllEndpoints:()Ljava/util/Set;
            invokeinterface java.util.Set.size:()I
            aload 2 /* strat */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.getReplicationFactor:()I
            if_icmpeq 5
         4: .line 203
            iconst_1
            ireturn
      StackMap locals: org.apache.cassandra.locator.AbstractReplicationStrategy
      StackMap stack:
         5: iconst_0
            ireturn
        end local 2 // org.apache.cassandra.locator.AbstractReplicationStrategy strat
        end local 1 // java.lang.String keyspaceName
        end local 0 // org.apache.cassandra.dht.RangeStreamer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0          this  Lorg/apache/cassandra/dht/RangeStreamer;
            0    6     1  keyspaceName  Ljava/lang/String;
            1    6     2         strat  Lorg/apache/cassandra/locator/AbstractReplicationStrategy;
    MethodParameters:
              Name  Flags
      keyspaceName  

  private com.google.common.collect.Multimap<org.apache.cassandra.dht.Range<org.apache.cassandra.dht.Token>, java.net.InetAddress> getAllRangesWithSourcesFor(java.lang.String, java.util.Collection<org.apache.cassandra.dht.Range<org.apache.cassandra.dht.Token>>);
    descriptor: (Ljava/lang/String;Ljava/util/Collection;)Lcom/google/common/collect/Multimap;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=11, args_size=3
        start local 0 // org.apache.cassandra.dht.RangeStreamer this
        start local 1 // java.lang.String keyspaceName
        start local 2 // java.util.Collection desiredRanges
         0: .line 216
            aload 1 /* keyspaceName */
            invokestatic org.apache.cassandra.db.Keyspace.open:(Ljava/lang/String;)Lorg/apache/cassandra/db/Keyspace;
            invokevirtual org.apache.cassandra.db.Keyspace.getReplicationStrategy:()Lorg/apache/cassandra/locator/AbstractReplicationStrategy;
            astore 3 /* strat */
        start local 3 // org.apache.cassandra.locator.AbstractReplicationStrategy strat
         1: .line 217
            aload 3 /* strat */
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.metadata:Lorg/apache/cassandra/locator/TokenMetadata;
            invokevirtual org.apache.cassandra.locator.TokenMetadata.cloneOnlyTokenMap:()Lorg/apache/cassandra/locator/TokenMetadata;
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.getRangeAddresses:(Lorg/apache/cassandra/locator/TokenMetadata;)Lcom/google/common/collect/Multimap;
            astore 4 /* rangeAddresses */
        start local 4 // com.google.common.collect.Multimap rangeAddresses
         2: .line 219
            invokestatic com.google.common.collect.ArrayListMultimap.create:()Lcom/google/common/collect/ArrayListMultimap;
            astore 5 /* rangeSources */
        start local 5 // com.google.common.collect.Multimap rangeSources
         3: .line 220
            aload 2 /* desiredRanges */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 7
            goto 14
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
         4: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.dht.Range
            astore 6 /* desiredRange */
        start local 6 // org.apache.cassandra.dht.Range desiredRange
         5: .line 222
            aload 4 /* rangeAddresses */
            invokeinterface com.google.common.collect.Multimap.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 9
            goto 11
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator top java.util.Iterator
      StackMap stack:
         6: aload 9
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.dht.Range
            astore 8 /* range */
        start local 8 // org.apache.cassandra.dht.Range range
         7: .line 224
            aload 8 /* range */
            aload 6 /* desiredRange */
            invokevirtual org.apache.cassandra.dht.Range.contains:(Lorg/apache/cassandra/dht/Range;)Z
            ifeq 11
         8: .line 226
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.snitch:Lorg/apache/cassandra/locator/IEndpointSnitch;
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.address:Ljava/net/InetAddress;
            aload 4 /* rangeAddresses */
            aload 8 /* range */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            invokeinterface org.apache.cassandra.locator.IEndpointSnitch.getSortedListByProximity:(Ljava/net/InetAddress;Ljava/util/Collection;)Ljava/util/List;
            astore 10 /* preferred */
        start local 10 // java.util.List preferred
         9: .line 227
            aload 5 /* rangeSources */
            aload 6 /* desiredRange */
            aload 10 /* preferred */
            invokeinterface com.google.common.collect.Multimap.putAll:(Ljava/lang/Object;Ljava/lang/Iterable;)Z
            pop
        10: .line 228
            goto 12
        end local 10 // java.util.List preferred
        end local 8 // org.apache.cassandra.dht.Range range
        11: .line 222
      StackMap locals:
      StackMap stack:
            aload 9
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        12: .line 232
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator
      StackMap stack:
            aload 5 /* rangeSources */
            invokeinterface com.google.common.collect.Multimap.keySet:()Ljava/util/Set;
            aload 6 /* desiredRange */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifne 14
        13: .line 233
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "No sources found for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 6 /* desiredRange */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        end local 6 // org.apache.cassandra.dht.Range desiredRange
        14: .line 220
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 4
        15: .line 236
            aload 5 /* rangeSources */
            areturn
        end local 5 // com.google.common.collect.Multimap rangeSources
        end local 4 // com.google.common.collect.Multimap rangeAddresses
        end local 3 // org.apache.cassandra.locator.AbstractReplicationStrategy strat
        end local 2 // java.util.Collection desiredRanges
        end local 1 // java.lang.String keyspaceName
        end local 0 // org.apache.cassandra.dht.RangeStreamer this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   16     0            this  Lorg/apache/cassandra/dht/RangeStreamer;
            0   16     1    keyspaceName  Ljava/lang/String;
            0   16     2   desiredRanges  Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
            1   16     3           strat  Lorg/apache/cassandra/locator/AbstractReplicationStrategy;
            2   16     4  rangeAddresses  Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
            3   16     5    rangeSources  Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
            5   14     6    desiredRange  Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;
            7   11     8           range  Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;
            9   11    10       preferred  Ljava/util/List<Ljava/net/InetAddress;>;
    Signature: (Ljava/lang/String;Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;)Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
    MethodParameters:
               Name  Flags
      keyspaceName   
      desiredRanges  

  private com.google.common.collect.Multimap<org.apache.cassandra.dht.Range<org.apache.cassandra.dht.Token>, java.net.InetAddress> getAllRangesWithStrictSourcesFor(java.lang.String, java.util.Collection<org.apache.cassandra.dht.Range<org.apache.cassandra.dht.Token>>);
    descriptor: (Ljava/lang/String;Ljava/util/Collection;)Lcom/google/common/collect/Multimap;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=14, args_size=3
        start local 0 // org.apache.cassandra.dht.RangeStreamer this
        start local 1 // java.lang.String keyspace
        start local 2 // java.util.Collection desiredRanges
         0: .line 248
            getstatic org.apache.cassandra.dht.RangeStreamer.$assertionsDisabled:Z
            ifne 1
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.tokens:Ljava/util/Collection;
            ifnonnull 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 249
      StackMap locals:
      StackMap stack:
            aload 1 /* keyspace */
            invokestatic org.apache.cassandra.db.Keyspace.open:(Ljava/lang/String;)Lorg/apache/cassandra/db/Keyspace;
            invokevirtual org.apache.cassandra.db.Keyspace.getReplicationStrategy:()Lorg/apache/cassandra/locator/AbstractReplicationStrategy;
            astore 3 /* strat */
        start local 3 // org.apache.cassandra.locator.AbstractReplicationStrategy strat
         2: .line 252
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.metadata:Lorg/apache/cassandra/locator/TokenMetadata;
            invokevirtual org.apache.cassandra.locator.TokenMetadata.cloneOnlyTokenMap:()Lorg/apache/cassandra/locator/TokenMetadata;
            astore 4 /* metadataClone */
        start local 4 // org.apache.cassandra.locator.TokenMetadata metadataClone
         3: .line 253
            aload 3 /* strat */
            aload 4 /* metadataClone */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.getRangeAddresses:(Lorg/apache/cassandra/locator/TokenMetadata;)Lcom/google/common/collect/Multimap;
            astore 5 /* addressRanges */
        start local 5 // com.google.common.collect.Multimap addressRanges
         4: .line 256
            aload 4 /* metadataClone */
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.tokens:Ljava/util/Collection;
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.address:Ljava/net/InetAddress;
            invokevirtual org.apache.cassandra.locator.TokenMetadata.updateNormalTokens:(Ljava/util/Collection;Ljava/net/InetAddress;)V
         5: .line 257
            aload 3 /* strat */
            aload 4 /* metadataClone */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.getRangeAddresses:(Lorg/apache/cassandra/locator/TokenMetadata;)Lcom/google/common/collect/Multimap;
            astore 6 /* pendingRangeAddresses */
        start local 6 // com.google.common.collect.Multimap pendingRangeAddresses
         6: .line 260
            invokestatic com.google.common.collect.ArrayListMultimap.create:()Lcom/google/common/collect/ArrayListMultimap;
            astore 7 /* rangeSources */
        start local 7 // com.google.common.collect.Multimap rangeSources
         7: .line 262
            aload 2 /* desiredRanges */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 9
            goto 30
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection org.apache.cassandra.locator.AbstractReplicationStrategy org.apache.cassandra.locator.TokenMetadata com.google.common.collect.Multimap com.google.common.collect.Multimap com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
         8: aload 9
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.dht.Range
            astore 8 /* desiredRange */
        start local 8 // org.apache.cassandra.dht.Range desiredRange
         9: .line 264
            aload 5 /* addressRanges */
            invokeinterface com.google.common.collect.Multimap.asMap:()Ljava/util/Map;
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 11
            goto 18
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection org.apache.cassandra.locator.AbstractReplicationStrategy org.apache.cassandra.locator.TokenMetadata com.google.common.collect.Multimap com.google.common.collect.Multimap com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator top java.util.Iterator
      StackMap stack:
        10: aload 11
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 10 /* preEntry */
        start local 10 // java.util.Map$Entry preEntry
        11: .line 266
            aload 10 /* preEntry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast org.apache.cassandra.dht.Range
            aload 8 /* desiredRange */
            invokevirtual org.apache.cassandra.dht.Range.contains:(Lorg/apache/cassandra/dht/Range;)Z
            ifeq 18
        12: .line 268
            aload 10 /* preEntry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.lang.Iterable
            invokestatic com.google.common.collect.Sets.newHashSet:(Ljava/lang/Iterable;)Ljava/util/HashSet;
            astore 12 /* oldEndpoints */
        start local 12 // java.util.Set oldEndpoints
        13: .line 269
            aload 6 /* pendingRangeAddresses */
            aload 8 /* desiredRange */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            invokestatic com.google.common.collect.Sets.newHashSet:(Ljava/lang/Iterable;)Ljava/util/HashSet;
            astore 13 /* newEndpoints */
        start local 13 // java.util.Set newEndpoints
        14: .line 273
            aload 12 /* oldEndpoints */
            invokeinterface java.util.Set.size:()I
            aload 3 /* strat */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.getReplicationFactor:()I
            if_icmpne 17
        15: .line 275
            aload 12 /* oldEndpoints */
            aload 13 /* newEndpoints */
            invokeinterface java.util.Set.removeAll:(Ljava/util/Collection;)Z
            pop
        16: .line 276
            getstatic org.apache.cassandra.dht.RangeStreamer.$assertionsDisabled:Z
            ifne 17
            aload 12 /* oldEndpoints */
            invokeinterface java.util.Set.size:()I
            iconst_1
            if_icmpeq 17
            new java.lang.AssertionError
            dup
            new java.lang.StringBuilder
            dup
            ldc "Expected 1 endpoint but found "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 12 /* oldEndpoints */
            invokeinterface java.util.Set.size:()I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        17: .line 279
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection org.apache.cassandra.locator.AbstractReplicationStrategy org.apache.cassandra.locator.TokenMetadata com.google.common.collect.Multimap com.google.common.collect.Multimap com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator java.util.Map$Entry java.util.Iterator java.util.Set java.util.Set
      StackMap stack:
            aload 7 /* rangeSources */
            aload 8 /* desiredRange */
            aload 12 /* oldEndpoints */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.net.InetAddress
            invokeinterface com.google.common.collect.Multimap.put:(Ljava/lang/Object;Ljava/lang/Object;)Z
            pop
        end local 13 // java.util.Set newEndpoints
        end local 12 // java.util.Set oldEndpoints
        end local 10 // java.util.Map$Entry preEntry
        18: .line 264
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection org.apache.cassandra.locator.AbstractReplicationStrategy org.apache.cassandra.locator.TokenMetadata com.google.common.collect.Multimap com.google.common.collect.Multimap com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator top java.util.Iterator
      StackMap stack:
            aload 11
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 10
        19: .line 284
            aload 7 /* rangeSources */
            aload 8 /* desiredRange */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            astore 10 /* addressList */
        start local 10 // java.util.Collection addressList
        20: .line 285
            aload 10 /* addressList */
            ifnull 21
            aload 10 /* addressList */
            invokeinterface java.util.Collection.isEmpty:()Z
            ifeq 22
        21: .line 286
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection org.apache.cassandra.locator.AbstractReplicationStrategy org.apache.cassandra.locator.TokenMetadata com.google.common.collect.Multimap com.google.common.collect.Multimap com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator java.util.Collection
      StackMap stack:
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "No sources found for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 8 /* desiredRange */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        22: .line 288
      StackMap locals:
      StackMap stack:
            aload 10 /* addressList */
            invokeinterface java.util.Collection.size:()I
            iconst_1
            if_icmple 24
        23: .line 289
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Multiple endpoints found for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 8 /* desiredRange */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        24: .line 291
      StackMap locals:
      StackMap stack:
            aload 10 /* addressList */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.net.InetAddress
            astore 11 /* sourceIp */
        start local 11 // java.net.InetAddress sourceIp
        25: .line 292
            getstatic org.apache.cassandra.gms.Gossiper.instance:Lorg/apache/cassandra/gms/Gossiper;
            aload 11 /* sourceIp */
            invokevirtual org.apache.cassandra.gms.Gossiper.getEndpointStateForEndpoint:(Ljava/net/InetAddress;)Lorg/apache/cassandra/gms/EndpointState;
            astore 12 /* sourceState */
        start local 12 // org.apache.cassandra.gms.EndpointState sourceState
        26: .line 293
            getstatic org.apache.cassandra.gms.Gossiper.instance:Lorg/apache/cassandra/gms/Gossiper;
            invokevirtual org.apache.cassandra.gms.Gossiper.isEnabled:()Z
            ifeq 30
            aload 12 /* sourceState */
            ifnull 27
            aload 12 /* sourceState */
            invokevirtual org.apache.cassandra.gms.EndpointState.isAlive:()Z
            ifne 30
        27: .line 294
      StackMap locals: java.net.InetAddress org.apache.cassandra.gms.EndpointState
      StackMap stack:
            new java.lang.RuntimeException
            dup
            new java.lang.StringBuilder
            dup
            ldc "A node required to move the data consistently is down ("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 11 /* sourceIp */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "). "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        28: .line 295
            ldc "If you wish to move the data from a potentially inconsistent replica, restart the node with -Dcassandra.consistent.rangemovement=false"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        29: .line 294
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        end local 12 // org.apache.cassandra.gms.EndpointState sourceState
        end local 11 // java.net.InetAddress sourceIp
        end local 10 // java.util.Collection addressList
        end local 8 // org.apache.cassandra.dht.Range desiredRange
        30: .line 262
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.lang.String java.util.Collection org.apache.cassandra.locator.AbstractReplicationStrategy org.apache.cassandra.locator.TokenMetadata com.google.common.collect.Multimap com.google.common.collect.Multimap com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
            aload 9
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        31: .line 298
            aload 7 /* rangeSources */
            areturn
        end local 7 // com.google.common.collect.Multimap rangeSources
        end local 6 // com.google.common.collect.Multimap pendingRangeAddresses
        end local 5 // com.google.common.collect.Multimap addressRanges
        end local 4 // org.apache.cassandra.locator.TokenMetadata metadataClone
        end local 3 // org.apache.cassandra.locator.AbstractReplicationStrategy strat
        end local 2 // java.util.Collection desiredRanges
        end local 1 // java.lang.String keyspace
        end local 0 // org.apache.cassandra.dht.RangeStreamer this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   32     0                   this  Lorg/apache/cassandra/dht/RangeStreamer;
            0   32     1               keyspace  Ljava/lang/String;
            0   32     2          desiredRanges  Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
            2   32     3                  strat  Lorg/apache/cassandra/locator/AbstractReplicationStrategy;
            3   32     4          metadataClone  Lorg/apache/cassandra/locator/TokenMetadata;
            4   32     5          addressRanges  Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
            6   32     6  pendingRangeAddresses  Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
            7   32     7           rangeSources  Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
            9   30     8           desiredRange  Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;
           11   18    10               preEntry  Ljava/util/Map$Entry<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/util/Collection<Ljava/net/InetAddress;>;>;
           13   18    12           oldEndpoints  Ljava/util/Set<Ljava/net/InetAddress;>;
           14   18    13           newEndpoints  Ljava/util/Set<Ljava/net/InetAddress;>;
           20   30    10            addressList  Ljava/util/Collection<Ljava/net/InetAddress;>;
           25   30    11               sourceIp  Ljava/net/InetAddress;
           26   30    12            sourceState  Lorg/apache/cassandra/gms/EndpointState;
    Signature: (Ljava/lang/String;Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;)Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
    MethodParameters:
               Name  Flags
      keyspace       
      desiredRanges  

  private static com.google.common.collect.Multimap<java.net.InetAddress, org.apache.cassandra.dht.Range<org.apache.cassandra.dht.Token>> getRangeFetchMap(com.google.common.collect.Multimap<org.apache.cassandra.dht.Range<org.apache.cassandra.dht.Token>, java.net.InetAddress>, java.util.Collection<org.apache.cassandra.dht.RangeStreamer$ISourceFilter>, java.lang.String, boolean);
    descriptor: (Lcom/google/common/collect/Multimap;Ljava/util/Collection;Ljava/lang/String;Z)Lcom/google/common/collect/Multimap;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=12, args_size=4
        start local 0 // com.google.common.collect.Multimap rangesWithSources
        start local 1 // java.util.Collection sourceFilters
        start local 2 // java.lang.String keyspace
        start local 3 // boolean useStrictConsistency
         0: .line 312
            invokestatic com.google.common.collect.HashMultimap.create:()Lcom/google/common/collect/HashMultimap;
            astore 4 /* rangeFetchMapMap */
        start local 4 // com.google.common.collect.Multimap rangeFetchMapMap
         1: .line 313
            aload 0 /* rangesWithSources */
            invokeinterface com.google.common.collect.Multimap.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 6
            goto 30
      StackMap locals: com.google.common.collect.Multimap java.util.Collection java.lang.String int com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
         2: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.dht.Range
            astore 5 /* range */
        start local 5 // org.apache.cassandra.dht.Range range
         3: .line 315
            iconst_0
            istore 7 /* foundSource */
        start local 7 // boolean foundSource
         4: .line 318
            aload 0 /* rangesWithSources */
            aload 5 /* range */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 9
            goto 17
      StackMap locals: com.google.common.collect.Multimap java.util.Collection java.lang.String int com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator int top java.util.Iterator
      StackMap stack:
         5: aload 9
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.net.InetAddress
            astore 8 /* address */
        start local 8 // java.net.InetAddress address
         6: .line 320
            aload 1 /* sourceFilters */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 11
            goto 10
      StackMap locals: com.google.common.collect.Multimap java.util.Collection java.lang.String int com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator int java.net.InetAddress java.util.Iterator top java.util.Iterator
      StackMap stack:
         7: aload 11
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.dht.RangeStreamer$ISourceFilter
            astore 10 /* filter */
        start local 10 // org.apache.cassandra.dht.RangeStreamer$ISourceFilter filter
         8: .line 322
            aload 10 /* filter */
            aload 8 /* address */
            invokeinterface org.apache.cassandra.dht.RangeStreamer$ISourceFilter.shouldInclude:(Ljava/net/InetAddress;)Z
            ifne 10
         9: .line 323
            goto 17
        end local 10 // org.apache.cassandra.dht.RangeStreamer$ISourceFilter filter
        10: .line 320
      StackMap locals:
      StackMap stack:
            aload 11
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 7
        11: .line 326
            aload 8 /* address */
            invokestatic org.apache.cassandra.utils.FBUtilities.getBroadcastAddress:()Ljava/net/InetAddress;
            invokevirtual java.net.InetAddress.equals:(Ljava/lang/Object;)Z
            ifeq 14
        12: .line 329
            iconst_1
            istore 7 /* foundSource */
        13: .line 330
            goto 17
        14: .line 333
      StackMap locals: com.google.common.collect.Multimap java.util.Collection java.lang.String int com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator int java.net.InetAddress java.util.Iterator
      StackMap stack:
            aload 4 /* rangeFetchMapMap */
            aload 8 /* address */
            aload 5 /* range */
            invokeinterface com.google.common.collect.Multimap.put:(Ljava/lang/Object;Ljava/lang/Object;)Z
            pop
        15: .line 334
            iconst_1
            istore 7 /* foundSource */
        16: .line 335
            goto 18
        end local 8 // java.net.InetAddress address
        17: .line 318
      StackMap locals: com.google.common.collect.Multimap java.util.Collection java.lang.String int com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator int top java.util.Iterator
      StackMap stack:
            aload 9
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 5
        18: .line 338
      StackMap locals: com.google.common.collect.Multimap java.util.Collection java.lang.String int com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator int
      StackMap stack:
            iload 7 /* foundSource */
            ifne 30
        19: .line 340
            aload 2 /* keyspace */
            invokestatic org.apache.cassandra.db.Keyspace.open:(Ljava/lang/String;)Lorg/apache/cassandra/db/Keyspace;
            invokevirtual org.apache.cassandra.db.Keyspace.getReplicationStrategy:()Lorg/apache/cassandra/locator/AbstractReplicationStrategy;
            astore 8 /* strat */
        start local 8 // org.apache.cassandra.locator.AbstractReplicationStrategy strat
        20: .line 341
            aload 8 /* strat */
            ifnull 29
            aload 8 /* strat */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.getReplicationFactor:()I
            iconst_1
            if_icmpne 29
        21: .line 343
            iload 3 /* useStrictConsistency */
            ifeq 25
        22: .line 344
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Unable to find sufficient sources for streaming range "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* range */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " in keyspace "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* keyspace */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc " with RF=1. "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        23: .line 345
            ldc "Ensure this keyspace contains replicas in the source datacenter."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        24: .line 344
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        25: .line 347
      StackMap locals: org.apache.cassandra.locator.AbstractReplicationStrategy
      StackMap stack:
            getstatic org.apache.cassandra.dht.RangeStreamer.logger:Lorg/slf4j/Logger;
            ldc "Unable to find sufficient sources for streaming range {} in keyspace {} with RF=1. Keyspace might be missing data."
        26: .line 348
            aload 5 /* range */
            aload 2 /* keyspace */
        27: .line 347
            invokeinterface org.slf4j.Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        28: .line 349
            goto 30
        29: .line 351
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Unable to find sufficient sources for streaming range "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* range */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " in keyspace "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* keyspace */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        end local 8 // org.apache.cassandra.locator.AbstractReplicationStrategy strat
        end local 7 // boolean foundSource
        end local 5 // org.apache.cassandra.dht.Range range
        30: .line 313
      StackMap locals: com.google.common.collect.Multimap java.util.Collection java.lang.String int com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
        31: .line 355
            aload 4 /* rangeFetchMapMap */
            areturn
        end local 4 // com.google.common.collect.Multimap rangeFetchMapMap
        end local 3 // boolean useStrictConsistency
        end local 2 // java.lang.String keyspace
        end local 1 // java.util.Collection sourceFilters
        end local 0 // com.google.common.collect.Multimap rangesWithSources
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   32     0     rangesWithSources  Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
            0   32     1         sourceFilters  Ljava/util/Collection<Lorg/apache/cassandra/dht/RangeStreamer$ISourceFilter;>;
            0   32     2              keyspace  Ljava/lang/String;
            0   32     3  useStrictConsistency  Z
            1   32     4      rangeFetchMapMap  Lcom/google/common/collect/Multimap<Ljava/net/InetAddress;Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
            3   30     5                 range  Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;
            4   30     7           foundSource  Z
            6   17     8               address  Ljava/net/InetAddress;
            8   10    10                filter  Lorg/apache/cassandra/dht/RangeStreamer$ISourceFilter;
           20   30     8                 strat  Lorg/apache/cassandra/locator/AbstractReplicationStrategy;
    Signature: (Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;Ljava/util/Collection<Lorg/apache/cassandra/dht/RangeStreamer$ISourceFilter;>;Ljava/lang/String;Z)Lcom/google/common/collect/Multimap<Ljava/net/InetAddress;Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
    MethodParameters:
                      Name  Flags
      rangesWithSources     
      sourceFilters         
      keyspace              
      useStrictConsistency  

  public static com.google.common.collect.Multimap<java.net.InetAddress, org.apache.cassandra.dht.Range<org.apache.cassandra.dht.Token>> getWorkMap(com.google.common.collect.Multimap<org.apache.cassandra.dht.Range<org.apache.cassandra.dht.Token>, java.net.InetAddress>, java.lang.String, org.apache.cassandra.gms.IFailureDetector, boolean);
    descriptor: (Lcom/google/common/collect/Multimap;Ljava/lang/String;Lorg/apache/cassandra/gms/IFailureDetector;Z)Lcom/google/common/collect/Multimap;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.google.common.collect.Multimap rangesWithSourceTarget
        start local 1 // java.lang.String keyspace
        start local 2 // org.apache.cassandra.gms.IFailureDetector fd
        start local 3 // boolean useStrictConsistency
         0: .line 361
            aload 0 /* rangesWithSourceTarget */
            new org.apache.cassandra.dht.RangeStreamer$FailureDetectorSourceFilter
            dup
            aload 2 /* fd */
            invokespecial org.apache.cassandra.dht.RangeStreamer$FailureDetectorSourceFilter.<init>:(Lorg/apache/cassandra/gms/IFailureDetector;)V
            invokestatic java.util.Collections.singleton:(Ljava/lang/Object;)Ljava/util/Set;
            aload 1 /* keyspace */
            iload 3 /* useStrictConsistency */
            invokestatic org.apache.cassandra.dht.RangeStreamer.getRangeFetchMap:(Lcom/google/common/collect/Multimap;Ljava/util/Collection;Ljava/lang/String;Z)Lcom/google/common/collect/Multimap;
            areturn
        end local 3 // boolean useStrictConsistency
        end local 2 // org.apache.cassandra.gms.IFailureDetector fd
        end local 1 // java.lang.String keyspace
        end local 0 // com.google.common.collect.Multimap rangesWithSourceTarget
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0    1     0  rangesWithSourceTarget  Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
            0    1     1                keyspace  Ljava/lang/String;
            0    1     2                      fd  Lorg/apache/cassandra/gms/IFailureDetector;
            0    1     3    useStrictConsistency  Z
    Signature: (Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;Ljava/lang/String;Lorg/apache/cassandra/gms/IFailureDetector;Z)Lcom/google/common/collect/Multimap<Ljava/net/InetAddress;Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
    MethodParameters:
                        Name  Flags
      rangesWithSourceTarget  
      keyspace                
      fd                      
      useStrictConsistency    

  com.google.common.collect.Multimap<java.lang.String, java.util.Map$Entry<java.net.InetAddress, java.util.Collection<org.apache.cassandra.dht.Range<org.apache.cassandra.dht.Token>>>> toFetch();
    descriptor: ()Lcom/google/common/collect/Multimap;
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.cassandra.dht.RangeStreamer this
         0: .line 368
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.toFetch:Lcom/google/common/collect/Multimap;
            areturn
        end local 0 // org.apache.cassandra.dht.RangeStreamer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/cassandra/dht/RangeStreamer;
    Signature: ()Lcom/google/common/collect/Multimap<Ljava/lang/String;Ljava/util/Map$Entry<Ljava/net/InetAddress;Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;>;>;
    RuntimeInvisibleAnnotations: 
      com.google.common.annotations.VisibleForTesting()
    RuntimeInvisibleTypeAnnotations: 
      METHOD_RETURN
        com.google.common.annotations.VisibleForTesting()

  public org.apache.cassandra.streaming.StreamResultFuture fetchAsync();
    descriptor: ()Lorg/apache/cassandra/streaming/StreamResultFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=8, args_size=1
        start local 0 // org.apache.cassandra.dht.RangeStreamer this
         0: .line 373
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.toFetch:Lcom/google/common/collect/Multimap;
            invokeinterface com.google.common.collect.Multimap.entries:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 2
            goto 12
      StackMap locals: org.apache.cassandra.dht.RangeStreamer top java.util.Iterator
      StackMap stack:
         1: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 1 /* entry */
        start local 1 // java.util.Map$Entry entry
         2: .line 375
            aload 1 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 3 /* keyspace */
        start local 3 // java.lang.String keyspace
         3: .line 376
            aload 1 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.net.InetAddress
            astore 4 /* source */
        start local 4 // java.net.InetAddress source
         4: .line 377
            aload 4 /* source */
            invokestatic org.apache.cassandra.db.SystemKeyspace.getPreferredIP:(Ljava/net/InetAddress;)Ljava/net/InetAddress;
            astore 5 /* preferred */
        start local 5 // java.net.InetAddress preferred
         5: .line 378
            aload 1 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.Collection
            astore 6 /* ranges */
        start local 6 // java.util.Collection ranges
         6: .line 381
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.stateStore:Lorg/apache/cassandra/dht/StreamStateStore;
            aload 3 /* keyspace */
            getstatic org.apache.cassandra.service.StorageService.instance:Lorg/apache/cassandra/service/StorageService;
            invokevirtual org.apache.cassandra.service.StorageService.getTokenMetadata:()Lorg/apache/cassandra/locator/TokenMetadata;
            getfield org.apache.cassandra.locator.TokenMetadata.partitioner:Lorg/apache/cassandra/dht/IPartitioner;
            invokevirtual org.apache.cassandra.dht.StreamStateStore.getAvailableRanges:(Ljava/lang/String;Lorg/apache/cassandra/dht/IPartitioner;)Ljava/util/Set;
            astore 7 /* availableRanges */
        start local 7 // java.util.Set availableRanges
         7: .line 382
            aload 6 /* ranges */
            aload 7 /* availableRanges */
            invokeinterface java.util.Collection.removeAll:(Ljava/util/Collection;)Z
            ifeq 9
         8: .line 384
            getstatic org.apache.cassandra.dht.RangeStreamer.logger:Lorg/slf4j/Logger;
            ldc "Some ranges of {} are already available. Skipping streaming those ranges."
            aload 7 /* availableRanges */
            invokeinterface org.slf4j.Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
         9: .line 387
      StackMap locals: org.apache.cassandra.dht.RangeStreamer java.util.Map$Entry java.util.Iterator java.lang.String java.net.InetAddress java.net.InetAddress java.util.Collection java.util.Set
      StackMap stack:
            getstatic org.apache.cassandra.dht.RangeStreamer.logger:Lorg/slf4j/Logger;
            invokeinterface org.slf4j.Logger.isTraceEnabled:()Z
            ifeq 11
        10: .line 388
            getstatic org.apache.cassandra.dht.RangeStreamer.logger:Lorg/slf4j/Logger;
            ldc "{}ing from {} ranges {}"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.description:Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 4 /* source */
            aastore
            dup
            iconst_2
            aload 6 /* ranges */
            ldc ", "
            invokestatic org.apache.commons.lang3.StringUtils.join:(Ljava/lang/Iterable;Ljava/lang/String;)Ljava/lang/String;
            aastore
            invokeinterface org.slf4j.Logger.trace:(Ljava/lang/String;[Ljava/lang/Object;)V
        11: .line 390
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.streamPlan:Lorg/apache/cassandra/streaming/StreamPlan;
            aload 4 /* source */
            aload 5 /* preferred */
            aload 3 /* keyspace */
            aload 6 /* ranges */
            invokevirtual org.apache.cassandra.streaming.StreamPlan.requestRanges:(Ljava/net/InetAddress;Ljava/net/InetAddress;Ljava/lang/String;Ljava/util/Collection;)Lorg/apache/cassandra/streaming/StreamPlan;
            pop
        end local 7 // java.util.Set availableRanges
        end local 6 // java.util.Collection ranges
        end local 5 // java.net.InetAddress preferred
        end local 4 // java.net.InetAddress source
        end local 3 // java.lang.String keyspace
        end local 1 // java.util.Map$Entry entry
        12: .line 373
      StackMap locals: org.apache.cassandra.dht.RangeStreamer top java.util.Iterator
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
        13: .line 393
            aload 0 /* this */
            getfield org.apache.cassandra.dht.RangeStreamer.streamPlan:Lorg/apache/cassandra/streaming/StreamPlan;
            invokevirtual org.apache.cassandra.streaming.StreamPlan.execute:()Lorg/apache/cassandra/streaming/StreamResultFuture;
            areturn
        end local 0 // org.apache.cassandra.dht.RangeStreamer this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   14     0             this  Lorg/apache/cassandra/dht/RangeStreamer;
            2   12     1            entry  Ljava/util/Map$Entry<Ljava/lang/String;Ljava/util/Map$Entry<Ljava/net/InetAddress;Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;>;>;
            3   12     3         keyspace  Ljava/lang/String;
            4   12     4           source  Ljava/net/InetAddress;
            5   12     5        preferred  Ljava/net/InetAddress;
            6   12     6           ranges  Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
            7   12     7  availableRanges  Ljava/util/Set<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
}
SourceFile: "RangeStreamer.java"
NestMembers:
  org.apache.cassandra.dht.RangeStreamer$ExcludeLocalNodeFilter  org.apache.cassandra.dht.RangeStreamer$FailureDetectorSourceFilter  org.apache.cassandra.dht.RangeStreamer$ISourceFilter  org.apache.cassandra.dht.RangeStreamer$SingleDatacenterFilter  org.apache.cassandra.dht.RangeStreamer$WhitelistedSourcesFilter
InnerClasses:
  public abstract Entry = java.util.Map$Entry of java.util.Map
  public ExcludeLocalNodeFilter = org.apache.cassandra.dht.RangeStreamer$ExcludeLocalNodeFilter of org.apache.cassandra.dht.RangeStreamer
  public FailureDetectorSourceFilter = org.apache.cassandra.dht.RangeStreamer$FailureDetectorSourceFilter of org.apache.cassandra.dht.RangeStreamer
  public abstract ISourceFilter = org.apache.cassandra.dht.RangeStreamer$ISourceFilter of org.apache.cassandra.dht.RangeStreamer
  public SingleDatacenterFilter = org.apache.cassandra.dht.RangeStreamer$SingleDatacenterFilter of org.apache.cassandra.dht.RangeStreamer
  public WhitelistedSourcesFilter = org.apache.cassandra.dht.RangeStreamer$WhitelistedSourcesFilter of org.apache.cassandra.dht.RangeStreamer