Remove mirai-debug

This commit is contained in:
Him188 2020-02-27 13:29:46 +08:00
parent 9ea6b2899f
commit 6110cf8f4e
17 changed files with 0 additions and 3084 deletions

View File

@ -1,80 +0,0 @@
plugins {
id("application")
id("org.openjfx.javafxplugin") version "0.0.8"
kotlin("jvm")
java
id("kotlinx-serialization")
}
javafx {
version = "11"
modules = listOf("javafx.controls")
//mainClassName = "Application"
}
application {
mainClassName = "Application"
}
val kotlinVersion: String by rootProject.ext
val atomicFuVersion: String by rootProject.ext
val coroutinesVersion: String by rootProject.ext
val kotlinXIoVersion: String by rootProject.ext
val coroutinesIoVersion: String by rootProject.ext
val serializationVersion: String by rootProject.ext
val klockVersion: String by rootProject.ext
val ktorVersion: String by rootProject.ext
kotlin {
sourceSets {
all {
languageSettings.enableLanguageFeature("InlineClasses")
languageSettings.useExperimentalAnnotation("kotlin.Experimental")
}
}
}
fun kotlinx(id: String, version: String) = "org.jetbrains.kotlinx:kotlinx-$id:$version"
fun ktor(id: String, version: String) = "io.ktor:ktor-$id:$version"
dependencies {
runtimeOnly(files("../mirai-core/build/classes/kotlin/jvm/main")) // IDE bug
runtimeOnly(files("../mirai-core-qqandroid/build/classes/kotlin/jvm/main")) // IDE bug
implementation(project(":mirai-core-qqandroid"))
// runtimeOnly(files("../mirai-core/build/classes/kotlin/jvm/main")) // classpath is not added correctly by IDE
implementation("org.bouncycastle:bcprov-jdk15on:1.64")
implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion")
implementation("org.pcap4j:pcap4j-distribution:1.8.2")
implementation("no.tornado:tornadofx:1.7.17")
implementation(group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-javafx", version = "1.3.2")
implementation(kotlin("stdlib", kotlinVersion))
implementation("org.jetbrains.kotlinx:atomicfu:$atomicFuVersion")
implementation(kotlinx("io-jvm", kotlinXIoVersion))
implementation(kotlinx("io", kotlinXIoVersion))
implementation(kotlinx("coroutines-io", coroutinesIoVersion))
implementation(kotlinx("coroutines-core", coroutinesVersion))
implementation(kotlinx("serialization-runtime", serializationVersion))
implementation(ktor("http-cio", ktorVersion))
implementation(ktor("http", ktorVersion))
implementation(ktor("client-core-jvm", ktorVersion))
implementation(ktor("client-cio", ktorVersion))
implementation(ktor("client-core", ktorVersion))
implementation(ktor("network", ktorVersion))
testImplementation(kotlin("test-annotations-common"))
testImplementation(kotlin("test"))
testImplementation(kotlin("test-junit"))
testImplementation(kotlin("script-runtime"))
}

Binary file not shown.

View File

@ -1,14 +0,0 @@
package japttest;
@SuppressWarnings("unused")
public class SuspendTest {
public static void main(String[] args) {
// TODO: 2019/12/6 Kotlin or IDE bug here
// Uncomment the following line.
// boolean bool = JaptTestKt.getLoginResult() == LoginResult.YOU_CAN_WRITE_ANY_THING;
System.out.println("Hello world");
}
}

View File

@ -1,72 +0,0 @@
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
@file:Suppress("UNUSED_VARIABLE")
import net.mamoe.mirai.utils.io.encodeToString
import net.mamoe.mirai.utils.io.hexToBytes
import net.mamoe.mirai.utils.io.toUHexString
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.util.*
import java.util.zip.GZIPInputStream
fun main() {
val short: Short = 0x8b1f.toShort()
// 7字节相同| |18字节向东
val bytes =
"AA 02 56 30 01 3A 40 53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64 9A 01 0F 80 01 01 C8 01 00 F0 01 00 F8 01 00 90 02 00"
.hexToBytes()
println(bytes.encodeToString())
val string = bytes.encodeToString()
// println("53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64".hexToBytes().encodeToString())
println("53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64"
.hexToBytes().unbase64().encodeToString()
)
println("53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64"
.hexToBytes().unbase64().toUHexString())
//base64解密结果 48 A2 BF A1 8D C1 F7 F8 55 4C 42 9E 8D 9F 79 10 CC E1 67 FA 09 07 2E 7A 6A 83 D8 DA 74 08 C0 08 3B 19 0D F8 7A B0 8B 02 B3 CA 57 DE 42 BD EE 1D
println()
println()
println(Base64.getEncoder().encodeToString(".".repeat(1000).toByteArray()))
// 01 78
val data2 =
"9C CD 92 BB 4E C3 30 14 86 77 9E C2 32 23 4A 73 69 D3 76 48 52 25 25 BD 48 84 56 54 15 97 05 85 C4 09 2E B9 A8 4E D2 92 6E DD 10 0C 88 81 0D 84 90 60 40 42 C0 C4 D6 C7 69 E8 63 E0 94 22 46 46 F8 2D 59 F2 B1 7F 9F E3 EF 58 AA 9D FA 1E 18 21 12 E1 30 90 21 5F E0 20 40 81 15 DA 38 70 65 98 C4 0E 53 85 35 65 0D 50 49 7E E4 82 23 82 91 23 C3 C2 3F 17 04 FE A1 83 3D B4 6D FA 48 86 42 45 2F F3 82 58 64 CA A2 2E 32 25 AD 51 66 54 AD 21 32 AA AA AB 1C 5F 15 04 AE 5E F9 76 F4 F0 84 3A 28 05 D3 8A 97 48 46 18 8D 8D C4 8B B1 11 B9 10 38 9E 49 B9 14 21 88 10 19 61 0B B5 37 E9 4A CC CD 04 45 D8 96 E1 38 ED B7 BA 9D 81 53 2F A5 7B A1 A8 B1 29 6E 69 EE C4 68 75 DB FE 46 C7 76 3B 27 BA 67 F4 93 DD 83 DE 7E 33 16 06 CD B2 C6 0F 35 42 D8 52 63 C7 DE 1A 0E 86 1A 04 0A 90 70 8C 7C E0 99 69 98 C4 B4 27 90 46 62 1C 7B 48 01 7F CD F5 37 01 89 5D 55 0A A4 63 A2 48 2C 9D 56 C5 03 2B F4 42 22 C3 F5 2A 97 0F FA A8 EC EE F1 E3 E6 82 CF 6E EF 17 B3 E7 F9 E5 55 F6 7E 96 4D 5F C1 CF 1D 12 9B 83 50 A4 28 4C 88 85 40 B0 6C E6 62 7A 3E 7F 78 5A BC BC CD 67 D7 90 66 F8 DA CC 0F D3 FF A9 7C 02 73 51 C1 65".replace(
" ",
" "
)
.hexToBytes()
println(data2.size)
println(data2.unbase64().toUHexString())
}
fun ByteArray.unbase64() = Base64.getDecoder().decode(this)
fun ByteArray.ungzip(): ByteArray {
val out = ByteArrayOutputStream()
val `in` = ByteArrayInputStream(this)
val ungzip = GZIPInputStream(`in`)
val buffer = ByteArray(256)
var n: Int
while (ungzip.read(buffer).also { n = it } >= 0) {
out.write(buffer, 0, n)
}
return out.toByteArray()
}

View File

@ -1,307 +0,0 @@
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
@file:Suppress("EXPERIMENTAL_API_USAGE")
import javafx.geometry.Pos
import javafx.scene.control.TextArea
import javafx.scene.control.TextField
import javafx.scene.layout.Region
import javafx.scene.paint.Color
import javafx.scene.text.FontWeight
import kotlinx.coroutines.*
import kotlinx.io.core.readUByte
import kotlinx.io.core.readUInt
import kotlinx.io.core.readUShort
import net.mamoe.mirai.utils.io.encodeToString
import net.mamoe.mirai.utils.io.hexToBytes
import net.mamoe.mirai.utils.io.read
import net.mamoe.mirai.utils.io.readUVarInt
import tornadofx.*
import java.awt.Toolkit
import java.awt.datatransfer.DataFlavor
/**
* How to run:
*
* `gradle :mirai-debug:run`
*/
class Application : App(HexDebuggerGui::class, Styles::class)
class Styles : Stylesheet() {
companion object {
// Define css classes
val heading by cssclass()
// Define colors
val mainColor = c("#bdbd22")
}
init {
heading {
textFill = mainColor
fontSize = 20.px
fontWeight = FontWeight.BOLD
}
button {
padding = box(vertical = 5.px, horizontal = 15.px)
fontWeight = FontWeight.BOLD
fontSize = 16.px
}
label {
padding = box(vertical = 5.px, horizontal = 15.px)
fontSize = 16.px
}
textField {
padding = box(vertical = 5.px, horizontal = 15.px)
}
textArea {
fontSize = 18.px
}
val flat = mixin {
backgroundInsets += box(0.px)
borderColor += box(Color.DARKGRAY)
}
s(button, textInput) {
+flat
}
}
}
class HexDebuggerGui : View("Mirai Hex Debugger") {
private lateinit var input: TextArea
private lateinit var outSize: TextField
private lateinit var outUVarInt: TextField
private lateinit var outShort: TextField
private lateinit var outUInt: TextField
private lateinit var outString: TextArea
private lateinit var outBits: TextField
private val clip = Toolkit.getDefaultToolkit().systemClipboard
private val clipboardContent: String?
get() {
val trans = clip.getContents(null)
if (trans?.isDataFlavorSupported(DataFlavor.stringFlavor) == true) {
return try {
trans.getTransferData(DataFlavor.stringFlavor) as String
} catch (e: Exception) {
e.printStackTrace()
null
}
}
return null
}
init {
GlobalScope.launch {
var last = clipboardContent
while (true) {
delay(100)
val current = try {
clipboardContent
} catch (e: Exception) {
e.printStackTrace()
null
}
try {
if (current != last) {
withContext(Dispatchers.Main) {
input.text = current
updateOutputs(
current?.lineSequence()
?.map { it.substringBefore("//") }
?.joinToString(" ")
.toString()
.replace("UVarInt", "", ignoreCase = true)
.replace("[", "")
.replace("]", "")
.replace("(", "")
.replace(")", "")
.replace(" ", " ")
.replace(" ", " ")
.replace(" ", " ")
.replace("_", "")
.replace(",", "")
.replace("`", "")
.replace("\"", "")
.replace("'", "")
.replace("*", "")
.replace("\\", "")
.replace("/", "")
.replace("-", "")
)
}
}
} finally {
last = current
}
}
}
}
private fun updateOutputs(value: String) {
outUVarInt.text = runOrNull {
value.hexToBytes().read {
readUVarInt().toString()
}
}
outShort.text = runOrNull {
value.hexToBytes().read {
readShort().toString()
}
}
outUInt.text = runOrNull {
value.hexToBytes().read {
readUInt().toString()
}
}
outSize.text = runOrNull {
value.hexToBytes().size.toString()
}
outBits.text = runOrNull {
value.hexToBytes().read {
when (remaining.toInt()) {
0 -> null
1 -> readUByte().toString(2)
2 -> readUShort().toString(2)
4 -> readUInt().toString(2)
else -> ""
}
}
}
outString.text = runOrNull {
value.hexToBytes().encodeToString()
}
}
override val root = hbox {
//prefWidth = 735.0
minHeight = 300.0
prefHeight = minHeight
input = textarea {
promptText = "Input"
paddingVertical = 10
prefWidth = 150.0
minWidth = 100.0
//maxWidth = 150.0
fitToHeight(this@hbox)
}
vbox(10) {
label(" => ") {
alignment = Pos.CENTER
spacing = 10.0
}
button("_") {
paddingAll = 0.0
setOnMouseClicked {
if (primaryStage.isAlwaysOnTop) {
primaryStage.isAlwaysOnTop = false
text = "_"
} else {
primaryStage.isAlwaysOnTop = true
text = ""
}
}
}
alignment = Pos.CENTER
fitToHeight(this@hbox)
}
vbox(10) {
paddingTop = 10
alignment = Pos.TOP_RIGHT
label("size")
label("UVarInt")
label("short")
label("uint")
label("bits")
label("string")
children.filterIsInstance<Region>().forEach {
it.fitToParentWidth()
}
}
vbox(20) {
alignment = Pos.CENTER_RIGHT
outSize = textfield {
promptText = "Size"
isEditable = false
}
outUVarInt = textfield {
promptText = "UVarInt"
isEditable = false
}
outShort = textfield {
promptText = "Short"
isEditable = false
}
outUInt = textfield {
promptText = "UInt"
isEditable = false
}
outBits = textfield {
promptText = "Bits"
isEditable = false
}
outString = textarea {
promptText = "String"
isEditable = false
maxWidth = 100.0
minHeight = 30.0
}
children.filterIsInstance<Region>().forEach {
it.fitToParentWidth()
}
}
input.textProperty().onChange {
if (it == null) {
return@onChange
}
updateOutputs(it)
}
}
}
private inline fun <T> runOrNull(block: () -> T?): T? {
return try {
block()
} catch (e: Exception) {
null
}
}

View File

@ -1,335 +0,0 @@
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
@file:Suppress("ObjectPropertyName", "MayBeConstant", "NonAsciiCharacters", "SpellCheckingInspection", "unused", "EXPERIMENTAL_UNSIGNED_LITERALS")
package hex
import kotlinx.io.core.toByteArray
import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.io.hexToBytes
import net.mamoe.mirai.utils.io.read
import net.mamoe.mirai.utils.io.readUVarInt
import net.mamoe.mirai.utils.io.toUHexString
import kotlin.math.max
import kotlin.reflect.KProperty0
/**
* 匹配已知 hex 常量并格式化后打印到控制台.
*
* 低效率, 仅调试使用.
*/
internal fun String.printColorize(ignoreUntilFirstConst: Boolean): String = with(HexComparator) { colorize(ignoreUntilFirstConst) }
/**
* 比较两个 hex 并格式化后打印到控制台.
*
* 低效率, 仅调试使用.
*/
@MiraiInternalAPI
fun printCompareHex(hex1s: String, hex2s: String): String = with(HexComparator) {
compare(
hex1s.toUpperCase(),
hex2s.toUpperCase()
)
}
data class NamedHexElement(
val name: String,
val value: String
)
/**
* 初始化用于匹配的 Hex 列表
*/
private fun LinkedHashSet<NamedHexElement>.initConstFileds() {
listOf(
TestConsts,
//TIMProtocol,
PacketIds
).forEach { obj ->
obj::class.members.filterIsInstance<KProperty0<*>>().forEach { property ->
property.get()?.let { add(NamedHexElement(property.name, it.toString())) }
}
}
}
private object TestConsts {
val NIU_BI = "牛逼".toByteArray().toUHexString()
val _1994701021 = 1994701021u.toUHexString(" ")
val _1040400290 = 1040400290u.toUHexString(" ")
val _580266363 = 580266363u.toUHexString(" ")
val _761025446 = 761025446u.toUHexString()
val _1040400290_ = "3E 03 3F A2"
val _1994701021_ = "76 E4 B8 DD"
val _jiahua_ = "B1 89 BE 09"
val _Him188moe_ = "Him188moe".toByteArray().toUHexString()
val 发图片2 = "发图片2".toByteArray().toUHexString()
val 发图片群 = "发图片群".toByteArray().toUHexString()
val 发图片 = "发图片".toByteArray().toUHexString()
val = "".toByteArray().toUHexString()
val 你好 = "你好".toByteArray().toUHexString()
val MESSAGE_TAIL_10404 =
"0E 00 07 01 00 04 00 00 00 09 19 00 18 01 00 15 AA 02 12 9A 01 0F 80 01 01 C8 01 00 F0 01 00 F8 01 00 90 02 00"
.replace(" ", " ")
val FONT_10404 = "E5 BE AE E8 BD AF E9 9B 85 E9 BB 91"
val varint580266363 = "FB D2 D8 94 02"
val varint1040400290 = "A2 FF 8C F0 03"
val varint1994701021 = "DD F1 92 B7 07"
val varint761025446 = 761025446u.toUHexString().hexToBytes().read { readUVarInt() }.toUHexString()
}
@Suppress("SpellCheckingInspection")
private object PacketIds {
val heartbeat = "00 58"
val friendmsgsend = "00 CD"
val friendmsgevent = "00 CE"
val groupmsg = "00 02"
}
/**
* Hex 比较器, 并着色已知常量
*
* This could be used to check packet encoding..
* but better to run under UNIX
*
* @author NaturalHG
* @author Him188moe
*/
private object HexComparator {
private val RED = "\u001b[31m"
private val GREEN = "\u001b[33m"
private val UNKNOWN_COLOR = "\u001b[30m"
private val BLUE = "\u001b[34m"
@Suppress("unused")
private class ConstMatcher constructor(hex: String) {
private val matches = linkedSetOf<Match>()
fun getMatchedConstName(hexNumber: Int): String? {
for (match in this.matches) {
if (match.range.contains(hexNumber)) {
return match.constName
}
}
return null
}
private class Match internal constructor(val range: IntRange, val constName: String)
init {
CONST_FIELDS.forEach { (name, value) ->
for (match in match(hex, value)) {
matches.add(Match(match, name))
}
}
}
companion object {
val CONST_FIELDS: MutableSet<NamedHexElement> = linkedSetOf<NamedHexElement>().apply { initConstFileds() }
}
private fun match(hex: String, value: String): Set<IntRange> {
val constValue: String
try {
constValue = value.trim { it <= ' ' }
if (constValue.length / 3 <= 3) {//Minimum numbers of const hex bytes
return linkedSetOf()
}
} catch (ignored: ClassCastException) {
return linkedSetOf()
}
return mutableSetOf<IntRange>().apply {
var index = -1
index = hex.indexOf(constValue, index + 1)
while (index != -1) {
add(IntRange(index / 3, (index + constValue.length) / 3))
index = hex.indexOf(constValue, index + 1)
}
}
}
}
private fun buildConstNameChain(length: Int, constMatcher: ConstMatcher, constNameBuilder: StringBuilder) {
//System.out.println(constMatcher.matches);
var i = 0
while (i < length) {
constNameBuilder.append(" ")
val match = constMatcher.getMatchedConstName(i / 4)
if (match != null) {
var appendedNameLength = match.length
constNameBuilder.append(match)
while (match == constMatcher.getMatchedConstName(i++ / 4)) {
if (appendedNameLength-- < 0) {
constNameBuilder.append(" ")
}
}
constNameBuilder.append(" ".repeat(match.length % 4))
}
i++
}
}
fun compare(hex1s: String, hex2s: String): String {
val builder = StringBuilder()
val hex1 = hex1s.trim { it <= ' ' }.replace("\n", "").split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
val hex2 = hex2s.trim { it <= ' ' }.replace("\n", "").split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
val constMatcher1 = ConstMatcher(hex1s)
val constMatcher2 = ConstMatcher(hex2s)
if (hex1.size == hex2.size) {
builder.append(GREEN).append("长度一致:").append(hex1.size)
} else {
builder.append(RED).append("长度不一致").append(hex1.size).append("/").append(hex2.size)
}
val numberLine = StringBuilder()
val hex1ConstName = StringBuilder()
val hex1b = StringBuilder()
val hex2b = StringBuilder()
val hex2ConstName = StringBuilder()
var dif = 0
val length = max(hex1.size, hex2.size) * 4
buildConstNameChain(length, constMatcher1, hex1ConstName)
buildConstNameChain(length, constMatcher2, hex2ConstName)
for (i in 0 until max(hex1.size, hex2.size)) {
var h1: String? = null
var h2: String? = null
var isDif = false
if (hex1.size <= i) {
h1 = RED + "__"
isDif = true
} else {
val matchedConstName = constMatcher1.getMatchedConstName(i)
if (matchedConstName != null) {
h1 = BLUE + hex1[i]
}
}
if (hex2.size <= i) {
h2 = RED + "__"
isDif = true
} else {
val matchedConstName = constMatcher2.getMatchedConstName(i)
if (matchedConstName != null) {
h2 = BLUE + hex2[i]
}
}
if (h1 == null && h2 == null) {
h1 = hex1[i]
h2 = hex2[i]
if (h1 == h2) {
h1 = GREEN + h1
h2 = GREEN + h2
} else {
h1 = RED + h1
h2 = RED + h2
isDif = true
}
} else {
if (h1 == null) {
h1 = RED + hex1[i]
}
if (h2 == null) {
h2 = RED + hex2[i]
}
}
numberLine.append(UNKNOWN_COLOR).append(getFixedNumber(i)).append(" ")
hex1b.append(" ").append(h1).append(" ")
hex2b.append(" ").append(h2).append(" ")
if (isDif) {
++dif
}
//doConstReplacement(hex1b);
//doConstReplacement(hex2b);
}
return builder.append(" ").append(dif).append(" 个不同").append("\n")
.append(numberLine).append("\n")
.append(hex1ConstName).append("\n")
.append(hex1b).append("\n")
.append(hex2b).append("\n")
.append(hex2ConstName).append("\n")
.toString()
}
fun String.colorize(ignoreUntilFirstConst: Boolean = false): String {
val builder = StringBuilder()
val hex = trim { it <= ' ' }.replace("\n", "").split(" ").dropLastWhile { it.isEmpty() }.toTypedArray()
val constMatcher1 = ConstMatcher(this)
val numberLine = StringBuilder()
val hex1ConstName = StringBuilder()
val hex1b = StringBuilder()
buildConstNameChain(length, constMatcher1, hex1ConstName)
var firstConst: String? = null
var constNameOffset = 0//已经因为还没到第一个const跳过了几个char
for (i in hex.indices) {
var h1: String? = null
val matchedConstName = constMatcher1.getMatchedConstName(i)
if (matchedConstName != null) {
firstConst = firstConst ?: matchedConstName
h1 = BLUE + hex[i]
}
if (!ignoreUntilFirstConst || firstConst != null) {//有过任意一个 Const
if (h1 == null) {
h1 = GREEN + hex[i]
}
numberLine.append(UNKNOWN_COLOR).append(getFixedNumber(i)).append(" ")
hex1b.append(" ").append(h1).append(" ")
} else {
constNameOffset++
}
}
return builder.append("\n")
.append(numberLine).append("\n")
.append(if (firstConst == null) hex1ConstName else {
with(hex1ConstName) {
val index = indexOf(firstConst)
if (index == -1) toString() else " " + substring(index, length)
}
}).append("\n")
.append(hex1b).append("\n")
.toString()
}
private fun getFixedNumber(number: Int): String {
if (number < 10) {
return "00$number"
}
return if (number < 100) {
"0$number"
} else number.toString()
}
}

View File

@ -1,35 +0,0 @@
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
package test
import kotlin.reflect.KProperty
data class Info(
var value: Int
) {
operator fun getValue(c: C, property: KProperty<*>): Int {
return value
}
}
class C(var info: Info) {
val value by info
}
fun main() {
val info = Info(1)
val c = C(info)
println(c.value) //1
info.value = 2
println(c.value) //2
c.info = Info(3)
println(c.value) //2
}

View File

@ -1,18 +0,0 @@
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
package test
@Suppress("RedundantSuspendModifier")
suspend fun suspendPrintln(arg: String) = println(arg)
suspend fun main() {
suspendPrintln("Hello")
suspendPrintln(" World!")
}

View File

@ -1,79 +0,0 @@
package jce.jce;
import java.io.UnsupportedEncodingException;
public class HexUtil {
private static final char[] digits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
public static final byte[] emptybytes = new byte[0];
public static String byte2HexStr(byte var0) {
char var1 = digits[var0 & 15];
var0 = (byte) (var0 >>> 4);
return new String(new char[]{digits[var0 & 15], var1});
}
public static String bytes2HexStr(byte[] var0) {
if (var0 != null && var0.length != 0) {
char[] var3 = new char[var0.length * 2];
for (int var1 = 0; var1 < var0.length; ++var1) {
byte var2 = var0[var1];
var3[var1 * 2 + 1] = digits[var2 & 15];
var2 = (byte) (var2 >>> 4);
var3[var1 * 2 + 0] = digits[var2 & 15];
}
return new String(var3);
} else {
return null;
}
}
public static byte char2Byte(char var0) {
if (var0 >= '0' && var0 <= '9') {
return (byte) (var0 - 48);
} else if (var0 >= 'a' && var0 <= 'f') {
return (byte) (var0 - 97 + 10);
} else {
return var0 >= 'A' && var0 <= 'F' ? (byte) (var0 - 65 + 10) : 0;
}
}
public static byte hexStr2Byte(String var0) {
byte var2 = 0;
byte var1 = var2;
if (var0 != null) {
var1 = var2;
if (var0.length() == 1) {
var1 = char2Byte(var0.charAt(0));
}
}
return var1;
}
public static byte[] hexStr2Bytes(String var0) {
if (var0 != null && !var0.equals("")) {
byte[] var4 = new byte[var0.length() / 2];
for (int var3 = 0; var3 < var4.length; ++var3) {
char var1 = var0.charAt(var3 * 2);
char var2 = var0.charAt(var3 * 2 + 1);
var4[var3] = (byte) (char2Byte(var1) * 16 + char2Byte(var2));
}
return var4;
} else {
return emptybytes;
}
}
public static void main(String[] var0) {
try {
byte[] var2 = "Hello WebSocket World?".getBytes("gbk");
System.out.println(bytes2HexStr(var2));
} catch (UnsupportedEncodingException var1) {
var1.printStackTrace();
}
}
}

View File

@ -1,7 +0,0 @@
package jce.jce;
public class JceDecodeException extends RuntimeException {
public JceDecodeException(String var1) {
super(var1);
}
}

View File

@ -1,7 +0,0 @@
package jce.jce;
public class JceEncodeException extends RuntimeException {
public JceEncodeException(String var1) {
super(var1);
}
}

View File

@ -1,11 +0,0 @@
package jce.jce;
public class JceInputStream$HeadData {
public int tag;
public byte type;
public void clear() {
this.type = 0;
this.tag = 0;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,430 +0,0 @@
package jce.jce;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class JceOutputStream {
// $FF: renamed from: bs java.nio.ByteBuffer
private ByteBuffer field_80728;
private OnIllegalArgumentException exceptionHandler;
protected String sServerEncoding;
public JceOutputStream() {
this(128);
}
public JceOutputStream(int var1) {
this.sServerEncoding = "GBK";
this.field_80728 = ByteBuffer.allocate(var1);
}
public JceOutputStream(ByteBuffer var1) {
this.sServerEncoding = "GBK";
this.field_80728 = var1;
}
public static void main(String[] var0) {
JceOutputStream var2 = new JceOutputStream();
var2.write(1311768467283714885L, 0);
ByteBuffer var1 = var2.getByteBuffer();
System.out.println(HexUtil.bytes2HexStr(var1.array()));
System.out.println(Arrays.toString(var2.toByteArray()));
}
private void writeArray(Object[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public ByteBuffer getByteBuffer() {
return this.field_80728;
}
public OnIllegalArgumentException getExceptionHandler() {
return this.exceptionHandler;
}
public void reserve(int var1) {
if (this.field_80728.remaining() < var1) {
int var2 = (this.field_80728.capacity() + var1) * 2;
ByteBuffer var3;
try {
var3 = ByteBuffer.allocate(var2);
var3.put(this.field_80728.array(), 0, this.field_80728.position());
} catch (IllegalArgumentException var4) {
if (this.exceptionHandler != null) {
this.exceptionHandler.onException(var4, this.field_80728, var1, var2);
}
throw var4;
}
this.field_80728 = var3;
}
}
public void setExceptionHandler(OnIllegalArgumentException var1) {
this.exceptionHandler = var1;
}
public int setServerEncoding(String var1) {
this.sServerEncoding = var1;
return 0;
}
public byte[] toByteArray() {
byte[] var1 = new byte[this.field_80728.position()];
System.arraycopy(this.field_80728.array(), 0, var1, 0, this.field_80728.position());
return var1;
}
public void write(byte var1, int var2) {
this.reserve(3);
if (var1 == 0) {
this.writeHead((byte) 12, var2);
} else {
this.writeHead((byte) 0, var2);
this.field_80728.put(var1);
}
}
public void write(double var1, int var3) {
this.reserve(10);
this.writeHead((byte) 5, var3);
this.field_80728.putDouble(var1);
}
public void write(float var1, int var2) {
this.reserve(6);
this.writeHead((byte) 4, var2);
this.field_80728.putFloat(var1);
}
public void write(int var1, int var2) {
this.reserve(6);
if (var1 >= -32768 && var1 <= 32767) {
this.write((short) var1, var2);
} else {
this.writeHead((byte) 2, var2);
this.field_80728.putInt(var1);
}
}
public void write(long var1, int id) {
this.reserve(10);
if (var1 >= -2147483648L && var1 <= 2147483647L) {
this.write((int) var1, id);
} else {
this.writeHead((byte) 3, id);
this.field_80728.putLong(var1);
}
}
public void write(JceStruct var1, int var2) {
this.reserve(2);
this.writeHead((byte) 10, var2);
var1.writeTo(this);
this.reserve(2);
this.writeHead((byte) 11, 0);
}
public void write(Boolean var1, int var2) {
this.write((boolean) var1, var2);
}
public void write(Byte var1, int var2) {
this.write((byte) var1, var2);
}
public void write(Double var1, int var2) {
this.write((double) var1, var2);
}
public void write(Float var1, int var2) {
this.write((float) var1, var2);
}
public void write(Integer var1, int var2) {
this.write((int) var1, var2);
}
public void write(Long var1, int var2) {
this.write((long) var1, var2);
}
public void write(Object var1, int var2) {
if (var1 instanceof Byte) {
this.write((Byte) var1, var2);
} else if (var1 instanceof Boolean) {
this.write((Boolean) var1, var2);
} else if (var1 instanceof Short) {
this.write((Short) var1, var2);
} else if (var1 instanceof Integer) {
this.write((Integer) var1, var2);
} else if (var1 instanceof Long) {
this.write((Long) var1, var2);
} else if (var1 instanceof Float) {
this.write((Float) var1, var2);
} else if (var1 instanceof Double) {
this.write((Double) var1, var2);
} else if (var1 instanceof String) {
this.write((String) var1, var2);
} else if (var1 instanceof Map) {
this.write((Map) var1, var2);
} else if (var1 instanceof List) {
this.write((List) var1, var2);
} else if (var1 instanceof JceStruct) {
this.write((JceStruct) var1, var2);
} else if (var1 instanceof byte[]) {
this.write((byte[]) var1, var2);
} else if (var1 instanceof boolean[]) {
this.write((boolean[]) var1, var2);
} else if (var1 instanceof short[]) {
this.write((short[]) var1, var2);
} else if (var1 instanceof int[]) {
this.write((int[]) var1, var2);
} else if (var1 instanceof long[]) {
this.write((long[]) var1, var2);
} else if (var1 instanceof float[]) {
this.write((float[]) var1, var2);
} else if (var1 instanceof double[]) {
this.write((double[]) var1, var2);
} else if (var1.getClass().isArray()) {
this.writeArray((Object[]) var1, var2);
} else if (var1 instanceof Collection) {
this.write((Collection) var1, var2);
} else {
throw new JceEncodeException("write object error: unsupport type. " + var1.getClass());
}
}
public void write(Short var1, int var2) {
this.write((short) var1, var2);
}
public void write(String var1, int var2) {
byte[] var5;
label16:
{
byte[] var3;
try {
var3 = var1.getBytes(this.sServerEncoding);
} catch (UnsupportedEncodingException var4) {
var5 = var1.getBytes();
break label16;
}
var5 = var3;
}
this.reserve(var5.length + 10);
if (var5.length > 255) {
this.writeHead((byte) 7, var2);
this.field_80728.putInt(var5.length);
} else {
this.writeHead((byte) 6, var2);
this.field_80728.put((byte) var5.length);
}
this.field_80728.put(var5);
}
public <T> void write(Collection<T> var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
if (var1 == null) {
var2 = 0;
} else {
var2 = var1.size();
}
this.write(var2, 0);
if (var1 != null) {
for (T t : var1) {
this.write(t, 0);
}
}
}
public <K, V> void write(Map<K, V> var1, int var2) {
this.reserve(8);
this.writeHead((byte) 8, var2);
if (var1 == null) {
var2 = 0;
} else {
var2 = var1.size();
}
this.write(var2, 0);
if (var1 != null) {
for (Entry<K, V> kvEntry : var1.entrySet()) {
this.write(((Entry) kvEntry).getKey(), 0);
this.write(((Entry) kvEntry).getValue(), 1);
}
}
}
public void write(short var1, int var2) {
this.reserve(4);
if (var1 >= -128 && var1 <= 127) {
this.write((byte) var1, var2);
} else {
this.writeHead((byte) 1, var2);
this.field_80728.putShort(var1);
}
}
public void write(boolean var1, int var2) {
byte var3;
if (var1) {
var3 = 1;
} else {
var3 = 0;
}
this.write(var3, var2);
}
public void write(byte[] var1, int var2) {
this.reserve(var1.length + 8);
this.writeHead((byte) 13, var2);
this.writeHead((byte) 0, 0);
this.write(var1.length, 0);
this.field_80728.put(var1);
}
public void write(double[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public void write(float[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public void write(int[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public void write(long[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public <T> void write(T[] var1, int var2) {
this.writeArray(var1, var2);
}
public void write(short[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public void write(boolean[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public void writeByteString(String var1, int var2) {
this.reserve(var1.length() + 10);
byte[] var3 = HexUtil.hexStr2Bytes(var1);
if (var3.length > 255) {
this.writeHead((byte) 7, var2);
this.field_80728.putInt(var3.length);
this.field_80728.put(var3);
} else {
this.writeHead((byte) 6, var2);
this.field_80728.put((byte) var3.length);
this.field_80728.put(var3);
}
}
public void writeHead(byte var1, int tag) {
byte var3;
if (tag < 15) {
var3 = (byte) (tag << 4 | var1);
this.field_80728.put(var3);
} else if (tag < 256) {
var3 = (byte) (var1 | 240);
this.field_80728.put(var3);
this.field_80728.put((byte) tag);
} else {
throw new JceEncodeException("tag is too large: " + tag);
}
}
public void writeStringByte(String var1, int var2) {
byte[] var3 = HexUtil.hexStr2Bytes(var1);
this.reserve(var3.length + 10);
if (var3.length > 255) {
this.writeHead((byte) 7, var2);
this.field_80728.putInt(var3.length);
this.field_80728.put(var3);
} else {
this.writeHead((byte) 6, var2);
this.field_80728.put((byte) var3.length);
this.field_80728.put(var3);
}
}
}

View File

@ -1,78 +0,0 @@
package jce.jce;
import java.io.Serializable;
public abstract class JceStruct implements Serializable {
public static final byte BYTE = 0;
public static final byte DOUBLE = 5;
public static final byte FLOAT = 4;
public static final byte INT = 2;
public static final int JCE_MAX_STRING_LENGTH = 104857600;
public static final byte LIST = 9;
public static final byte LONG = 3;
public static final byte MAP = 8;
public static final byte SHORT = 1;
public static final byte SIMPLE_LIST = 13;
public static final byte STRING1 = 6;
public static final byte STRING4 = 7;
public static final byte STRUCT_BEGIN = 10;
public static final byte STRUCT_END = 11;
public static final byte ZERO_TAG = 12;
public static String toDisplaySimpleString(JceStruct var0) {
if (var0 == null) {
return null;
} else {
StringBuilder var1 = new StringBuilder();
var0.displaySimple(var1, 0);
return var1.toString();
}
}
public boolean containField(String var1) {
return false;
}
public void display(StringBuilder var1, int var2) {
}
public void displaySimple(StringBuilder var1, int var2) {
}
public Object getFieldByName(String var1) {
return null;
}
public JceStruct newInit() {
return null;
}
public abstract void readFrom(JceInputStream var1);
public void recyle() {
}
public void setFieldByName(String var1, Object var2) {
}
public byte[] toByteArray() {
JceOutputStream var1 = new JceOutputStream();
this.writeTo(var1);
return var1.toByteArray();
}
public byte[] toByteArray(String var1) {
JceOutputStream var2 = new JceOutputStream();
var2.setServerEncoding(var1);
this.writeTo(var2);
return var2.toByteArray();
}
public String toString() {
StringBuilder var1 = new StringBuilder();
this.display(var1, 0);
return var1.toString();
}
public abstract void writeTo(JceOutputStream var1);
}

View File

@ -1,594 +0,0 @@
package jce.jce;
import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.List;
public final class JceUtil {
private static final byte[] highDigits;
private static final int iConstant = 37;
private static final int iTotal = 17;
private static final byte[] lowDigits;
static {
byte[] var1 = new byte[]{48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70};
byte[] var2 = new byte[256];
byte[] var3 = new byte[256];
for (int var0 = 0; var0 < 256; ++var0) {
var2[var0] = var1[var0 >>> 4];
var3[var0] = var1[var0 & 15];
}
highDigits = var2;
lowDigits = var3;
}
public static int compareTo(byte var0, byte var1) {
if (var0 < var1) {
return -1;
} else {
return var0 > var1 ? 1 : 0;
}
}
public static int compareTo(char var0, char var1) {
if (var0 < var1) {
return -1;
} else {
return var0 > var1 ? 1 : 0;
}
}
public static int compareTo(double var0, double var2) {
if (var0 < var2) {
return -1;
} else {
return var0 > var2 ? 1 : 0;
}
}
public static int compareTo(float var0, float var1) {
if (var0 < var1) {
return -1;
} else {
return var0 > var1 ? 1 : 0;
}
}
public static int compareTo(int var0, int var1) {
if (var0 < var1) {
return -1;
} else {
return var0 > var1 ? 1 : 0;
}
}
public static int compareTo(long var0, long var2) {
if (var0 < var2) {
return -1;
} else {
return var0 > var2 ? 1 : 0;
}
}
public static <T extends Comparable<T>> int compareTo(T var0, T var1) {
return var0.compareTo(var1);
}
public static <T extends Comparable<T>> int compareTo(List<T> var0, List<T> var1) {
Iterator var3 = var0.iterator();
Iterator var4 = var1.iterator();
while (var3.hasNext() && var4.hasNext()) {
int var2 = ((Comparable) var3.next()).compareTo(var4.next());
if (var2 != 0) {
return var2;
}
}
return compareTo(var3.hasNext(), var4.hasNext());
}
public static int compareTo(short var0, short var1) {
if (var0 < var1) {
return -1;
} else {
return var0 > var1 ? 1 : 0;
}
}
public static int compareTo(boolean var0, boolean var1) {
byte var3 = 1;
byte var2;
if (var0) {
var2 = 1;
} else {
var2 = 0;
}
if (!var1) {
var3 = 0;
}
return var2 - var3;
}
public static int compareTo(byte[] var0, byte[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(char[] var0, char[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(double[] var0, double[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(float[] var0, float[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(int[] var0, int[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(long[] var0, long[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static <T extends Comparable<T>> int compareTo(T[] var0, T[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = var0[var2].compareTo(var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(short[] var0, short[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(boolean[] var0, boolean[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static boolean equals(byte var0, byte var1) {
return var0 == var1;
}
public static boolean equals(char var0, char var1) {
return var0 == var1;
}
public static boolean equals(double var0, double var2) {
return var0 == var2;
}
public static boolean equals(float var0, float var1) {
return var0 == var1;
}
public static boolean equals(int var0, int var1) {
return var0 == var1;
}
public static boolean equals(long var0, long var2) {
return var0 == var2;
}
public static boolean equals(Object var0, Object var1) {
return var0.equals(var1);
}
public static boolean equals(short var0, short var1) {
return var0 == var1;
}
public static boolean equals(boolean var0, boolean var1) {
return var0 == var1;
}
public static String getHexdump(ByteBuffer var0) {
int var1 = var0.remaining();
if (var1 == 0) {
return "empty";
} else {
StringBuffer var4 = new StringBuffer(var0.remaining() * 3 - 1);
int var2 = var0.position();
int var3 = var0.get() & 255;
var4.append((char) highDigits[var3]);
var4.append((char) lowDigits[var3]);
--var1;
while (var1 > 0) {
var4.append(' ');
var3 = var0.get() & 255;
var4.append((char) highDigits[var3]);
var4.append((char) lowDigits[var3]);
--var1;
}
var0.position(var2);
return var4.toString();
}
}
public static String getHexdump(byte[] var0) {
return getHexdump(ByteBuffer.wrap(var0));
}
public static byte[] getJceBufArray(ByteBuffer var0) {
byte[] var1 = new byte[var0.position()];
System.arraycopy(var0.array(), 0, var1, 0, var1.length);
return var1;
}
public static int hashCode(byte var0) {
return var0 + 629;
}
public static int hashCode(char var0) {
return var0 + 629;
}
public static int hashCode(double var0) {
return hashCode(Double.doubleToLongBits(var0));
}
public static int hashCode(float var0) {
return Float.floatToIntBits(var0) + 629;
}
public static int hashCode(int var0) {
return var0 + 629;
}
public static int hashCode(long var0) {
return (int) (var0 >> 32 ^ var0) + 629;
}
public static int hashCode(Object var0) {
if (var0 == null) {
return 629;
} else if (var0.getClass().isArray()) {
if (var0 instanceof long[]) {
return hashCode((long[]) ((long[]) var0));
} else if (var0 instanceof int[]) {
return hashCode((int[]) ((int[]) var0));
} else if (var0 instanceof short[]) {
return hashCode((short[]) ((short[]) var0));
} else if (var0 instanceof char[]) {
return hashCode((char[]) ((char[]) var0));
} else if (var0 instanceof byte[]) {
return hashCode((byte[]) ((byte[]) var0));
} else if (var0 instanceof double[]) {
return hashCode((double[]) ((double[]) var0));
} else if (var0 instanceof float[]) {
return hashCode((float[]) ((float[]) var0));
} else if (var0 instanceof boolean[]) {
return hashCode((boolean[]) ((boolean[]) var0));
} else {
return var0 instanceof JceStruct[] ? hashCode((JceStruct[]) ((JceStruct[]) var0)) : hashCode((Object) ((Object[]) ((Object[]) var0)));
}
} else {
return var0 instanceof JceStruct ? var0.hashCode() : var0.hashCode() + 629;
}
}
public static int hashCode(short var0) {
return var0 + 629;
}
public static int hashCode(boolean var0) {
byte var1;
if (var0) {
var1 = 0;
} else {
var1 = 1;
}
return var1 + 629;
}
public static int hashCode(byte[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + var0[var2];
++var2;
}
}
return var3;
}
public static int hashCode(char[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + var0[var2];
++var2;
}
}
return var3;
}
public static int hashCode(double[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + (int) (Double.doubleToLongBits(var0[var2]) ^ Double.doubleToLongBits(var0[var2]) >> 32);
++var2;
}
}
return var3;
}
public static int hashCode(float[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + Float.floatToIntBits(var0[var2]);
++var2;
}
}
return var3;
}
public static int hashCode(int[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + var0[var2];
++var2;
}
}
return var3;
}
public static int hashCode(long[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + (int) (var0[var2] ^ var0[var2] >> 32);
++var2;
}
}
return var3;
}
public static int hashCode(JceStruct[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + var0[var2].hashCode();
++var2;
}
}
return var3;
}
public static int hashCode(short[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + var0[var2];
++var2;
}
}
return var3;
}
public static int hashCode(boolean[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
byte var4;
if (var0[var2]) {
var4 = 0;
} else {
var4 = 1;
}
var1 = var4 + var1 * 37;
++var2;
}
}
return var3;
}
}

View File

@ -1,7 +0,0 @@
package jce.jce;
import java.nio.ByteBuffer;
public interface OnIllegalArgumentException {
void onException(IllegalArgumentException var1, ByteBuffer var2, int var3, int var4);
}