package androidx.datastore.preferences.protobuf; import androidx.datastore.preferences.protobuf.ByteString; import java.io.IOException; import java.io.InputStream; import java.io.InvalidObjectException; import java.io.ObjectInputStream; import java.io.OutputStream; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; /* loaded from: classes.dex */ final class RopeByteString extends ByteString { static final int[] minLengthByDepth = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, Integer.MAX_VALUE}; private static final long serialVersionUID = 1; private final ByteString left; private final int leftLength; private final ByteString right; private final int totalLength; private final int treeDepth; @Override // androidx.datastore.preferences.protobuf.ByteString public int getTreeDepth() { return this.treeDepth; } @Override // androidx.datastore.preferences.protobuf.ByteString public int size() { return this.totalLength; } private RopeByteString(ByteString byteString, ByteString byteString2) { this.left = byteString; this.right = byteString2; int size = byteString.size(); this.leftLength = size; this.totalLength = size + byteString2.size(); this.treeDepth = Math.max(byteString.getTreeDepth(), byteString2.getTreeDepth()) + 1; } public static ByteString concatenate(ByteString byteString, ByteString byteString2) { if (byteString2.size() == 0) { return byteString; } if (byteString.size() == 0) { return byteString2; } int size = byteString.size() + byteString2.size(); if (size < 128) { return concatenateBytes(byteString, byteString2); } if (byteString instanceof RopeByteString) { RopeByteString ropeByteString = (RopeByteString) byteString; if (ropeByteString.right.size() + byteString2.size() < 128) { return new RopeByteString(ropeByteString.left, concatenateBytes(ropeByteString.right, byteString2)); } if (ropeByteString.left.getTreeDepth() > ropeByteString.right.getTreeDepth() && ropeByteString.getTreeDepth() > byteString2.getTreeDepth()) { return new RopeByteString(ropeByteString.left, new RopeByteString(ropeByteString.right, byteString2)); } } if (size >= minLengthByDepth[Math.max(byteString.getTreeDepth(), byteString2.getTreeDepth()) + 1]) { return new RopeByteString(byteString, byteString2); } return new Balancer().balance(byteString, byteString2); } private static ByteString concatenateBytes(ByteString byteString, ByteString byteString2) { int size = byteString.size(); int size2 = byteString2.size(); byte[] bArr = new byte[size + size2]; byteString.copyTo(bArr, 0, 0, size); byteString2.copyTo(bArr, 0, size, size2); return ByteString.wrap(bArr); } public static RopeByteString newInstanceForTest(ByteString byteString, ByteString byteString2) { return new RopeByteString(byteString, byteString2); } @Override // androidx.datastore.preferences.protobuf.ByteString public byte byteAt(int i) { ByteString.checkIndex(i, this.totalLength); return internalByteAt(i); } @Override // androidx.datastore.preferences.protobuf.ByteString public byte internalByteAt(int i) { int i2 = this.leftLength; if (i < i2) { return this.left.internalByteAt(i); } return this.right.internalByteAt(i - i2); } @Override // androidx.datastore.preferences.protobuf.ByteString, java.lang.Iterable /* renamed from: iterator */ public Iterator iterator2() { return new ByteString.AbstractByteIterator() { // from class: androidx.datastore.preferences.protobuf.RopeByteString.1 ByteString.ByteIterator current = nextPiece(); final PieceIterator pieces; @Override // java.util.Iterator public boolean hasNext() { return this.current != null; } { this.pieces = new PieceIterator(RopeByteString.this); } /* JADX WARN: Type inference failed for: r0v5, types: [androidx.datastore.preferences.protobuf.ByteString$ByteIterator] */ private ByteString.ByteIterator nextPiece() { if (this.pieces.hasNext()) { return this.pieces.next().iterator2(); } return null; } @Override // androidx.datastore.preferences.protobuf.ByteString.ByteIterator public byte nextByte() { ByteString.ByteIterator byteIterator = this.current; if (byteIterator == null) { throw new NoSuchElementException(); } byte nextByte = byteIterator.nextByte(); if (!this.current.hasNext()) { this.current = nextPiece(); } return nextByte; } }; } @Override // androidx.datastore.preferences.protobuf.ByteString public boolean isBalanced() { return this.totalLength >= minLengthByDepth[this.treeDepth]; } @Override // androidx.datastore.preferences.protobuf.ByteString public ByteString substring(int i, int i2) { int checkRange = ByteString.checkRange(i, i2, this.totalLength); if (checkRange == 0) { return ByteString.EMPTY; } if (checkRange == this.totalLength) { return this; } int i3 = this.leftLength; if (i2 <= i3) { return this.left.substring(i, i2); } if (i >= i3) { return this.right.substring(i - i3, i2 - i3); } return new RopeByteString(this.left.substring(i), this.right.substring(0, i2 - this.leftLength)); } @Override // androidx.datastore.preferences.protobuf.ByteString public void copyToInternal(byte[] bArr, int i, int i2, int i3) { int i4 = i + i3; int i5 = this.leftLength; if (i4 <= i5) { this.left.copyToInternal(bArr, i, i2, i3); } else { if (i >= i5) { this.right.copyToInternal(bArr, i - i5, i2, i3); return; } int i6 = i5 - i; this.left.copyToInternal(bArr, i, i2, i6); this.right.copyToInternal(bArr, 0, i2 + i6, i3 - i6); } } @Override // androidx.datastore.preferences.protobuf.ByteString public void copyTo(ByteBuffer byteBuffer) { this.left.copyTo(byteBuffer); this.right.copyTo(byteBuffer); } @Override // androidx.datastore.preferences.protobuf.ByteString public ByteBuffer asReadOnlyByteBuffer() { return ByteBuffer.wrap(toByteArray()).asReadOnlyBuffer(); } @Override // androidx.datastore.preferences.protobuf.ByteString public List asReadOnlyByteBufferList() { ArrayList arrayList = new ArrayList(); PieceIterator pieceIterator = new PieceIterator(this); while (pieceIterator.hasNext()) { arrayList.add(pieceIterator.next().asReadOnlyByteBuffer()); } return arrayList; } @Override // androidx.datastore.preferences.protobuf.ByteString public void writeTo(OutputStream outputStream) throws IOException { this.left.writeTo(outputStream); this.right.writeTo(outputStream); } @Override // androidx.datastore.preferences.protobuf.ByteString public void writeToInternal(OutputStream outputStream, int i, int i2) throws IOException { int i3 = i + i2; int i4 = this.leftLength; if (i3 <= i4) { this.left.writeToInternal(outputStream, i, i2); } else { if (i >= i4) { this.right.writeToInternal(outputStream, i - i4, i2); return; } int i5 = i4 - i; this.left.writeToInternal(outputStream, i, i5); this.right.writeToInternal(outputStream, 0, i2 - i5); } } @Override // androidx.datastore.preferences.protobuf.ByteString public void writeTo(ByteOutput byteOutput) throws IOException { this.left.writeTo(byteOutput); this.right.writeTo(byteOutput); } @Override // androidx.datastore.preferences.protobuf.ByteString public void writeToReverse(ByteOutput byteOutput) throws IOException { this.right.writeToReverse(byteOutput); this.left.writeToReverse(byteOutput); } @Override // androidx.datastore.preferences.protobuf.ByteString public String toStringInternal(Charset charset) { return new String(toByteArray(), charset); } @Override // androidx.datastore.preferences.protobuf.ByteString public boolean isValidUtf8() { int partialIsValidUtf8 = this.left.partialIsValidUtf8(0, 0, this.leftLength); ByteString byteString = this.right; return byteString.partialIsValidUtf8(partialIsValidUtf8, 0, byteString.size()) == 0; } @Override // androidx.datastore.preferences.protobuf.ByteString public int partialIsValidUtf8(int i, int i2, int i3) { int i4 = i2 + i3; int i5 = this.leftLength; if (i4 <= i5) { return this.left.partialIsValidUtf8(i, i2, i3); } if (i2 >= i5) { return this.right.partialIsValidUtf8(i, i2 - i5, i3); } int i6 = i5 - i2; return this.right.partialIsValidUtf8(this.left.partialIsValidUtf8(i, i2, i6), 0, i3 - i6); } @Override // androidx.datastore.preferences.protobuf.ByteString public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof ByteString)) { return false; } ByteString byteString = (ByteString) obj; if (this.totalLength != byteString.size()) { return false; } if (this.totalLength == 0) { return true; } int peekCachedHashCode = peekCachedHashCode(); int peekCachedHashCode2 = byteString.peekCachedHashCode(); if (peekCachedHashCode == 0 || peekCachedHashCode2 == 0 || peekCachedHashCode == peekCachedHashCode2) { return equalsFragments(byteString); } return false; } private boolean equalsFragments(ByteString byteString) { boolean equalsRange; PieceIterator pieceIterator = new PieceIterator(this); ByteString.LeafByteString next = pieceIterator.next(); PieceIterator pieceIterator2 = new PieceIterator(byteString); ByteString.LeafByteString next2 = pieceIterator2.next(); int i = 0; int i2 = 0; int i3 = 0; while (true) { int size = next.size() - i; int size2 = next2.size() - i2; int min = Math.min(size, size2); if (i == 0) { equalsRange = next.equalsRange(next2, i2, min); } else { equalsRange = next2.equalsRange(next, i, min); } if (!equalsRange) { return false; } i3 += min; int i4 = this.totalLength; if (i3 >= i4) { if (i3 == i4) { return true; } throw new IllegalStateException(); } if (min == size) { i = 0; next = pieceIterator.next(); } else { i += min; next = next; } if (min == size2) { next2 = pieceIterator2.next(); i2 = 0; } else { i2 += min; } } } @Override // androidx.datastore.preferences.protobuf.ByteString public int partialHash(int i, int i2, int i3) { int i4 = i2 + i3; int i5 = this.leftLength; if (i4 <= i5) { return this.left.partialHash(i, i2, i3); } if (i2 >= i5) { return this.right.partialHash(i, i2 - i5, i3); } int i6 = i5 - i2; return this.right.partialHash(this.left.partialHash(i, i2, i6), 0, i3 - i6); } @Override // androidx.datastore.preferences.protobuf.ByteString public CodedInputStream newCodedInput() { return CodedInputStream.newInstance(new RopeInputStream()); } @Override // androidx.datastore.preferences.protobuf.ByteString public InputStream newInput() { return new RopeInputStream(); } public static class Balancer { private final ArrayDeque prefixesStack; private Balancer() { this.prefixesStack = new ArrayDeque<>(); } /* JADX INFO: Access modifiers changed from: private */ public ByteString balance(ByteString byteString, ByteString byteString2) { doBalance(byteString); doBalance(byteString2); ByteString pop = this.prefixesStack.pop(); while (!this.prefixesStack.isEmpty()) { pop = new RopeByteString(this.prefixesStack.pop(), pop); } return pop; } private void doBalance(ByteString byteString) { if (byteString.isBalanced()) { insert(byteString); return; } if (byteString instanceof RopeByteString) { RopeByteString ropeByteString = (RopeByteString) byteString; doBalance(ropeByteString.left); doBalance(ropeByteString.right); } else { throw new IllegalArgumentException("Has a new type of ByteString been created? Found " + byteString.getClass()); } } private void insert(ByteString byteString) { int depthBinForLength = getDepthBinForLength(byteString.size()); int[] iArr = RopeByteString.minLengthByDepth; int i = iArr[depthBinForLength + 1]; if (this.prefixesStack.isEmpty() || this.prefixesStack.peek().size() >= i) { this.prefixesStack.push(byteString); return; } int i2 = iArr[depthBinForLength]; ByteString pop = this.prefixesStack.pop(); while (true) { if (this.prefixesStack.isEmpty() || this.prefixesStack.peek().size() >= i2) { break; } else { pop = new RopeByteString(this.prefixesStack.pop(), pop); } } RopeByteString ropeByteString = new RopeByteString(pop, byteString); while (!this.prefixesStack.isEmpty()) { if (this.prefixesStack.peek().size() >= RopeByteString.minLengthByDepth[getDepthBinForLength(ropeByteString.size()) + 1]) { break; } else { ropeByteString = new RopeByteString(this.prefixesStack.pop(), ropeByteString); } } this.prefixesStack.push(ropeByteString); } private int getDepthBinForLength(int i) { int binarySearch = Arrays.binarySearch(RopeByteString.minLengthByDepth, i); return binarySearch < 0 ? (-(binarySearch + 1)) - 1 : binarySearch; } } public static final class PieceIterator implements Iterator { private final ArrayDeque breadCrumbs; private ByteString.LeafByteString next; @Override // java.util.Iterator public boolean hasNext() { return this.next != null; } private PieceIterator(ByteString byteString) { if (byteString instanceof RopeByteString) { RopeByteString ropeByteString = (RopeByteString) byteString; ArrayDeque arrayDeque = new ArrayDeque<>(ropeByteString.getTreeDepth()); this.breadCrumbs = arrayDeque; arrayDeque.push(ropeByteString); this.next = getLeafByLeft(ropeByteString.left); return; } this.breadCrumbs = null; this.next = (ByteString.LeafByteString) byteString; } private ByteString.LeafByteString getLeafByLeft(ByteString byteString) { while (byteString instanceof RopeByteString) { RopeByteString ropeByteString = (RopeByteString) byteString; this.breadCrumbs.push(ropeByteString); byteString = ropeByteString.left; } return (ByteString.LeafByteString) byteString; } private ByteString.LeafByteString getNextNonEmptyLeaf() { ByteString.LeafByteString leafByLeft; do { ArrayDeque arrayDeque = this.breadCrumbs; if (arrayDeque == null || arrayDeque.isEmpty()) { return null; } leafByLeft = getLeafByLeft(this.breadCrumbs.pop().right); } while (leafByLeft.isEmpty()); return leafByLeft; } /* JADX WARN: Can't rename method to resolve collision */ @Override // java.util.Iterator public ByteString.LeafByteString next() { ByteString.LeafByteString leafByteString = this.next; if (leafByteString == null) { throw new NoSuchElementException(); } this.next = getNextNonEmptyLeaf(); return leafByteString; } @Override // java.util.Iterator public void remove() { throw new UnsupportedOperationException(); } } public Object writeReplace() { return ByteString.wrap(toByteArray()); } private void readObject(ObjectInputStream objectInputStream) throws IOException { throw new InvalidObjectException("RopeByteStream instances are not to be serialized directly"); } public class RopeInputStream extends InputStream { private ByteString.LeafByteString currentPiece; private int currentPieceIndex; private int currentPieceOffsetInRope; private int currentPieceSize; private int mark; private PieceIterator pieceIterator; @Override // java.io.InputStream public void mark(int i) { this.mark = this.currentPieceOffsetInRope + this.currentPieceIndex; } @Override // java.io.InputStream public boolean markSupported() { return true; } public RopeInputStream() { initialize(); } @Override // java.io.InputStream public int read(byte[] bArr, int i, int i2) { bArr.getClass(); if (i < 0 || i2 < 0 || i2 > bArr.length - i) { throw new IndexOutOfBoundsException(); } return readSkipInternal(bArr, i, i2); } @Override // java.io.InputStream public long skip(long j) { if (j < 0) { throw new IndexOutOfBoundsException(); } if (j > 2147483647L) { j = 2147483647L; } return readSkipInternal(null, 0, (int) j); } private int readSkipInternal(byte[] bArr, int i, int i2) { int i3 = i2; while (true) { if (i3 <= 0) { break; } advanceIfCurrentPieceFullyRead(); if (this.currentPiece != null) { int min = Math.min(this.currentPieceSize - this.currentPieceIndex, i3); if (bArr != null) { this.currentPiece.copyTo(bArr, this.currentPieceIndex, i, min); i += min; } this.currentPieceIndex += min; i3 -= min; } else if (i3 == i2) { return -1; } } return i2 - i3; } @Override // java.io.InputStream public int read() throws IOException { advanceIfCurrentPieceFullyRead(); ByteString.LeafByteString leafByteString = this.currentPiece; if (leafByteString == null) { return -1; } int i = this.currentPieceIndex; this.currentPieceIndex = i + 1; return leafByteString.byteAt(i) & 255; } @Override // java.io.InputStream public int available() throws IOException { return RopeByteString.this.size() - (this.currentPieceOffsetInRope + this.currentPieceIndex); } @Override // java.io.InputStream public synchronized void reset() { initialize(); readSkipInternal(null, 0, this.mark); } private void initialize() { PieceIterator pieceIterator = new PieceIterator(RopeByteString.this); this.pieceIterator = pieceIterator; ByteString.LeafByteString next = pieceIterator.next(); this.currentPiece = next; this.currentPieceSize = next.size(); this.currentPieceIndex = 0; this.currentPieceOffsetInRope = 0; } private void advanceIfCurrentPieceFullyRead() { if (this.currentPiece != null) { int i = this.currentPieceIndex; int i2 = this.currentPieceSize; if (i == i2) { this.currentPieceOffsetInRope += i2; this.currentPieceIndex = 0; if (!this.pieceIterator.hasNext()) { this.currentPiece = null; this.currentPieceSize = 0; } else { ByteString.LeafByteString next = this.pieceIterator.next(); this.currentPiece = next; this.currentPieceSize = next.size(); } } } } } }