CrackMe.apk
Download file
package kotlin.reflect.jvm.internal.pcollections;
final class IntTree<V> {
static final IntTree<Object> EMPTYNODE = new IntTree<>();
private final long key;
private final IntTree<V> left;
private final IntTree<V> right;
private final int size;
private final V value;
private IntTree() {
this.size = 0;
this.key = 0;
this.value = null;
this.left = null;
this.right = null;
}
private IntTree(long j, V v, IntTree<V> intTree, IntTree<V> intTree2) {
this.key = j;
this.value = v;
this.left = intTree;
this.right = intTree2;
this.size = intTree.size + 1 + intTree2.size;
}
private IntTree<V> withKey(long j) {
if (this.size == 0 || j == this.key) {
return this;
}
return new IntTree(j, this.value, this.left, this.right);
}
/* access modifiers changed from: package-private */
public V get(long j) {
if (this.size == 0) {
return null;
}
long j2 = this.key;
if (j < j2) {
return this.left.get(j - j2);
}
if (j > j2) {
return this.right.get(j - j2);
}
return this.value;
}
/* access modifiers changed from: package-private */
public IntTree<V> plus(long j, V v) {
if (this.size == 0) {
return new IntTree(j, v, this, this);
}
long j2 = this.key;
if (j < j2) {
return rebalanced(this.left.plus(j - j2, v), this.right);
}
if (j > j2) {
return rebalanced(this.left, this.right.plus(j - j2, v));
}
if (v == this.value) {
return this;
}
return new IntTree(j, v, this.left, this.right);
}
/* access modifiers changed from: package-private */
public IntTree<V> minus(long j) {
if (this.size == 0) {
return this;
}
long j2 = this.key;
if (j < j2) {
return rebalanced(this.left.minus(j - j2), this.right);
}
if (j > j2) {
return rebalanced(this.left, this.right.minus(j - j2));
}
IntTree<V> intTree = this.left;
if (intTree.size == 0) {
IntTree<V> intTree2 = this.right;
return intTree2.withKey(intTree2.key + j2);
}
IntTree<V> intTree3 = this.right;
if (intTree3.size == 0) {
return intTree.withKey(intTree.key + j2);
}
long minKey = intTree3.minKey();
long j3 = this.key;
long j4 = minKey + j3;
V v = this.right.get(j4 - j3);
IntTree<V> minus = this.right.minus(j4 - this.key);
IntTree<V> withKey = minus.withKey((minus.key + this.key) - j4);
IntTree<V> intTree4 = this.left;
return rebalanced(j4, v, intTree4.withKey((intTree4.key + this.key) - j4), withKey);
}
private long minKey() {
IntTree<V> intTree = this.left;
if (intTree.size == 0) {
return this.key;
}
return intTree.minKey() + this.key;
}
private IntTree<V> rebalanced(IntTree<V> intTree, IntTree<V> intTree2) {
if (intTree == this.left && intTree2 == this.right) {
return this;
}
return rebalanced(this.key, this.value, intTree, intTree2);
}
private static <V> IntTree<V> rebalanced(long j, V v, IntTree<V> intTree, IntTree<V> intTree2) {
IntTree<V> intTree3 = intTree;
int i = intTree3.size;
int i2 = intTree2.size;
if (i + i2 > 1) {
if (i >= i2 * 5) {
IntTree<V> intTree4 = intTree3.left;
IntTree<V> intTree5 = intTree3.right;
if (intTree5.size < intTree4.size * 2) {
long j2 = intTree3.key + j;
V v2 = intTree3.value;
long j3 = intTree3.key;
return new IntTree(j2, v2, intTree4, new IntTree(-j3, v, intTree5.withKey(intTree5.key + j3), intTree2));
}
IntTree<V> intTree6 = intTree5.left;
IntTree<V> intTree7 = intTree5.right;
long j4 = intTree5.key + intTree3.key + j;
V v3 = intTree5.value;
long j5 = intTree5.key;
V v4 = v3;
IntTree intTree8 = new IntTree(-j5, intTree3.value, intTree4, intTree6.withKey(intTree6.key + j5));
long j6 = intTree3.key;
long j7 = intTree5.key;
return new IntTree(j4, v4, intTree8, new IntTree((-j6) - j7, v, intTree7.withKey(intTree7.key + j7 + j6), intTree2));
}
IntTree<V> intTree9 = intTree2;
if (i2 >= i * 5) {
IntTree<V> intTree10 = intTree9.left;
IntTree<V> intTree11 = intTree9.right;
if (intTree10.size < intTree11.size * 2) {
long j8 = intTree9.key + j;
V v5 = intTree9.value;
long j9 = intTree9.key;
return new IntTree(j8, v5, new IntTree(-j9, v, intTree, intTree10.withKey(intTree10.key + j9)), intTree11);
}
IntTree<V> intTree12 = intTree10.left;
IntTree<V> intTree13 = intTree10.right;
long j10 = intTree10.key + intTree9.key + j;
V v6 = intTree10.value;
long j11 = intTree9.key;
long j12 = j10;
long j13 = intTree10.key;
IntTree intTree14 = new IntTree((-j11) - j13, v, intTree, intTree12.withKey(intTree12.key + j13 + j11));
long j14 = intTree10.key;
V v7 = intTree9.value;
IntTree<V> intTree15 = intTree13;
return new IntTree(j12, v6, intTree14, new IntTree(-j14, v7, intTree15.withKey(intTree15.key + j14), intTree11));
}
}
return new IntTree(j, v, intTree, intTree2);
}
}
Download file