CrackMe.apk
Download file
package com.google.common.util.concurrent;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import java.io.Serializable;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import javax.annotation.CheckForNull;
@ElementTypesAreNonnullByDefault
public final class AtomicLongMap<K> implements Serializable {
@CheckForNull
private transient Map<K, Long> asMap;
private final ConcurrentHashMap<K, AtomicLong> map;
private AtomicLongMap(ConcurrentHashMap<K, AtomicLong> concurrentHashMap) {
this.map = (ConcurrentHashMap) Preconditions.checkNotNull(concurrentHashMap);
}
public static <K> AtomicLongMap<K> create() {
return new AtomicLongMap<>(new ConcurrentHashMap());
}
public static <K> AtomicLongMap<K> create(Map<? extends K, ? extends Long> map2) {
AtomicLongMap<K> create = create();
create.putAll(map2);
return create;
}
public long get(K k) {
AtomicLong atomicLong = this.map.get(k);
if (atomicLong == null) {
return 0;
}
return atomicLong.get();
}
public long incrementAndGet(K k) {
return addAndGet(k, 1);
}
public long decrementAndGet(K k) {
return addAndGet(k, -1);
}
public long addAndGet(K k, long j) {
AtomicLong atomicLong;
do {
atomicLong = this.map.get(k);
if (atomicLong == null && (atomicLong = this.map.putIfAbsent(k, new AtomicLong(j))) == null) {
return j;
}
while (true) {
long j2 = atomicLong.get();
if (j2 != 0) {
long j3 = j2 + j;
if (atomicLong.compareAndSet(j2, j3)) {
return j3;
}
}
}
} while (!this.map.replace(k, atomicLong, new AtomicLong(j)));
return j;
}
public long getAndIncrement(K k) {
return getAndAdd(k, 1);
}
public long getAndDecrement(K k) {
return getAndAdd(k, -1);
}
public long getAndAdd(K k, long j) {
AtomicLong atomicLong;
do {
atomicLong = this.map.get(k);
if (atomicLong == null && (atomicLong = this.map.putIfAbsent(k, new AtomicLong(j))) == null) {
return 0;
}
while (true) {
long j2 = atomicLong.get();
if (j2 != 0) {
if (atomicLong.compareAndSet(j2, j2 + j)) {
return j2;
}
}
}
} while (!this.map.replace(k, atomicLong, new AtomicLong(j)));
return 0;
}
public long put(K k, long j) {
AtomicLong atomicLong;
do {
atomicLong = this.map.get(k);
if (atomicLong == null && (atomicLong = this.map.putIfAbsent(k, new AtomicLong(j))) == null) {
return 0;
}
while (true) {
long j2 = atomicLong.get();
if (j2 != 0) {
if (atomicLong.compareAndSet(j2, j)) {
return j2;
}
}
}
} while (!this.map.replace(k, atomicLong, new AtomicLong(j)));
return 0;
}
public void putAll(Map<? extends K, ? extends Long> map2) {
for (Map.Entry next : map2.entrySet()) {
put(next.getKey(), ((Long) next.getValue()).longValue());
}
}
public long remove(K k) {
long j;
AtomicLong atomicLong = this.map.get(k);
if (atomicLong == null) {
return 0;
}
do {
j = atomicLong.get();
if (j == 0 || atomicLong.compareAndSet(j, 0)) {
this.map.remove(k, atomicLong);
}
j = atomicLong.get();
break;
} while (atomicLong.compareAndSet(j, 0));
this.map.remove(k, atomicLong);
return j;
}
/* access modifiers changed from: package-private */
public boolean remove(K k, long j) {
AtomicLong atomicLong = this.map.get(k);
if (atomicLong == null) {
return false;
}
long j2 = atomicLong.get();
if (j2 != j) {
return false;
}
if (j2 != 0 && !atomicLong.compareAndSet(j2, 0)) {
return false;
}
this.map.remove(k, atomicLong);
return true;
}
public boolean removeIfZero(K k) {
return remove(k, 0);
}
public void removeAllZeros() {
Iterator<Map.Entry<K, AtomicLong>> it = this.map.entrySet().iterator();
while (it.hasNext()) {
AtomicLong atomicLong = (AtomicLong) it.next().getValue();
if (atomicLong != null && atomicLong.get() == 0) {
it.remove();
}
}
}
public long sum() {
long j = 0;
for (AtomicLong atomicLong : this.map.values()) {
j += atomicLong.get();
}
return j;
}
public Map<K, Long> asMap() {
Map<K, Long> map2 = this.asMap;
if (map2 != null) {
return map2;
}
Map<K, Long> createAsMap = createAsMap();
this.asMap = createAsMap;
return createAsMap;
}
private Map<K, Long> createAsMap() {
return Collections.unmodifiableMap(Maps.transformValues(this.map, new Function<AtomicLong, Long>(this) {
public Long apply(AtomicLong atomicLong) {
return Long.valueOf(atomicLong.get());
}
}));
}
public boolean containsKey(Object obj) {
return this.map.containsKey(obj);
}
public int size() {
return this.map.size();
}
public boolean isEmpty() {
return this.map.isEmpty();
}
public void clear() {
this.map.clear();
}
public String toString() {
return this.map.toString();
}
/* access modifiers changed from: package-private */
public long putIfAbsent(K k, long j) {
AtomicLong atomicLong;
do {
atomicLong = this.map.get(k);
if (atomicLong == null && (atomicLong = this.map.putIfAbsent(k, new AtomicLong(j))) == null) {
return 0;
}
long j2 = atomicLong.get();
if (j2 != 0) {
return j2;
}
} while (!this.map.replace(k, atomicLong, new AtomicLong(j)));
return 0;
}
/* access modifiers changed from: package-private */
public boolean replace(K k, long j, long j2) {
if (j == 0) {
return putIfAbsent(k, j2) == 0;
}
AtomicLong atomicLong = this.map.get(k);
if (atomicLong == null) {
return false;
}
return atomicLong.compareAndSet(j, j2);
}
}
Download file