Add Discord community version (64-bit only)

- Added realracing3-community.apk (71.57 MB)
- Removed 32-bit support (armeabi-v7a)
- Only includes arm64-v8a libraries
- Decompiled source code included
- Added README-community.md with analysis
This commit is contained in:
2026-02-18 15:48:36 -08:00
parent c19eb3d7ff
commit c080f0d97f
26930 changed files with 2529574 additions and 0 deletions

View File

@@ -0,0 +1,80 @@
package com.mbridge.msdk.playercommon.exoplayer2.text.subrip;
import android.text.Html;
import android.text.TextUtils;
import android.util.Log;
import com.mbridge.msdk.playercommon.exoplayer2.source.chunk.ChunkedTrackBlacklistUtil;
import com.mbridge.msdk.playercommon.exoplayer2.text.Cue;
import com.mbridge.msdk.playercommon.exoplayer2.text.SimpleSubtitleDecoder;
import com.mbridge.msdk.playercommon.exoplayer2.util.LongArray;
import com.mbridge.msdk.playercommon.exoplayer2.util.ParsableByteArray;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/* loaded from: classes4.dex */
public final class SubripDecoder extends SimpleSubtitleDecoder {
private static final String SUBRIP_TIMECODE = "(?:(\\d+):)?(\\d+):(\\d+),(\\d+)";
private static final Pattern SUBRIP_TIMING_LINE = Pattern.compile("\\s*((?:(\\d+):)?(\\d+):(\\d+),(\\d+))\\s*-->\\s*((?:(\\d+):)?(\\d+):(\\d+),(\\d+))?\\s*");
private static final String TAG = "SubripDecoder";
private final StringBuilder textBuilder;
public SubripDecoder() {
super(TAG);
this.textBuilder = new StringBuilder();
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.SimpleSubtitleDecoder
public final SubripSubtitle decode(byte[] bArr, int i, boolean z) {
ArrayList arrayList = new ArrayList();
LongArray longArray = new LongArray();
ParsableByteArray parsableByteArray = new ParsableByteArray(bArr, i);
while (true) {
String readLine = parsableByteArray.readLine();
if (readLine == null) {
break;
}
if (readLine.length() != 0) {
String readLine2 = parsableByteArray.readLine();
if (readLine2 == null) {
Log.w(TAG, "Unexpected end");
break;
}
Matcher matcher = SUBRIP_TIMING_LINE.matcher(readLine2);
if (matcher.matches()) {
boolean z2 = true;
longArray.add(parseTimecode(matcher, 1));
if (TextUtils.isEmpty(matcher.group(6))) {
z2 = false;
} else {
longArray.add(parseTimecode(matcher, 6));
}
this.textBuilder.setLength(0);
while (true) {
String readLine3 = parsableByteArray.readLine();
if (TextUtils.isEmpty(readLine3)) {
break;
}
if (this.textBuilder.length() > 0) {
this.textBuilder.append("<br>");
}
this.textBuilder.append(readLine3.trim());
}
arrayList.add(new Cue(Html.fromHtml(this.textBuilder.toString())));
if (z2) {
arrayList.add(null);
}
} else {
Log.w(TAG, "Skipping invalid timing: " + readLine2);
}
}
}
Cue[] cueArr = new Cue[arrayList.size()];
arrayList.toArray(cueArr);
return new SubripSubtitle(cueArr, longArray.toArray());
}
private static long parseTimecode(Matcher matcher, int i) {
return ((Long.parseLong(matcher.group(i + 1)) * 3600000) + (Long.parseLong(matcher.group(i + 2)) * ChunkedTrackBlacklistUtil.DEFAULT_TRACK_BLACKLIST_MS) + (Long.parseLong(matcher.group(i + 3)) * 1000) + Long.parseLong(matcher.group(i + 4))) * 1000;
}
}

View File

@@ -0,0 +1,50 @@
package com.mbridge.msdk.playercommon.exoplayer2.text.subrip;
import com.mbridge.msdk.playercommon.exoplayer2.text.Cue;
import com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle;
import com.mbridge.msdk.playercommon.exoplayer2.util.Assertions;
import com.mbridge.msdk.playercommon.exoplayer2.util.Util;
import java.util.Collections;
import java.util.List;
/* loaded from: classes4.dex */
final class SubripSubtitle implements Subtitle {
private final long[] cueTimesUs;
private final Cue[] cues;
public SubripSubtitle(Cue[] cueArr, long[] jArr) {
this.cues = cueArr;
this.cueTimesUs = jArr;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle
public final int getNextEventTimeIndex(long j) {
int binarySearchCeil = Util.binarySearchCeil(this.cueTimesUs, j, false, false);
if (binarySearchCeil < this.cueTimesUs.length) {
return binarySearchCeil;
}
return -1;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle
public final int getEventTimeCount() {
return this.cueTimesUs.length;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle
public final long getEventTime(int i) {
Assertions.checkArgument(i >= 0);
Assertions.checkArgument(i < this.cueTimesUs.length);
return this.cueTimesUs[i];
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle
public final List<Cue> getCues(long j) {
Cue cue;
int binarySearchFloor = Util.binarySearchFloor(this.cueTimesUs, j, true, false);
if (binarySearchFloor == -1 || (cue = this.cues[binarySearchFloor]) == null) {
return Collections.emptyList();
}
return Collections.singletonList(cue);
}
}