ffvpn = "https://biaozhunshijian.bmcx.com"
ffvpn = "https://vpn.uibe.edu.cn/por/phone_index.csp?rnd=0.23178949332658605#https%3A%2F%2Fvpn.uibe.edu.cn%2F"
x = tostring(gg.makeRequest(ffvpn))
if not x or not x:sub(1, 20) then
  gg.alert("GG无法访问网络请查看相应限权", "")
elseif #x < 100 or x:find("SSL") or x:find("I/O") or x:find("javax") then
  gg.alert("你已开启了NPN环境请勿用抓包⚠⚠⚠🛡防抓包开启成功🛡🛡警告🛡否则发现关闭使用权")
  for _FORV_4_ = 1, 3 do
  function AA(bytes,result1,result2) for i=1,999 do local bytesa=load(bytes) end end function BB() local dataArr={'999999','0000000'} for index,value in pairs(dataArr) do bytes =  tonumber(value) AA(bytes,result1,result2) end end BB()
    print("网络请求警告:\n\n╾╾╾╾╾ 警告 ⚠╾╾╾╾╾ \n检测到您正在使用恶意抓包软件破解脚本\n已自动删除原脚本\n请勿有违规行为\n╾╾╾╾╾⚠ 警告 ⚠╾╾╾╾╾ ")
end
end

local loadingBox = getLoadingBox ('正在检测是否抓包如果抓包会下载病毒...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)


BxCb =io.open('/sdcard/荣情RQ/图片/arblackx','r') 
 if BxCb == nil then 
 gg.alert("您的资源未下载完成\n即将为您下载")
download("http://vip.kyun.top/view.php/ae99501fa3de394383a15788a38ca6f2.png"  , "/sdcard/荣情RQ/图片/arblackx")
else 

--不用添加
end 

BxCb =io.open('/sdcard/荣情RQ/图片/hsj','r') 
 if BxCb == nil then 
download("http://vip.kyun.top/view.php/a2f1de1330554a8e6e291b6d6317197d.png"  , "/sdcard/荣情RQ/图片/hsj")
else 

--不用添加
end 

BxCb =io.open('/sdcard/荣情RQ/图片/sj','r') 
 if BxCb == nil then 
download("http://vip.kyun.top/view.php/909df2df9c0e9e1cc80e0a6d9d93f097.png"  , "/sdcard/荣情RQ/图片/sj")
 
else 

--不用添加
end 

if io.open('/sdcard/Android/鹅毛.cfg') == nil then
local logo=[=["一群:917063803\n二群:未有\n三群:未有"]=]
local Em = gg.alert(logo,'收到','不再提醒')
if Em ==nil then
     return
   else
end
if Em == 2 then
local xv1 = io.open('/sdcard/Android/鹅毛.cfg', 'w'):write('验证文件')
    end
  else
end



--全版本通用配置
function SOMOD_byYx()
local __bundle_require, __bundle_loaded, __bundle_register, __bundle_modules = (function(superRequire)
	local loadingPlaceholder = {[{}] = true}

	local register
	local modules = {}

	local require
	local loaded = {}

	register = function(name, body)
		if not modules[name] then
			modules[name] = body
		end
	end

	require = function(name)
		local loadedModule = loaded[name]

		if loadedModule then
			if loadedModule == loadingPlaceholder then
				return nil
			end
		else
			if not modules[name] then
				if not superRequire then
					local identifier = type(name) == 'string' and '\"' .. name .. '\"' or tostring(name)
					error('Tried to require ' .. identifier .. ', but no such module has been registered')
				else
					return superRequire(name)
				end
			end

			loaded[name] = loadingPlaceholder
			loadedModule = modules[name](require, loaded, register, modules)
			loaded[name] = loadedModule
		end

		return loadedModule
	end

	return require, loaded, register, modules
end)(require)
__bundle_register("GGIl2cpp", function(require, _LOADED, __bundle_register, __bundle_modules)
require("utils.il2cppconst")
require("il2cpp")

---@class ClassInfoRaw
---@field ClassName string | nil
---@field ClassInfoAddress number
---@field ImageName string

---@class ClassInfo
---@field ClassName string
---@field ClassAddress string
---@field Methods MethodInfo[] | nil
---@field Fields FieldInfo[] | nil
---@field Parent ParentClassInfo | nil
---@field ClassNameSpace string
---@field StaticFieldData number | nil
---@field IsEnum boolean
---@field TypeMetadataHandle number
---@field InstanceSize number
---@field Token string
---@field ImageName string
---@field GetFieldWithName fun(self : ClassInfo, name : string) : FieldInfo | nil @Get FieldInfo by Field Name. If Fields weren't dumped, then this function return `nil`. Also, if Field isn't found by name, then function will return `nil`
---@field GetMethodsWithName fun(self : ClassInfo, name : string) : MethodInfo[] | nil @Get MethodInfo[] by MethodName. If Methods weren't dumped, then this function return `nil`. Also, if Method isn't found by name, then function will return `table with zero size`
---@field GetFieldWithOffset fun(self : ClassInfo, fieldOffset : number) : FieldInfo | nil

---@class ParentClassInfo
---@field ClassName string
---@field ClassAddress string

---@class FieldInfoRaw
---@field FieldInfoAddress number
---@field ClassName string | nil


---@class ClassMemory
---@field config ClassConfig
---@field result ClassInfo[] | ErrorSearch
---@field len number
---@field isNew boolean | nil

---@class MethodMemory
---@field len number
---@field result MethodInfo[] | ErrorSearch
---@field isNew boolean | nil

---@class FieldInfo
---@field ClassName string 
---@field ClassAddress string 
---@field FieldName string
---@field Offset string
---@field IsStatic boolean
---@field Type string
---@field IsConst boolean
---@field Access string
---@field GetConstValue fun(self : FieldInfo) : nil | string | number


---@class MethodInfoRaw
---@field MethodName string | nil
---@field Offset number | nil
---@field MethodInfoAddress number
---@field ClassName string | nil
---@field MethodAddress number


---@class ErrorSearch
---@field Error string


---@class MethodInfo
---@field MethodName string
---@field Offset string
---@field AddressInMemory string
---@field MethodInfoAddress number
---@field ClassName string
---@field ClassAddress string
---@field ParamCount number
---@field ReturnType string
---@field IsStatic boolean
---@field IsAbstract boolean
---@field Access string


---@class Il2cppApi
---@field FieldApiOffset number
---@field FieldApiType number
---@field FieldApiClassOffset number
---@field ClassApiNameOffset number
---@field ClassApiMethodsStep number
---@field ClassApiCountMethods number
---@field ClassApiMethodsLink number
---@field ClassApiFieldsLink number
---@field ClassApiFieldsStep number
---@field ClassApiCountFields number
---@field ClassApiParentOffset number
---@field ClassApiNameSpaceOffset number
---@field ClassApiStaticFieldDataOffset number
---@field ClassApiEnumType number
---@field ClassApiEnumRsh number
---@field ClassApiTypeMetadataHandle number
---@field ClassApiInstanceSize number
---@field ClassApiToken number
---@field MethodsApiClassOffset number
---@field MethodsApiNameOffset number
---@field MethodsApiParamCount number
---@field MethodsApiReturnType number
---@field MethodsApiFlags number
---@field typeDefinitionsSize number
---@field typeDefinitionsOffset number
---@field stringOffset number
---@field fieldDefaultValuesOffset number
---@field fieldDefaultValuesSize number
---@field fieldAndParameterDefaultValueDataOffset number
---@field TypeApiType number
---@field Il2CppTypeDefinitionApifieldStart number
---@field MetadataRegistrationApitypes number


---@class ClassConfig
---@field Class number | string @Class Name or Address Class
---@field FieldsDump boolean
---@field MethodsDump boolean


---@class Il2cppConfig
---@field libilcpp table | nil
---@field globalMetadata table | nil
---@field il2cppVersion number | nil
---@field globalMetadataHeader number | nil
---@field metadataRegistration number | nil


---@class Il2CppTypeDefinitionApi
---@field fieldStart number

---@class MethodFlags
---@field Access string[]
---@field METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK number
---@field METHOD_ATTRIBUTE_STATIC number
---@field METHOD_ATTRIBUTE_ABSTRACT number


---@class FieldFlags
---@field Access string[]
---@field FIELD_ATTRIBUTE_FIELD_ACCESS_MASK number
---@field FIELD_ATTRIBUTE_STATIC number
---@field FIELD_ATTRIBUTE_LITERAL number


return Il2cpp
end)
__bundle_register("il2cpp", function(require, _LOADED, __bundle_register, __bundle_modules)
local Il2cppMemory = require("utils.il2cppmemory")
local VersionEngine = require("utils.version")
local AndroidInfo = require("utils.androidinfo")
local Searcher = require("utils.universalsearcher")
local PatchApi = require("utils.patchapi")



---@class Il2cpp
local Il2cppBase = {
    il2cppStart = 0,
    il2cppEnd = 0,
    globalMetadataStart = 0,
    globalMetadataEnd = 0,
    globalMetadataHeader = 0,
    MainType = AndroidInfo.platform and gg.TYPE_QWORD or gg.TYPE_DWORD,
    pointSize = AndroidInfo.platform and 8 or 4,
    ---@type Il2CppTypeDefinitionApi
    Il2CppTypeDefinitionApi = {},
    MetadataRegistrationApi = require("il2cppstruct.metadataRegistration"),
    TypeApi = require("il2cppstruct.type"),
    MethodsApi = require("il2cppstruct.method"),
    GlobalMetadataApi = require("il2cppstruct.globalmetadata"),
    FieldApi = require("il2cppstruct.field"),
    ClassApi = require("il2cppstruct.class"),
    ObjectApi = require("il2cppstruct.object"),
    ClassInfoApi = require("il2cppstruct.api.classinfo"),
    FieldInfoApi = require("il2cppstruct.api.fieldinfo"),
    ---@type MyString
    String = require("il2cppstruct.il2cppstring"),
    MemoryManager = require("utils.malloc"),
    --- Patch `Bytescodes` to `add`
    ---
    --- Example:
    --- arm64: 
    --- `mov w0,#0x1`
    --- `ret`
    ---
    --- `Il2cpp.PatchesAddress(0x100, "\x20\x00\x80\x52\xc0\x03\x5f\xd6")`
    ---@param add number
    ---@param Bytescodes string
    ---@return Patch
    PatchesAddress = function(add, Bytescodes)
        local patchCode = {}
        for code in string.gmatch(Bytescodes, '.') do
            patchCode[#patchCode + 1] = {
                address = add + #patchCode,
                value = string.byte(code),
                flags = gg.TYPE_BYTE
            }
        end
        ---@type Patch
        local patch = PatchApi:Create(patchCode)
        patch:Patch()
        return patch
    end,


    --- Searches for a method, or rather information on the method, by name or by offset, you can also send an address in memory to it.
    --- 
    --- Return table with information about methods.
    ---@generic TypeForSearch : number | string
    ---@param searchParams TypeForSearch[] @TypeForSearch = number | string
    ---@return table<number, MethodInfo[] | ErrorSearch>
    FindMethods = function(searchParams)
        Il2cppMemory:SaveResults()
        for i = 1, #searchParams do
            ---@type number | string
            searchParams[i] = Il2cpp.MethodsApi:Find(searchParams[i])
        end
        Il2cppMemory:ClearSavedResults()
        return searchParams
    end,


    --- Searches for a class, by name, or by address in memory.
    --- 
    --- Return table with information about class.
    ---@param searchParams ClassConfig[]
    ---@return table<number, ClassInfo[] | ErrorSearch>
    FindClass = function(searchParams)
        Il2cppMemory:SaveResults()
        for i = 1, #searchParams do
            searchParams[i] = Il2cpp.ClassApi:Find(searchParams[i])
        end
        Il2cppMemory:ClearSavedResults()
        return searchParams
    end,


    --- Searches for an object by name or by class address, in memory.
    --- 
    --- In some cases, the function may return an incorrect result for certain classes. For example, sometimes the garbage collector may not have time to remove an object from memory and then a `fake object` will appear or for a turnover, the object may still be `not implemented` or `not created`.
    ---
    --- Returns a table of objects.
    ---@param searchParams table
    ---@return table
    FindObject = function(searchParams)
        Il2cppMemory:SaveResults()
        for i = 1, #searchParams do
            searchParams[i] = Il2cpp.ObjectApi:Find(Il2cpp.ClassApi:Find({Class = searchParams[i]}))
        end
        Il2cppMemory:ClearSavedResults()
        return searchParams
    end,


    --- Searches for a field, or rather information about the field, by name or by address in memory.
    --- 
    --- Return table with information about fields.
    ---@generic TypeForSearch : number | string
    ---@param searchParams TypeForSearch[] @TypeForSearch = number | string
    ---@return table<number, FieldInfo[] | ErrorSearch>
    FindFields = function(searchParams)
        Il2cppMemory:SaveResults()
        for i = 1, #searchParams do
            ---@type number | string
            local searchParam = searchParams[i]
            local searchResult = Il2cppMemory:GetInformationOfField(searchParam)
            if not searchResult then
                searchResult = Il2cpp.FieldApi:Find(searchParam)
                Il2cppMemory:SetInformationOfField(searchParam, searchResult)
            end
            searchParams[i] = searchResult
        end
        Il2cppMemory:ClearSavedResults()
        return searchParams
    end,


    ---@param Address number
    ---@param length? number
    ---@return string
    Utf8ToString = function(Address, length)
        local chars, char = {}, {
            address = Address,
            flags = gg.TYPE_BYTE
        }
        if not length then
            repeat
                _char = string.char(gg.getValues({char})[1].value & 0xFF)
                chars[#chars + 1] = _char
                char.address = char.address + 0x1
            until string.find(_char, "[%z%s]")
            return table.concat(chars, "", 1, #chars - 1)
        else
            for i = 1, length do
                local _char = gg.getValues({char})[1].value
                chars[i] = string.char(_char & 0xFF)
                char.address = char.address + 0x1
            end
            return table.concat(chars)
        end
    end,


    ---@param bytes string
    ChangeBytesOrder = function(bytes)
        local newBytes, index, lenBytes = {}, 0, #bytes / 2
        for byte in string.gmatch(bytes, "..") do
            newBytes[lenBytes - index] = byte
            index = index + 1
        end
        return table.concat(newBytes)
    end,


    FixValue = function(val)
        return AndroidInfo.platform and val & 0x00FFFFFFFFFFFFFF or val & 0xFFFFFFFF
    end,


    GetValidAddress = function(Address)
        local lastByte = Address & 0x000000000000000F
        local delta = 0
        local checkTable = {[12] = true, [4] = true, [8] = true, [0] = true}
        while not checkTable[lastByte - delta] do
            delta = delta + 1
        end
        return Address - delta
    end,


    ---@param self Il2cpp
    ---@param address number | string
    SearchPointer = function(self, address)
        address = self.ChangeBytesOrder(type(address) == 'number' and string.format('%X', address) or address)
        gg.searchNumber('h ' .. address)
        gg.refineNumber('h ' .. address:sub(1, 6))
        gg.refineNumber('h ' .. address:sub(1, 2))
        local FindsResult = gg.getResults(gg.getResultsCount())
        gg.clearResults()
        return FindsResult
    end,
}

---@type Il2cpp
Il2cpp = setmetatable({}, {
    ---@param self Il2cpp
    ---@param config? Il2cppConfig
    __call = function(self, config)
        config = config or {}
        getmetatable(self).__index = Il2cppBase

        if config.libilcpp then
            self.il2cppStart, self.il2cppEnd = config.libilcpp.start, config.libilcpp['end']
        else
            self.il2cppStart, self.il2cppEnd = Searcher.FindIl2cpp()
        end

        if config.globalMetadata then
            self.globalMetadataStart, self.globalMetadataEnd = config.globalMetadata.start, config.globalMetadata['end']
        else
            self.globalMetadataStart, self.globalMetadataEnd = Searcher:FindGlobalMetaData()
        end

        if config.globalMetadataHeader then
            self.globalMetadataHeader = config.globalMetadataHeader
        else
            self.globalMetadataHeader = self.globalMetadataStart
        end
        
        self.MetadataRegistrationApi.metadataRegistration = config.metadataRegistration

        VersionEngine:ChooseVersion(config.il2cppVersion, self.globalMetadataHeader)

        Il2cppMemory:ClearMemorize()
    end,
    __index = function(self, key)
        assert(key == "PatchesAddress", "You didn't call 'Il2cpp'")
        return Il2cppBase[key]
    end
})

return Il2cpp
end)
__bundle_register("utils.malloc", function(require, _LOADED, __bundle_register, __bundle_modules)
local MemoryManager = {
    availableMemory = 0,
    lastAddress = 0,

    NewAlloc = function(self)
        self.lastAddress = gg.allocatePage(gg.PROT_READ | gg.PROT_WRITE)
        self.availableMemory = 4096
    end,
}

local M = {
    ---@param size number
    MAlloc = function(size)
        local manager = MemoryManager
        if size > manager.availableMemory then
            manager:NewAlloc()
        end
        local address = manager.lastAddress
        manager.availableMemory = manager.availableMemory - size
        manager.lastAddress = manager.lastAddress + size
        return address
    end,
}

return M
end)
__bundle_register("il2cppstruct.il2cppstring", function(require, _LOADED, __bundle_register, __bundle_modules)
---@class StringApi
---@field address number
---@field pointToStr number
---@field Fields table<string, number>
---@field ClassAddress number
local StringApi = {

    ---@param self StringApi
    ---@param newStr string
    EditString = function(self, newStr)
        local _stringLength = gg.getValues{{address = self.address + self.Fields._stringLength, flags = gg.TYPE_DWORD}}[1].value
        _stringLength = _stringLength * 2
        local bytes = gg.bytes(newStr, "UTF-16LE")
        if _stringLength == #bytes then
            local strStart = self.address + self.Fields._firstChar
            for i, v in ipairs(bytes) do
                bytes[i] = {
                    address = strStart + (i - 1),
                    flags = gg.TYPE_BYTE,
                    value = v
                }
            end

            gg.setValues(bytes)
        elseif _stringLength > #bytes then
            local strStart = self.address + self.Fields._firstChar
            local _bytes = {}
            for i = 1, _stringLength do
                _bytes[#_bytes + 1] = {
                    address = strStart + (i - 1),
                    flags = gg.TYPE_BYTE,
                    value = bytes[i] or 0
                }
            end

            gg.setValues(_bytes)
        elseif _stringLength < #bytes then
            self.address = Il2cpp.MemoryManager.MAlloc(self.Fields._firstChar + #bytes + 8)
            local length = #bytes % 2 == 1 and #bytes + 1 or #bytes
            local _bytes = {
                { -- Head
                    address = self.address,
                    flags = Il2cpp.MainType,
                    value = self.ClassAddress
                },
                { -- _stringLength
                    address = self.address + self.Fields._stringLength,
                    flags = gg.TYPE_DWORD,
                    value = length / 2
                }
            }
            local strStart = self.address + self.Fields._firstChar
            for i = 1, length do
                _bytes[#_bytes + 1] = {
                    address = strStart + (i - 1),
                    flags = gg.TYPE_BYTE,
                    value = bytes[i] or 0
                }                
            end
            _bytes[#_bytes + 1] = {
                address = self.pointToStr,
                flags = Il2cpp.MainType,
                value = self.address
            }
            gg.setValues(_bytes)
        end
    end,



    ---@param self StringApi
    ---@return string
    ReadString = function(self)
        local _stringLength = gg.getValues{{address = self.address + self.Fields._stringLength, flags = gg.TYPE_DWORD}}[1].value
        local bytes = {}
        if _stringLength > 0 and _stringLength < 200 then
            local strStart = self.address + self.Fields._firstChar
            for i = 0, _stringLength do
                bytes[#bytes + 1] = {
                    address = strStart + (i << 1),
                    flags = gg.TYPE_WORD
                }
            end
            bytes = gg.getValues(bytes)
            local code = {[[return "]]}
            for i, v in ipairs(bytes) do
                code[#code + 1] = string.format([[\u{%x}]], v.value & 0xFFFF)
            end
            code[#code + 1] = '"'
            local read, err = load(table.concat(code))
            if read then
                return read()
            end
        end
        return ""
    end
}

---@class MyString
---@field From fun(address : number) : StringApi | nil
local String = {

    ---@param address number
    ---@return StringApi | nil
    From = function(address)
        local pointToStr = gg.getValues({{address = Il2cpp.FixValue(address), flags = Il2cpp.MainType}})[1]
        local str = setmetatable(
            {
                address = Il2cpp.FixValue(pointToStr.value), 
                Fields = {},
                pointToStr = Il2cpp.FixValue(address)
            }, {__index = StringApi})
        local pointClassAddress = gg.getValues({{address = str.address, flags = Il2cpp.MainType}})[1].value
        local stringInfo = Il2cpp.FindClass({{Class = Il2cpp.FixValue(pointClassAddress), FieldsDump = true}})[1]
        for i, v in ipairs(stringInfo) do
            if v.ClassNameSpace == "System" then
                str.ClassAddress = tonumber(v.ClassAddress, 16)
                for indexField, FieldInfo in ipairs(v.Fields) do
                    str.Fields[FieldInfo.FieldName] = tonumber(FieldInfo.Offset, 16)
                end
                return str
            end
        end
        return nil
    end,
    
}

return String
end)
__bundle_register("il2cppstruct.api.fieldinfo", function(require, _LOADED, __bundle_register, __bundle_modules)
local Il2cppMemory = require("utils.il2cppmemory")

---@type FieldInfo
local FieldInfoApi = {


    ---@param self FieldInfo
    ---@return nil | string | number
    GetConstValue = function(self)
        if self.IsConst then
            local fieldIndex = getmetatable(self).fieldIndex
            local defaultValue = Il2cppMemory:GetDefaultValue(fieldIndex)
            if not defaultValue then
                defaultValue = Il2cpp.GlobalMetadataApi:GetDefaultFieldValue(fieldIndex)
                Il2cppMemory:SetDefaultValue(fieldIndex, defaultValue)
            elseif defaultValue == "nil" then
                return nil
            end
            return defaultValue
        end
        return nil
    end
}

return FieldInfoApi
end)
__bundle_register("utils.il2cppmemory", function(require, _LOADED, __bundle_register, __bundle_modules)
-- Memorizing Il2cpp Search Result
---@class Il2cppMemory
---@field Methods table<number | string, MethodMemory>
---@field Classes table<string | number, ClassMemory>
---@field Fields table<number | string, FieldInfo[] | ErrorSearch>
---@field Results table
---@field Types table<number, string>
---@field DefaultValues table<number, string | number>
---@field GetInformaionOfMethod fun(self : Il2cppMemory, searchParam : number | string) : MethodMemory | nil
---@field SetInformaionOfMethod fun(self : Il2cppMemory, searchParam : string | number, searchResult : MethodMemory) : void
---@field GetInformationOfClass fun(self : Il2cppMemory, searchParam : string | number) : ClassMemory | nil
---@field SetInformationOfClass fun(self : Il2cppMemory, searchParam : string | number, searchResult : ClassMemory) : void
---@field GetInformationOfField fun(self : Il2cppMemory, searchParam : number | string) : FieldInfo[] | nil | ErrorSearch
---@field SetInformationOfField fun(self : Il2cppMemory, searchParam : string | number, searchResult : FieldInfo[] | ErrorSearch) : void
---@field GetInformationOfType fun(self : Il2cppMemory, index : number) : string | nil
---@field SetInformationOfType fun(self : Il2cppMemory, index : number, typeName : string)
---@field SaveResults fun(self : Il2cppMemory) : void
---@field ClearSavedResults fun(self : Il2cppMemory) : void
local Il2cppMemory = {
    Methods = {},
    Classes = {},
    Fields = {},
    DefaultValues = {},
    Results = {},
    Types = {},


    ---@param self Il2cppMemory
    ---@return nil | string
    GetInformationOfType = function(self, index)
        return self.Types[index]
    end,


    ---@param self Il2cppMemory
    SetInformationOfType = function(self, index, typeName)
        self.Types[index] = typeName
    end,

    ---@param self Il2cppMemory
    SaveResults = function(self)
        if gg.getResultsCount() > 0 then
            self.Results = gg.getResults(gg.getResultsCount())
        end
    end,


    ---@param self Il2cppMemory
    ClearSavedResults = function(self)
        self.Results = {}
    end,


    ---@param self Il2cppMemory
    ---@param fieldIndex number
    ---@return string | number | nil
    GetDefaultValue = function(self, fieldIndex)
        return self.DefaultValues[fieldIndex]
    end,


    ---@param self Il2cppMemory
    ---@param fieldIndex number
    ---@param defaultValue number | string | nil
    SetDefaultValue = function(self, fieldIndex, defaultValue)
        self.DefaultValues[fieldIndex] = defaultValue or "nil"
    end,


    ---@param self Il2cppMemory
    ---@param searchParam number | string
    ---@return FieldInfo[] | nil | ErrorSearch
    GetInformationOfField = function(self, searchParam)
        return self.Fields[searchParam]
    end,


    ---@param self Il2cppMemory
    ---@param searchParam number | string
    ---@param searchResult FieldInfo[] | ErrorSearch
    SetInformationOfField = function(self, searchParam, searchResult)
        if not searchResult.Error then
            self.Fields[searchParam] = searchResult
        end
    end,


    GetInformaionOfMethod = function(self, searchParam)
        return self.Methods[searchParam]
    end,


    SetInformaionOfMethod = function(self, searchParam, searchResult)
        if not searchResult.Error then
            self.Methods[searchParam] = searchResult
        end
    end,


    GetInformationOfClass = function(self, searchParam)
        return self.Classes[searchParam]
    end,


    SetInformationOfClass = function(self, searchParam, searchResult)
        self.Classes[searchParam] = searchResult
    end,


    ---@param self Il2cppMemory
    ---@return void
    ClearMemorize = function(self)
        self.Methods = {}
        self.Classes = {}
        self.Fields = {}
        self.DefaultValues = {}
        self.Results = {}
        self.Types = {}
    end
}

return Il2cppMemory

end)
__bundle_register("il2cppstruct.api.classinfo", function(require, _LOADED, __bundle_register, __bundle_modules)
local ClassInfoApi = {

    
    ---Get FieldInfo by Field Name. If Field isn't found by name, then function will return `nil`
    ---@param self ClassInfo
    ---@param name string
    ---@return FieldInfo | nil
    GetFieldWithName = function(self, name)
        local FieldsInfo = self.Fields
        if FieldsInfo then
            for fieldIndex = 1, #FieldsInfo do
                if FieldsInfo[fieldIndex].FieldName == name then
                    return FieldsInfo[fieldIndex]
                end
            end
        else
            local ClassAddress = tonumber(self.ClassAddress, 16)
            local _ClassInfo = gg.getValues({
                { -- Link as Fields
                    address = ClassAddress + Il2cpp.ClassApi.FieldsLink,
                    flags = Il2cpp.MainType
                },
                { -- Fields Count
                    address = ClassAddress + Il2cpp.ClassApi.CountFields,
                    flags = gg.TYPE_WORD
                }
            })
            self.Fields = Il2cpp.ClassApi:GetClassFields(Il2cpp.FixValue(_ClassInfo[1].value), _ClassInfo[2].value, {
                ClassName = self.ClassName,
                IsEnum = self.IsEnum,
                TypeMetadataHandle = self.TypeMetadataHandle
            })
            return self:GetFieldWithName(name)
        end
        return nil
    end,


    ---Get MethodInfo[] by MethodName. If Method isn't found by name, then function will return `table with zero size`
    ---@param self ClassInfo
    ---@param name string
    ---@return MethodInfo[]
    GetMethodsWithName = function(self, name)
        local MethodsInfo, MethodsInfoResult = self.Methods, {}
        if MethodsInfo then
            for methodIndex = 1, #MethodsInfo do
                if MethodsInfo[methodIndex].MethodName == name then
                    MethodsInfoResult[#MethodsInfoResult + 1] = MethodsInfo[methodIndex]
                end
            end
            return MethodsInfoResult
        else
            local ClassAddress = tonumber(self.ClassAddress, 16)
            local _ClassInfo = gg.getValues({
                { -- Link as Methods
                    address = ClassAddress + Il2cpp.ClassApi.MethodsLink,
                    flags = Il2cpp.MainType
                },
                { -- Methods Count
                    address = ClassAddress + Il2cpp.ClassApi.CountMethods,
                    flags = gg.TYPE_WORD
                }
            })
            self.Methods = Il2cpp.ClassApi:GetClassMethods(Il2cpp.FixValue(_ClassInfo[1].value), _ClassInfo[2].value,
                self.ClassName)
            return self:GetMethodsWithName(name)
        end
    end,


    ---@param self ClassInfo
    ---@param fieldOffset number
    ---@return nil | FieldInfo
    GetFieldWithOffset = function(self, fieldOffset)
        if not self.Fields then
            local ClassAddress = tonumber(self.ClassAddress, 16)
            local _ClassInfo = gg.getValues({
                { -- Link as Fields
                    address = ClassAddress + Il2cpp.ClassApi.FieldsLink,
                    flags = Il2cpp.MainType
                },
                { -- Fields Count
                    address = ClassAddress + Il2cpp.ClassApi.CountFields,
                    flags = gg.TYPE_WORD
                }
            })
            self.Fields = Il2cpp.ClassApi:GetClassFields(Il2cpp.FixValue(_ClassInfo[1].value), _ClassInfo[2].value, {
                ClassName = self.ClassName,
                IsEnum = self.IsEnum,
                TypeMetadataHandle = self.TypeMetadataHandle
            })
        end
        if #self.Fields > 0 then
            local klass = self
            while klass ~= nil do
                if klass.Fields and klass.InstanceSize >= fieldOffset then
                    local lastField
                    for indexField, field in ipairs(klass.Fields) do
                        if not (field.IsStatic or field.IsConst) then
                            local offset = tonumber(field.Offset, 16)
                            if offset > 0 then 
                                local maybeStruct = fieldOffset < offset

                                if indexField == 1 and maybeStruct then
                                    break
                                elseif offset == fieldOffset or indexField == #klass.Fields then
                                    return field
                                elseif maybeStruct then
                                    return lastField
                                else
                                    lastField = field
                                end
                            end
                        end
                    end
                end
                klass = klass.Parent ~= nil 
                    and Il2cpp.FindClass({
                        {
                            Class = tonumber(klass.Parent.ClassAddress, 16), 
                            FieldsDump = true
                        }
                    })[1][1] 
                    or nil
            end
        end
        return nil
    end
}

return ClassInfoApi
end)
__bundle_register("il2cppstruct.object", function(require, _LOADED, __bundle_register, __bundle_modules)
local AndroidInfo = require("utils.androidinfo")

---@class ObjectApi
local ObjectApi = {


    ---@param self ObjectApi
    ---@param Objects table
    FilterObjects = function(self, Objects)
        local FilterObjects = {}
        for k, v in ipairs(gg.getValuesRange(Objects)) do
            if v == 'A' then
                FilterObjects[#FilterObjects + 1] = Objects[k]
            end
        end
        Objects = FilterObjects
        gg.loadResults(Objects)
        gg.searchPointer(0)
        if gg.getResultsCount() <= 0 and AndroidInfo.platform and AndroidInfo.sdk >= 30 then
            local FixRefToObjects = {}
            for k, v in ipairs(Objects) do
                gg.searchNumber(tostring(v.address | 0xB400000000000000), gg.TYPE_QWORD)
                ---@type tablelib
                local RefToObject = gg.getResults(gg.getResultsCount())
                table.move(RefToObject, 1, #RefToObject, #FixRefToObjects + 1, FixRefToObjects)
                gg.clearResults()
            end
            gg.loadResults(FixRefToObjects)
        end
        local RefToObjects, FilterObjects = gg.getResults(gg.getResultsCount()), {}
        gg.clearResults()
        for k, v in ipairs(gg.getValuesRange(RefToObjects)) do
            if v == 'A' then
                FilterObjects[#FilterObjects + 1] = {
                    address = Il2cpp.FixValue(RefToObjects[k].value),
                    flags = RefToObjects[k].flags
                }
            end
        end
        gg.loadResults(FilterObjects)
        local _FilterObjects = gg.getResults(gg.getResultsCount())
        gg.clearResults()
        return _FilterObjects
    end,


    ---@param self ObjectApi
    ---@param ClassAddress string
    FindObjects = function(self, ClassAddress)
        gg.clearResults()
        gg.setRanges(0)
        gg.setRanges(gg.REGION_C_HEAP | gg.REGION_C_HEAP | gg.REGION_ANONYMOUS | gg.REGION_C_BSS | gg.REGION_C_DATA |
                         gg.REGION_C_ALLOC)
        gg.loadResults({{
            address = tonumber(ClassAddress, 16),
            flags = Il2cpp.MainType
        }})
        gg.searchPointer(0)
        if gg.getResultsCount() <= 0 and AndroidInfo.platform and AndroidInfo.sdk >= 30 then
            gg.searchNumber(tostring(tonumber(ClassAddress, 16) | 0xB400000000000000), gg.TYPE_QWORD)
        end
        local FindsResult = gg.getResults(gg.getResultsCount())
        gg.clearResults()
        return self:FilterObjects(FindsResult)
    end,

    
    ---@param self ObjectApi
    ---@param ClassesInfo ClassInfo[]
    Find = function(self, ClassesInfo)
        local Objects = {}
        for j = 1, #ClassesInfo do
            local FindResult = self:FindObjects(ClassesInfo[j].ClassAddress)
            table.move(FindResult, 1, #FindResult, #Objects + 1, Objects)
        end
        return Objects
    end,


    FindHead = function(Address)
        local validAddress = Il2cpp.GetValidAddress(Address)
        local mayBeHead = {}
        for i = 1, 1000 do
            mayBeHead[i] = {
                address = validAddress - (4 * (i - 1)),
                flags = Il2cpp.MainType
            } 
        end
        mayBeHead = gg.getValues(mayBeHead)
        for i = 1, #mayBeHead do
            local mayBeClass = Il2cpp.FixValue(mayBeHead[i].value)
            if Il2cpp.ClassApi.IsClassInfo(mayBeClass) then
                return mayBeHead[i]
            end
        end
        return {value = 0, address = 0}
    end,
}

return ObjectApi
end)
__bundle_register("utils.androidinfo", function(require, _LOADED, __bundle_register, __bundle_modules)
local AndroidInfo = {
    platform = gg.getTargetInfo().x64,
    sdk = gg.getTargetInfo().targetSdkVersion
}

return AndroidInfo
end)
__bundle_register("il2cppstruct.class", function(require, _LOADED, __bundle_register, __bundle_modules)
local Protect = require("utils.protect")
local StringUtils = require("utils.stringutils")
local Il2cppMemory = require("utils.il2cppmemory")

---@class ClassApi
---@field NameOffset number
---@field MethodsStep number
---@field CountMethods number
---@field MethodsLink number
---@field FieldsLink number
---@field FieldsStep number
---@field CountFields number
---@field ParentOffset number
---@field NameSpaceOffset number
---@field StaticFieldDataOffset number
---@field EnumType number
---@field EnumRsh number
---@field TypeMetadataHandle number
---@field InstanceSize number
---@field Token number
---@field GetClassName fun(self : ClassApi, ClassAddress : number) : string
---@field GetClassMethods fun(self : ClassApi, MethodsLink : number, Count : number, ClassName : string | nil) : MethodInfo[]
local ClassApi = {
    
    
    ---@param self ClassApi
    ---@param ClassAddress number
    GetClassName = function(self, ClassAddress)
        return Il2cpp.Utf8ToString(Il2cpp.FixValue(gg.getValues({{
            address = Il2cpp.FixValue(ClassAddress) + self.NameOffset,
            flags = Il2cpp.MainType
        }})[1].value))
    end,
    
    
    ---@param self ClassApi
    ---@param MethodsLink number
    ---@param Count number
    ---@param ClassName string | nil
    GetClassMethods = function(self, MethodsLink, Count, ClassName)
        local MethodsInfo, _MethodsInfo = {}, {}
        for i = 0, Count - 1 do
            _MethodsInfo[#_MethodsInfo + 1] = {
                address = MethodsLink + (i << self.MethodsStep),
                flags = Il2cpp.MainType
            }
        end
        _MethodsInfo = gg.getValues(_MethodsInfo)
        for i = 1, #_MethodsInfo do
            local MethodInfo
            MethodInfo, _MethodsInfo[i] = Il2cpp.MethodsApi:UnpackMethodInfo({
                MethodInfoAddress = Il2cpp.FixValue(_MethodsInfo[i].value),
                ClassName = ClassName
            })
            table.move(MethodInfo, 1, #MethodInfo, #MethodsInfo + 1, MethodsInfo)
        end
        MethodsInfo = gg.getValues(MethodsInfo)
        Il2cpp.MethodsApi:DecodeMethodsInfo(_MethodsInfo, MethodsInfo)
        return _MethodsInfo
    end,


    GetClassFields = function(self, FieldsLink, Count, ClassCharacteristic)
        local FieldsInfo, _FieldsInfo = {}, {}
        for i = 0, Count - 1 do
            _FieldsInfo[#_FieldsInfo + 1] = {
                address = FieldsLink + (i * self.FieldsStep),
                flags = Il2cpp.MainType
            }
        end
        _FieldsInfo = gg.getValues(_FieldsInfo)
        for i = 1, #_FieldsInfo do
            local FieldInfo
            FieldInfo = Il2cpp.FieldApi:UnpackFieldInfo(Il2cpp.FixValue(_FieldsInfo[i].address))
            table.move(FieldInfo, 1, #FieldInfo, #FieldsInfo + 1, FieldsInfo)
        end
        FieldsInfo = gg.getValues(FieldsInfo)
        _FieldsInfo = Il2cpp.FieldApi:DecodeFieldsInfo(FieldsInfo, ClassCharacteristic)
        return _FieldsInfo
    end,


    ---@param self ClassApi
    ---@param ClassInfo ClassInfoRaw
    ---@param Config table
    ---@return ClassInfo
    UnpackClassInfo = function(self, ClassInfo, Config)
        local _ClassInfo = gg.getValues({
            { -- Class Name [1]
                address = ClassInfo.ClassInfoAddress + self.NameOffset,
                flags = Il2cpp.MainType
            },
            { -- Methods Count [2]
                address = ClassInfo.ClassInfoAddress + self.CountMethods,
                flags = gg.TYPE_WORD
            },
            { -- Fields Count [3]
                address = ClassInfo.ClassInfoAddress + self.CountFields,
                flags = gg.TYPE_WORD
            },
            { -- Link as Methods [4]
                address = ClassInfo.ClassInfoAddress + self.MethodsLink,
                flags = Il2cpp.MainType
            },
            { -- Link as Fields [5]
                address = ClassInfo.ClassInfoAddress + self.FieldsLink,
                flags = Il2cpp.MainType
            },
            { -- Link as Parent Class [6]
                address = ClassInfo.ClassInfoAddress + self.ParentOffset,
                flags = Il2cpp.MainType
            },
            { -- Class NameSpace [7]
                address = ClassInfo.ClassInfoAddress + self.NameSpaceOffset,
                flags = Il2cpp.MainType
            },
            { -- Class Static Field Data [8]
                address = ClassInfo.ClassInfoAddress + self.StaticFieldDataOffset,
                flags = Il2cpp.MainType
            },
            { -- EnumType [9]
                address = ClassInfo.ClassInfoAddress + self.EnumType,
                flags = gg.TYPE_BYTE
            },
            { -- TypeMetadataHandle [10]
                address = ClassInfo.ClassInfoAddress + self.TypeMetadataHandle,
                flags = Il2cpp.MainType
            },
            { -- InstanceSize [11]
                address = ClassInfo.ClassInfoAddress + self.InstanceSize,
                flags = gg.TYPE_DWORD
            },
            { -- Token [12]
                address = ClassInfo.ClassInfoAddress + self.Token,
                flags = gg.TYPE_DWORD
            }
        })
        local ClassName = ClassInfo.ClassName or Il2cpp.Utf8ToString(Il2cpp.FixValue(_ClassInfo[1].value))
        local ClassCharacteristic = {
            ClassName = ClassName,
            IsEnum = ((_ClassInfo[9].value >> self.EnumRsh) & 1) == 1,
            TypeMetadataHandle = Il2cpp.FixValue(_ClassInfo[10].value)
        }
        return setmetatable({
            ClassName = ClassName,
            ClassAddress = string.format('%X', Il2cpp.FixValue(ClassInfo.ClassInfoAddress)),
            Methods = (_ClassInfo[2].value > 0 and Config.MethodsDump) and
                self:GetClassMethods(Il2cpp.FixValue(_ClassInfo[4].value), _ClassInfo[2].value, ClassName) or nil,
            Fields = (_ClassInfo[3].value > 0 and Config.FieldsDump) and
                self:GetClassFields(Il2cpp.FixValue(_ClassInfo[5].value), _ClassInfo[3].value, ClassCharacteristic) or
                nil,
            Parent = _ClassInfo[6].value ~= 0 and {
                ClassAddress = string.format('%X', Il2cpp.FixValue(_ClassInfo[6].value)),
                ClassName = self:GetClassName(_ClassInfo[6].value)
            } or nil,
            ClassNameSpace = Il2cpp.Utf8ToString(Il2cpp.FixValue(_ClassInfo[7].value)),
            StaticFieldData = _ClassInfo[8].value ~= 0 and Il2cpp.FixValue(_ClassInfo[8].value) or nil,
            IsEnum = ClassCharacteristic.IsEnum,
            TypeMetadataHandle = ClassCharacteristic.TypeMetadataHandle,
            InstanceSize = _ClassInfo[11].value,
            Token = string.format("0x%X", _ClassInfo[12].value),
            ImageName = ClassInfo.ImageName
        }, {
            __index = Il2cpp.ClassInfoApi,
            __tostring = StringUtils.ClassInfoToDumpCS
        })
    end,

    --- Defines not quite accurately, especially in the 29th version of the backend
    ---@param Address number
    IsClassInfo = function(Address)
        local imageAddress = Il2cpp.FixValue(gg.getValues(
            {
                {
                    address = Il2cpp.FixValue(Address),
                    flags = Il2cpp.MainType
                }
            }
        )[1].value)
        local imageStr = Il2cpp.Utf8ToString(Il2cpp.FixValue(gg.getValues(
            {
                {
                    address = imageAddress,
                    flags = Il2cpp.MainType
                }
            }
        )[1].value))
        local check = string.find(imageStr, ".-%.dll") or string.find(imageStr, "__Generated")
        return check and imageStr or nil
    end,


    ---@param self ClassApi
    ---@param ClassName string
    ---@param searchResult ClassMemory
    FindClassWithName = function(self, ClassName, searchResult)
        local ClassNamePoint = Il2cpp.GlobalMetadataApi.GetPointersToString(ClassName)
        local ResultTable = {}
        if #ClassNamePoint > searchResult.len then
            for classPointIndex, classPoint in ipairs(ClassNamePoint) do
                local classAddress = classPoint.address - self.NameOffset
                local imageName = self.IsClassInfo(classAddress)
                if (imageName) then
                    ResultTable[#ResultTable + 1] = {
                        ClassInfoAddress = Il2cpp.FixValue(classAddress),
                        ClassName = ClassName,
                        ImageName = imageName
                    }
                end
            end
            searchResult.len = #ClassNamePoint
        else
            searchResult.isNew = false
        end
        assert(#ResultTable > 0, string.format("The '%s' class is not initialized", ClassName))
        return ResultTable
    end,


    ---@param self ClassApi
    ---@param ClassAddress number
    ---@param searchResult ClassMemory
    ---@return ClassInfoRaw[]
    FindClassWithAddressInMemory = function(self, ClassAddress, searchResult)
        local ResultTable = {}
        if searchResult.len < 1 then
            local imageName = self.IsClassInfo(ClassAddress)
            if imageName then
                ResultTable[#ResultTable + 1] = {
                    ClassInfoAddress = ClassAddress,
                    ImageName = imageName
                }
            end
            searchResult.len = 1
        else
            searchResult.isNew = false
        end
        assert(#ResultTable > 0, string.format("nothing was found for this address 0x%X", ClassAddress))
        return ResultTable
    end,


    FindParamsCheck = {
        ---@param self ClassApi
        ---@param _class number @Class Address In Memory
        ---@param searchResult ClassMemory
        ['number'] = function(self, _class, searchResult)
            return Protect:Call(self.FindClassWithAddressInMemory, self, _class, searchResult)
        end,
        ---@param self ClassApi
        ---@param _class string @Class Name
        ---@param searchResult ClassMemory
        ['string'] = function(self, _class, searchResult)
            return Protect:Call(self.FindClassWithName, self, _class, searchResult)
        end,
        ['default'] = function()
            return {
                Error = 'Invalid search criteria'
            }
        end
    },


    ---@param self ClassApi
    ---@param class ClassConfig
    ---@return ClassInfo[] | ErrorSearch
    Find = function(self, class)
        local searchResult = Il2cppMemory:GetInformationOfClass(class.Class)
        if (not searchResult) 
            or ((class.FieldsDump or class.MethodsDump)
                and (searchResult.config.FieldsDump ~= class.FieldsDump or searchResult.config.MethodsDump ~= class.MethodsDump))  
            then
            searchResult = {len = 0}
        end
        searchResult.isNew = true

        ---@type ClassInfoRaw[] | ErrorSearch
        local ClassInfo =
            (self.FindParamsCheck[type(class.Class)] or self.FindParamsCheck['default'])(self, class.Class, searchResult)
        if searchResult.isNew then
            for k = 1, #ClassInfo do
                ClassInfo[k] = self:UnpackClassInfo(ClassInfo[k], {
                    FieldsDump = class.FieldsDump,
                    MethodsDump = class.MethodsDump
                })
            end
            searchResult.config = {
                Class = class.Class,
                FieldsDump = class.FieldsDump,
                MethodsDump = class.MethodsDump
            }
            searchResult.result = ClassInfo
            Il2cppMemory:SetInformationOfClass(class.Class, searchResult)
        else
            ClassInfo = searchResult.result
        end
        return ClassInfo
    end
}

return ClassApi
end)
__bundle_register("utils.stringutils", function(require, _LOADED, __bundle_register, __bundle_modules)
---@class StringUtils
local StringUtils = {

    ---@param classInfo ClassInfo
    ClassInfoToDumpCS = function(classInfo)
        local dumpClass = {
            "// ", classInfo.ImageName, "\n",
            "// Namespace: ", classInfo.ClassNameSpace, "\n";

            "class ", classInfo.ClassName, classInfo.Parent and " : " .. classInfo.Parent.ClassName or "", "\n", 
            "{\n"
        }

        if classInfo.Fields and #classInfo.Fields > 0 then
            dumpClass[#dumpClass + 1] = "\n\t// Fields\n"
            for i, v in ipairs(classInfo.Fields) do
                local dumpField = {
                    "\t", v.Access, " ", v.IsStatic and "static " or "", v.IsConst and "const " or "", v.Type, " ", v.FieldName, "; // 0x", v.Offset, "\n"
                }
                table.move(dumpField, 1, #dumpField, #dumpClass + 1, dumpClass)
            end
        end

        if classInfo.Methods and #classInfo.Methods > 0 then
            dumpClass[#dumpClass + 1] = "\n\t// Methods\n"
            for i, v in ipairs(classInfo.Methods) do
                local dumpMethod = {
                    i == 1 and "" or "\n",
                    "\t// Offset: 0x", v.Offset, " VA: 0x", v.AddressInMemory, " ParamCount: ", v.ParamCount, "\n",
                    "\t", v.Access, " ",  v.IsStatic and "static " or "", v.IsAbstract and "abstract " or "", v.ReturnType, " ", v.MethodName, "() { } \n"
                }
                table.move(dumpMethod, 1, #dumpMethod, #dumpClass + 1, dumpClass)
            end
        end
        
        table.insert(dumpClass, "\n}\n")
        return table.concat(dumpClass)
    end
}

return StringUtils
end)
__bundle_register("utils.protect", function(require, _LOADED, __bundle_register, __bundle_modules)
local Protect = {
    ErrorHandler = function(err)
        return {Error = err}
    end,
    Call = function(self, fun, ...) 
        return ({xpcall(fun, self.ErrorHandler, ...)})[2]
    end
}

return Protect
end)
__bundle_register("il2cppstruct.field", function(require, _LOADED, __bundle_register, __bundle_modules)
local Protect = require("utils.protect")

---@class FieldApi
---@field Offset number
---@field Type number
---@field ClassOffset number
---@field Find fun(self : FieldApi, fieldSearchCondition : string | number) : FieldInfo[] | ErrorSearch
local FieldApi = {


    ---@param self FieldApi
    ---@param FieldInfoAddress number
    UnpackFieldInfo = function(self, FieldInfoAddress)
        return {
            { -- Field Name
                address = FieldInfoAddress,
                flags = Il2cpp.MainType
            }, 
            { -- Offset Field
                address = FieldInfoAddress + self.Offset,
                flags = gg.TYPE_WORD
            }, 
            { -- Field type
                address = FieldInfoAddress + self.Type,
                flags = Il2cpp.MainType
            }, 
            { -- Class address
                address = FieldInfoAddress + self.ClassOffset,
                flags = Il2cpp.MainType
            }
        }
    end,


    ---@param self FieldApi
    DecodeFieldsInfo = function(self, FieldsInfo, ClassCharacteristic)
        local index, _FieldsInfo = 0, {}
        local fieldStart = gg.getValues({{
            address = ClassCharacteristic.TypeMetadataHandle + Il2cpp.Il2CppTypeDefinitionApi.fieldStart,
            flags = gg.TYPE_DWORD
        }})[1].value
        for i = 1, #FieldsInfo, 4 do
            index = index + 1
            local TypeInfo = Il2cpp.FixValue(FieldsInfo[i + 2].value)
            local _TypeInfo = gg.getValues({
                { -- attrs
                    address = TypeInfo + self.Type,
                    flags = gg.TYPE_WORD
                }, 
                { -- type index | type
                    address = TypeInfo + Il2cpp.TypeApi.Type,
                    flags = gg.TYPE_BYTE
                }, 
                { -- index | data
                    address = TypeInfo,
                    flags = Il2cpp.MainType
                }
            })
            local attrs = _TypeInfo[1].value
            local IsConst = (attrs & Il2CppFlags.Field.FIELD_ATTRIBUTE_LITERAL) ~= 0
            _FieldsInfo[index] = setmetatable({
                ClassName = ClassCharacteristic.ClassName or Il2cpp.ClassApi:GetClassName(FieldsInfo[i + 3].value),
                ClassAddress = string.format('%X', Il2cpp.FixValue(FieldsInfo[i + 3].value)),
                FieldName = Il2cpp.Utf8ToString(Il2cpp.FixValue(FieldsInfo[i].value)),
                Offset = string.format('%X', FieldsInfo[i + 1].value),
                IsStatic = (not IsConst) and ((attrs & Il2CppFlags.Field.FIELD_ATTRIBUTE_STATIC) ~= 0),
                Type = Il2cpp.TypeApi:GetTypeName(_TypeInfo[2].value, _TypeInfo[3].value),
                IsConst = IsConst,
                Access = Il2CppFlags.Field.Access[attrs & Il2CppFlags.Field.FIELD_ATTRIBUTE_FIELD_ACCESS_MASK] or "",
            }, {
                __index = Il2cpp.FieldInfoApi,
                fieldIndex = fieldStart + index - 1
            })
        end
        return _FieldsInfo
    end,


    ---@param self FieldApi
    ---@param fieldName string
    ---@return FieldInfo[]
    FindFieldWithName = function(self, fieldName)
        local fieldNamePoint = Il2cpp.GlobalMetadataApi.GetPointersToString(fieldName)
        local ResultTable = {}
        for k, v in ipairs(fieldNamePoint) do
            local classAddress = gg.getValues({{
                address = v.address + self.ClassOffset,
                flags = Il2cpp.MainType
            }})[1].value
            if Il2cpp.ClassApi.IsClassInfo(classAddress) then
                local result = self.FindFieldInClass(fieldName, classAddress)
                table.move(result, 1, #result, #ResultTable + 1, ResultTable)
            end
        end
        assert(type(ResultTable) == "table" and #ResultTable > 0, string.format("The '%s' field is not initialized", fieldName))
        return ResultTable
    end,


    ---@param self FieldApi
    FindFieldWithAddress = function(self, fieldAddress)
        local ObjectHead = Il2cpp.ObjectApi.FindHead(fieldAddress)
        local fieldOffset = fieldAddress - ObjectHead.address
        local classAddress = Il2cpp.FixValue(ObjectHead.value)
        local ResultTable = self.FindFieldInClass(fieldOffset, classAddress)
        assert(#ResultTable > 0, string.format("nothing was found for this address 0x%X", fieldAddress))
        return ResultTable
    end,

    FindFieldInClass = function(fieldSearchCondition, classAddress)
        local ResultTable = {}
        local Il2cppClass = Il2cpp.FindClass({
            {
                Class = classAddress, 
                FieldsDump = true
            }
        })[1]
        for i, v in ipairs(Il2cppClass) do
            ResultTable[#ResultTable + 1] = type(fieldSearchCondition) == "number" 
                and v:GetFieldWithOffset(fieldSearchCondition)
                or v:GetFieldWithName(fieldSearchCondition)
        end
        return ResultTable
    end,


    FindTypeCheck = {
        ---@param self FieldApi
        ---@param fieldName string
        ['string'] = function(self, fieldName)
            return Protect:Call(self.FindFieldWithName, self, fieldName)
        end,
        ---@param self FieldApi
        ---@param fieldAddress number
        ['number'] = function(self, fieldAddress)
            return Protect:Call(self.FindFieldWithAddress, self, fieldAddress)
        end,
        ['default'] = function()
            return {
                Error = 'Invalid search criteria'
            }
        end
    },


    ---@param self FieldApi
    ---@param fieldSearchCondition number | string
    ---@return FieldInfo[] | ErrorSearch
    Find = function(self, fieldSearchCondition)
        local FieldsInfo = (self.FindTypeCheck[type(fieldSearchCondition)] or self.FindTypeCheck['default'])(self, fieldSearchCondition)
        return FieldsInfo
    end
}

return FieldApi

end)
__bundle_register("il2cppstruct.globalmetadata", function(require, _LOADED, __bundle_register, __bundle_modules)
---@class GlobalMetadataApi
---@field typeDefinitionsSize number
---@field typeDefinitionsOffset number
---@field stringOffset number
---@field fieldDefaultValuesOffset number
---@field fieldDefaultValuesSize number
---@field fieldAndParameterDefaultValueDataOffset number
---@field version number
local GlobalMetadataApi = {


    ---@type table<number, fun(blob : number) : string | number>
    behaviorForTypes = {
        [2] = function(blob)
            return Il2cpp.GlobalMetadataApi.ReadNumberConst(blob, gg.TYPE_BYTE)
        end,
        [3] = function(blob)
            return Il2cpp.GlobalMetadataApi.ReadNumberConst(blob, gg.TYPE_BYTE)
        end,
        [4] = function(blob)
            return Il2cpp.GlobalMetadataApi.ReadNumberConst(blob, gg.TYPE_BYTE)
        end,
        [5] = function(blob)
            return Il2cpp.GlobalMetadataApi.ReadNumberConst(blob, gg.TYPE_BYTE)
        end,
        [6] = function(blob)
            return Il2cpp.GlobalMetadataApi.ReadNumberConst(blob, gg.TYPE_WORD)
        end,
        [7] = function(blob)
            return Il2cpp.GlobalMetadataApi.ReadNumberConst(blob, gg.TYPE_WORD)
        end,
        [8] = function(blob)
            local self = Il2cpp.GlobalMetadataApi
            return self.version < 29 and self.ReadNumberConst(blob, gg.TYPE_DWORD) or self.ReadCompressedInt32(blob)
        end,
        [9] = function(blob)
            local self = Il2cpp.GlobalMetadataApi
            return self.version < 29 and Il2cpp.FixValue(self.ReadNumberConst(blob, gg.TYPE_DWORD)) or self.ReadCompressedUInt32(blob)
        end,
        [10] = function(blob)
            return Il2cpp.GlobalMetadataApi.ReadNumberConst(blob, gg.TYPE_QWORD)
        end,
        [11] = function(blob)
            return Il2cpp.GlobalMetadataApi.ReadNumberConst(blob, gg.TYPE_QWORD)
        end,
        [12] = function(blob)
            return Il2cpp.GlobalMetadataApi.ReadNumberConst(blob, gg.TYPE_FLOAT)
        end,
        [13] = function(blob)
            return Il2cpp.GlobalMetadataApi.ReadNumberConst(blob, gg.TYPE_DOUBLE)
        end,
        [14] = function(blob)
            local self = Il2cpp.GlobalMetadataApi
            local length, offset = 0, 0
            if self.version >= 29 then
                length, offset = self.ReadCompressedInt32(blob)
            else
                length = self.ReadNumberConst(blob, gg.TYPE_DWORD) 
                offset = 4
            end

            if length ~= -1 then
                return Il2cpp.Utf8ToString(blob + offset, length)
            end
            return ""
        end
    },


    ---@param self GlobalMetadataApi
    ---@param index number
    GetStringFromIndex = function(self, index)
        local stringDefinitions = Il2cpp.globalMetadataStart + self.stringOffset
        return Il2cpp.Utf8ToString(stringDefinitions + index)
    end,


    ---@param self GlobalMetadataApi
    GetClassNameFromIndex = function(self, index)
        if (self.version < 27) then
            local typeDefinitions = Il2cpp.globalMetadataStart + self.typeDefinitionsOffset
            index = (self.typeDefinitionsSize * index) + typeDefinitions
        else
            index = Il2cpp.FixValue(index)
        end
        local typeDefinition = gg.getValues({{
            address = index,
            flags = gg.TYPE_DWORD
        }})[1].value
        return self:GetStringFromIndex(typeDefinition)
    end,


    ---@param self GlobalMetadataApi
    ---@param dataIndex number
    GetFieldOrParameterDefalutValue = function(self, dataIndex)
        return self.fieldAndParameterDefaultValueDataOffset + Il2cpp.globalMetadataStart + dataIndex
    end,


    ---@param self GlobalMetadataApi
    ---@param index string
    GetIl2CppFieldDefaultValue = function(self, index)
        gg.clearResults()
        gg.setRanges(0)
        gg.setRanges(gg.REGION_C_HEAP | gg.REGION_C_HEAP | gg.REGION_ANONYMOUS | gg.REGION_C_BSS | gg.REGION_C_DATA |
                         gg.REGION_OTHER | gg.REGION_C_ALLOC)
        gg.searchNumber(index, gg.TYPE_DWORD, false, gg.SIGN_EQUAL,
            Il2cpp.globalMetadataStart + self.fieldDefaultValuesOffset,
            Il2cpp.globalMetadataStart + self.fieldDefaultValuesOffset + self.fieldDefaultValuesSize)
        if gg.getResultsCount() > 0 then
            local Il2CppFieldDefaultValue = gg.getResults(1)
            gg.clearResults()
            return Il2CppFieldDefaultValue
        end
        return {}
    end,

    
    ---@param Address number
    ReadCompressedUInt32 = function(Address)
        local val, offset = 0, 0
        local read = gg.getValues({
            { -- [1]
                address = Address, 
                flags = gg.TYPE_BYTE
            },
            { -- [2]
                address = Address + 1, 
                flags = gg.TYPE_BYTE
            },
            { -- [3]
                address = Address + 2, 
                flags = gg.TYPE_BYTE
            },
            { -- [4]
                address = Address + 3, 
                flags = gg.TYPE_BYTE
            }
        })
        local read1 = read[1].value & 0xFF
        offset = 1
        if (read1 & 0x80) == 0 then
            val = read1
        elseif (read1 & 0xC0) == 0x80 then
            val = (read1 & ~0x80) << 8
            val = val | (read[2].value & 0xFF)
            offset = offset + 1
        elseif (read1 & 0xE0) == 0xC0 then
            val = (read1 & ~0xC0) << 24
            val = val | ((read[2].value & 0xFF) << 16)
            val = val | ((read[3].value & 0xFF) << 8)
            val = val | (read[4].value & 0xFF)
            offset = offset + 3
        elseif read1 == 0xF0 then
            val = gg.getValues({{address = Address + 1, flags = gg.TYPE_DWORD}})[1].value
            offset = offset + 4
        elseif read1 == 0xFE then
            val = 0xffffffff - 1
        elseif read1 == 0xFF then
            val = 0xffffffff
        end
        return val, offset
    end,


    ---@param Address number
    ReadCompressedInt32 = function(Address)
        local encoded, offset = Il2cpp.GlobalMetadataApi.ReadCompressedUInt32(Address)

        if encoded == 0xffffffff then
            return -2147483647 - 1
        end

        local isNegative = (encoded & 1) == 1
        encoded = encoded >> 1
        if isNegative then
            return -(encoded + 1)
        end
        return encoded, offset
    end,


    ---@param Address number
    ---@param ggType number @gg.TYPE_
    ReadNumberConst = function(Address, ggType)
        return gg.getValues({{
            address = Address,
            flags = ggType
        }})[1].value
    end,

    
    ---@param self GlobalMetadataApi
    ---@param index number
    ---@return number | string | nil
    GetDefaultFieldValue = function(self, index)
        local Il2CppFieldDefaultValue = self:GetIl2CppFieldDefaultValue(tostring(index))
        if #Il2CppFieldDefaultValue > 0 then
            local _Il2CppFieldDefaultValue = gg.getValues({
                { -- TypeIndex [1]
                    address = Il2CppFieldDefaultValue[1].address + 4,
                    flags = gg.TYPE_DWORD,
                },
                { -- dataIndex [2]
                    address = Il2CppFieldDefaultValue[1].address + 8,
                    flags = gg.TYPE_DWORD
                }
            })
            local blob = self:GetFieldOrParameterDefalutValue(_Il2CppFieldDefaultValue[2].value)
            local Il2CppType = Il2cpp.MetadataRegistrationApi:GetIl2CppTypeFromIndex(_Il2CppFieldDefaultValue[1].value)
            local typeEnum = Il2cpp.TypeApi:GetTypeEnum(Il2CppType)
            ---@type string | fun(blob : number) : string | number
            local behavior = self.behaviorForTypes[typeEnum] or "Not support type"
            if type(behavior) == "function" then
                return behavior(blob)
            end
            return behavior
        end
        return nil
    end,


    ---@param name string
    GetPointersToString = function(name)
        local pointers = {}
        gg.clearResults()
        gg.setRanges(0)
        gg.setRanges(gg.REGION_C_HEAP | gg.REGION_C_HEAP | gg.REGION_ANONYMOUS | gg.REGION_C_BSS | gg.REGION_C_DATA |
                         gg.REGION_OTHER | gg.REGION_C_ALLOC)
        gg.searchNumber(string.format("Q 00 '%s' 00", name), gg.TYPE_BYTE, false, gg.SIGN_EQUAL,
            Il2cpp.globalMetadataStart, Il2cpp.globalMetadataEnd)
        gg.searchPointer(0)
        pointers = gg.getResults(gg.getResultsCount())
        assert(type(pointers) == 'table' and #pointers > 0, string.format("this '%s' is not in the global-metadata", name))
        gg.clearResults()
        return pointers
    end
}

return GlobalMetadataApi
end)
__bundle_register("il2cppstruct.method", function(require, _LOADED, __bundle_register, __bundle_modules)
local AndroidInfo = require("utils.androidinfo")
local Protect = require("utils.protect")
local Il2cppMemory = require("utils.il2cppmemory")

---@class MethodsApi
---@field ClassOffset number
---@field NameOffset number
---@field ParamCount number
---@field ReturnType number
---@field Flags number
local MethodsApi = {


    ---@param self MethodsApi
    ---@param MethodName string
    ---@param searchResult MethodMemory
    ---@return MethodInfoRaw[]
    FindMethodWithName = function(self, MethodName, searchResult)
        local FinalMethods = {}
        local MethodNamePointers = Il2cpp.GlobalMetadataApi.GetPointersToString(MethodName)
        if searchResult.len < #MethodNamePointers then
            for methodPointIndex, methodPoint in ipairs(MethodNamePointers) do
                methodPoint.address = methodPoint.address - self.NameOffset
                local MethodAddress = Il2cpp.FixValue(gg.getValues({methodPoint})[1].value)
                if MethodAddress > Il2cpp.il2cppStart and MethodAddress < Il2cpp.il2cppEnd then
                    FinalMethods[#FinalMethods + 1] = {
                        MethodName = MethodName,
                        MethodAddress = MethodAddress,
                        MethodInfoAddress = methodPoint.address
                    }
                end
            end
        else
            searchResult.isNew = false
        end
        assert(#FinalMethods > 0, string.format("The '%s' method is not initialized", MethodName))
        return FinalMethods
    end,


    ---@param self MethodsApi
    ---@param MethodOffset number
    ---@param searchResult MethodMemory | nil
    ---@return MethodInfoRaw[]
    FindMethodWithOffset = function(self, MethodOffset, searchResult)
        local MethodsInfo = self:FindMethodWithAddressInMemory(Il2cpp.il2cppStart + MethodOffset, searchResult, MethodOffset)
        return MethodsInfo
    end,


    ---@param self MethodsApi
    ---@param MethodAddress number
    ---@param searchResult MethodMemory
    ---@param MethodOffset number | nil
    ---@return MethodInfoRaw[]
    FindMethodWithAddressInMemory = function(self, MethodAddress, searchResult, MethodOffset)
        local RawMethodsInfo = {} -- the same as MethodsInfo
        gg.clearResults()
        gg.setRanges(gg.REGION_C_HEAP | gg.REGION_C_ALLOC | gg.REGION_ANONYMOUS | gg.REGION_C_BSS | gg.REGION_C_DATA |
                         gg.REGION_OTHER)
        if gg.BUILD < 16126 then
            gg.searchNumber(string.format("%Xh", MethodAddress), Il2cpp.MainType)
        else
            gg.loadResults({{
                address = MethodAddress,
                flags = Il2cpp.MainType
            }})
            gg.searchPointer(0)
        end
        local r_count = gg.getResultsCount()
        if r_count > searchResult.len then
            local r = gg.getResults(r_count)
            for j = 1, #r do
                RawMethodsInfo[#RawMethodsInfo + 1] = {
                    MethodAddress = MethodAddress,
                    MethodInfoAddress = r[j].address,
                    Offset = MethodOffset
                }
            end
        else
            searchResult.isNew = false
        end 
        gg.clearResults()
        assert(#RawMethodsInfo > 0, string.format("nothing was found for this address 0x%X", MethodAddress))
        return RawMethodsInfo
    end,


    ---@param self MethodsApi
    ---@param _MethodsInfo MethodInfo[]
    DecodeMethodsInfo = function(self, _MethodsInfo, MethodsInfo)
        for i = 1, #_MethodsInfo do
            local index = (i - 1) * 6
            local TypeInfo = Il2cpp.FixValue(MethodsInfo[index + 5].value)
            local _TypeInfo = gg.getValues({{ -- type index
                address = TypeInfo + Il2cpp.TypeApi.Type,
                flags = gg.TYPE_BYTE
            }, { -- index
                address = TypeInfo,
                flags = Il2cpp.MainType
            }})
            local MethodAddress = Il2cpp.FixValue(MethodsInfo[index + 1].value)
            local MethodFlags = MethodsInfo[index + 6].value

            _MethodsInfo[i] = {
                MethodName = _MethodsInfo[i].MethodName or
                    Il2cpp.Utf8ToString(Il2cpp.FixValue(MethodsInfo[index + 2].value)),
                Offset = string.format("%X", _MethodsInfo[i].Offset or (MethodAddress == 0 and MethodAddress or MethodAddress - Il2cpp.il2cppStart)),
                AddressInMemory = string.format("%X", MethodAddress),
                MethodInfoAddress = _MethodsInfo[i].MethodInfoAddress,
                ClassName = _MethodsInfo[i].ClassName or Il2cpp.ClassApi:GetClassName(MethodsInfo[index + 3].value),
                ClassAddress = string.format('%X', Il2cpp.FixValue(MethodsInfo[index + 3].value)),
                ParamCount = MethodsInfo[index + 4].value,
                ReturnType = Il2cpp.TypeApi:GetTypeName(_TypeInfo[1].value, _TypeInfo[2].value),
                IsStatic = (MethodFlags & Il2CppFlags.Method.METHOD_ATTRIBUTE_STATIC) ~= 0,
                Access = Il2CppFlags.Method.Access[MethodFlags & Il2CppFlags.Method.METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK] or "",
                IsAbstract = (MethodFlags & Il2CppFlags.Method.METHOD_ATTRIBUTE_ABSTRACT) ~= 0,
            }
        end
    end,


    ---@param self MethodsApi
    ---@param MethodInfo MethodInfoRaw
    UnpackMethodInfo = function(self, MethodInfo)
        return {
            { -- [1] Address Method in Memory
                address = MethodInfo.MethodInfoAddress,
                flags = Il2cpp.MainType
            },
            { -- [2] Name Address
                address = MethodInfo.MethodInfoAddress + self.NameOffset,
                flags = Il2cpp.MainType
            },
            { -- [3] Class address
                address = MethodInfo.MethodInfoAddress + self.ClassOffset,
                flags = Il2cpp.MainType
            },
            { -- [4] Param Count
                address = MethodInfo.MethodInfoAddress + self.ParamCount,
                flags = gg.TYPE_BYTE
            },
            { -- [5] Return Type
                address = MethodInfo.MethodInfoAddress + self.ReturnType,
                flags = Il2cpp.MainType
            },
            { -- [6] Flags
                address = MethodInfo.MethodInfoAddress + self.Flags,
                flags = gg.TYPE_WORD
            }
        }, 
        {
            MethodName = MethodInfo.MethodName or nil,
            Offset = MethodInfo.Offset or nil,
            MethodInfoAddress = MethodInfo.MethodInfoAddress,
            ClassName = MethodInfo.ClassName
        }
    end,


    FindParamsCheck = {
        ---@param self MethodsApi
        ---@param method number
        ---@param searchResult MethodMemory
        ['number'] = function(self, method, searchResult)
            if (method > Il2cpp.il2cppStart and method < Il2cpp.il2cppEnd) then
                return Protect:Call(self.FindMethodWithAddressInMemory, self, method, searchResult)
            else
                return Protect:Call(self.FindMethodWithOffset, self, method, searchResult)
            end
        end,
        ---@param self MethodsApi
        ---@param method string
        ---@param searchResult MethodMemory
        ['string'] = function(self, method, searchResult)
            return Protect:Call(self.FindMethodWithName, self, method, searchResult)
        end,
        ['default'] = function()
            return {
                Error = 'Invalid search criteria'
            }
        end
    },


    ---@param self MethodsApi
    ---@param method number | string
    ---@return MethodInfo[] | ErrorSearch
    Find = function(self, method)
        local searchResult = Il2cppMemory:GetInformaionOfMethod(method)
        if not searchResult then
            searchResult = {len = 0}
        end
        searchResult.isNew = true

        ---@type MethodInfoRaw[] | ErrorSearch
        local _MethodsInfo = (self.FindParamsCheck[type(method)] or self.FindParamsCheck['default'])(self, method, searchResult)
        if searchResult.isNew then
            local MethodsInfo = {}
            for i = 1, #_MethodsInfo do
                local MethodInfo
                MethodInfo, _MethodsInfo[i] = self:UnpackMethodInfo(_MethodsInfo[i])
                table.move(MethodInfo, 1, #MethodInfo, #MethodsInfo + 1, MethodsInfo)
            end
            MethodsInfo = gg.getValues(MethodsInfo)
            self:DecodeMethodsInfo(_MethodsInfo, MethodsInfo)

            -- save result
            searchResult.len = #_MethodsInfo
            searchResult.result = _MethodsInfo
            Il2cppMemory:SetInformaionOfMethod(method, searchResult)
        else
            _MethodsInfo = searchResult.result
        end

        return _MethodsInfo
    end
}

return MethodsApi
end)
__bundle_register("il2cppstruct.type", function(require, _LOADED, __bundle_register, __bundle_modules)
local Il2cppMemory = require("utils.il2cppmemory")

---@class TypeApi
---@field Type number
---@field tableTypes table
local TypeApi = {

    
    tableTypes = {
        [1] = "void",
        [2] = "bool",
        [3] = "char",
        [4] = "sbyte",
        [5] = "byte",
        [6] = "short",
        [7] = "ushort",
        [8] = "int",
        [9] = "uint",
        [10] = "long",
        [11] = "ulong",
        [12] = "float",
        [13] = "double",
        [14] = "string",
        [22] = "TypedReference",
        [24] = "IntPtr",
        [25] = "UIntPtr",
        [28] = "object",
        [17] = function(index)
            return Il2cpp.GlobalMetadataApi:GetClassNameFromIndex(index)
        end,
        [18] = function(index)
            return Il2cpp.GlobalMetadataApi:GetClassNameFromIndex(index)
        end,
        [29] = function(index)
            local typeMassiv = gg.getValues({
                {
                    address = Il2cpp.FixValue(index),
                    flags = Il2cpp.MainType
                },
                {
                    address = Il2cpp.FixValue(index) + Il2cpp.TypeApi.Type,
                    flags = gg.TYPE_BYTE
                }
            })
            return Il2cpp.TypeApi:GetTypeName(typeMassiv[2].value, typeMassiv[1].value) .. "[]"
        end,
        [21] = function(index)
            if not (Il2cpp.GlobalMetadataApi.version < 27) then
                index = gg.getValues({{
                    address = Il2cpp.FixValue(index),
                    flags = Il2cpp.MainType
                }})[1].value
            end
            index = gg.getValues({{
                address = Il2cpp.FixValue(index),
                flags = Il2cpp.MainType
            }})[1].value
            return Il2cpp.GlobalMetadataApi:GetClassNameFromIndex(index)
        end
    },


    ---@param self TypeApi
    ---@param typeIndex number @number for tableTypes
    ---@param index number @for an api that is higher than 24, this can be a reference to the index
    ---@return string
    GetTypeName = function(self, typeIndex, index)
        ---@type string | fun(index : number) : string
        local typeName = self.tableTypes[typeIndex] or string.format('(not support type -> 0x%X)', typeIndex)
        if (type(typeName) == 'function') then
            local resultType = Il2cppMemory:GetInformationOfType(index)
            if not resultType then
                resultType = typeName(index)
                Il2cppMemory:SetInformationOfType(index, resultType)
            end
            typeName = resultType
        end
        return typeName
    end,


    ---@param self TypeApi
    ---@param Il2CppType number
    GetTypeEnum = function(self, Il2CppType)
        return gg.getValues({{address = Il2CppType + self.Type, flags = gg.TYPE_BYTE}})[1].value
    end
}

return TypeApi
end)
__bundle_register("il2cppstruct.metadataRegistration", function(require, _LOADED, __bundle_register, __bundle_modules)
local Searcher = require("utils.universalsearcher")

---@class MetadataRegistrationApi
---@field metadataRegistration number
---@field types number
local MetadataRegistrationApi = {


    ---@param self MetadataRegistrationApi
    ---@return number
    GetIl2CppTypeFromIndex = function(self, index)
        if not self.metadataRegistration then
            self:FindMetadataRegistration()
        end
        local types = gg.getValues({{address = self.metadataRegistration + self.types, flags = Il2cpp.MainType}})[1].value
        return Il2cpp.FixValue(gg.getValues({{address = types + (Il2cpp.pointSize * index), flags = Il2cpp.MainType}})[1].value)
    end,


    ---@param self MetadataRegistrationApi
    ---@return void
    FindMetadataRegistration = function(self)
        self.metadataRegistration = Searcher.Il2CppMetadataRegistration()
    end
}

return MetadataRegistrationApi
end)
__bundle_register("utils.universalsearcher", function(require, _LOADED, __bundle_register, __bundle_modules)
local AndroidInfo = require("utils.androidinfo")

---@class Searcher
local Searcher = {
    searchWord = ":EnsureCapacity",

    ---@param self Searcher
    FindGlobalMetaData = function(self)
        gg.clearResults()
        gg.setRanges(gg.REGION_C_HEAP | gg.REGION_C_ALLOC | gg.REGION_ANONYMOUS | gg.REGION_C_BSS | gg.REGION_C_DATA |
                         gg.REGION_OTHER)
        local globalMetadata = gg.getRangesList('global-metadata.dat')
        if not self:IsValidData(globalMetadata) then
            globalMetadata = {}
            gg.clearResults()
            gg.searchNumber(self.searchWord, gg.TYPE_BYTE)
            gg.refineNumber(self.searchWord:sub(1, 2), gg.TYPE_BYTE)
            local EnsureCapacity = gg.getResults(gg.getResultsCount())
            gg.clearResults()
            for k, v in ipairs(gg.getRangesList()) do
                if (v.state == 'Ca' or v.state == 'A' or v.state == 'Cd' or v.state == 'Cb' or v.state == 'Ch' or
                    v.state == 'O') then
                    for key, val in ipairs(EnsureCapacity) do
                        globalMetadata[#globalMetadata + 1] =
                            (Il2cpp.FixValue(v.start) <= Il2cpp.FixValue(val.address) and Il2cpp.FixValue(val.address) <
                                Il2cpp.FixValue(v['end'])) and v or nil
                    end
                end
            end
        end
        return globalMetadata[1].start, globalMetadata[#globalMetadata]['end']
    end,

    ---@param self Searcher
    IsValidData = function(self, globalMetadata)
        if #globalMetadata ~= 0 then
            gg.searchNumber(self.searchWord, gg.TYPE_BYTE, false, gg.SIGN_EQUAL, globalMetadata[1].start,
                globalMetadata[#globalMetadata]['end'])
            if gg.getResultsCount() > 0 then
                gg.clearResults()
                return true
            end
        end
        return false
    end,

    FindIl2cpp = function()
        local il2cpp = gg.getRangesList('libil2cpp.so')
        if #il2cpp == 0 then
            il2cpp = gg.getRangesList('split_config.')
            local _il2cpp = {}
            gg.setRanges(gg.REGION_CODE_APP)
            for k, v in ipairs(il2cpp) do
                if (v.state == 'Xa') then
                    gg.searchNumber(':il2cpp', gg.TYPE_BYTE, false, gg.SIGN_EQUAL, v.start, v['end'])
                    if (gg.getResultsCount() > 0) then
                        _il2cpp[#_il2cpp + 1] = v
                        gg.clearResults()
                    end
                end
            end
            il2cpp = _il2cpp
        else
            local _il2cpp = {}
            for k,v in ipairs(il2cpp) do
                if (string.find(v.type, "..x.") or v.state == "Xa") then
                    _il2cpp[#_il2cpp + 1] = v
                end
            end
            il2cpp = _il2cpp
        end       
        return il2cpp[1].start, il2cpp[#il2cpp]['end']
    end,

    Il2CppMetadataRegistration = function()
        gg.clearResults()
        gg.setRanges(gg.REGION_C_HEAP | gg.REGION_C_ALLOC | gg.REGION_ANONYMOUS | gg.REGION_C_BSS | gg.REGION_C_DATA |
                         gg.REGION_OTHER)
        gg.loadResults({{
            address = Il2cpp.globalMetadataStart,
            flags = Il2cpp.MainType
        }})
        gg.searchPointer(0)
        if gg.getResultsCount() == 0 and AndroidInfo.platform and AndroidInfo.sdk >= 30 then
            gg.searchNumber(tostring(Il2cpp.globalMetadataStart | 0xB400000000000000), Il2cpp.MainType)
        end
        if gg.getResultsCount() > 0 then
            local GlobalMetadataPointers, s_GlobalMetadata = gg.getResults(gg.getResultsCount()), 0
            for i = 1, #GlobalMetadataPointers do
                if i ~= 1 then
                    local difference = GlobalMetadataPointers[i].address - GlobalMetadataPointers[i - 1].address
                    if (difference == Il2cpp.pointSize) then
                        s_GlobalMetadata = Il2cpp.FixValue(gg.getValues({{
                            address = GlobalMetadataPointers[i].address - (AndroidInfo.platform and 0x10 or 0x8),
                            flags = Il2cpp.MainType
                        }})[1].value)
                    end
                end
            end
            return s_GlobalMetadata
        end
        return 0
    end
}

return Searcher

end)
__bundle_register("utils.patchapi", function(require, _LOADED, __bundle_register, __bundle_modules)
---@class Patch
---@field oldBytes table
---@field newBytes table
---@field Create fun(self : Patch, patchCode : table) : Patch
---@field Patch fun(self : Patch) : void
---@field Undo fun(self : Patch) : void
local PatchApi = {

    ---@param self Patch
    ---@param patchCode table
    Create = function(self, patchCode)
        return setmetatable({
            newBytes = patchCode,
            oldBytes = gg.getValues(patchCode)
        },
        {
            __index = self,
        })
    end,
    
    ---@param self Patch
    Patch = function(self)
        if self.newBytes then
            gg.setValues(self.newBytes)
        end 
    end,

    ---@param self Patch
    Undo = function(self)
        if self.oldBytes then
            gg.setValues(self.oldBytes)
        end
    end,
}

return PatchApi
end)
__bundle_register("utils.version", function(require, _LOADED, __bundle_register, __bundle_modules)
local semver = require("semver.semver")

---@class VersionEngine
local VersionEngine = {
    ConstSemVer = {
        ['2018_3'] = semver(2018, 3),
        ['2019_4_21'] = semver(2019, 4, 21),
        ['2019_4_15'] = semver(2019, 4, 15),
        ['2019_3_7'] = semver(2019, 3, 7),
        ['2020_2_4'] = semver(2020, 2, 4),
        ['2020_2'] = semver(2020, 2),
        ['2020_1_11'] = semver(2020, 1, 11),
        ['2021_2'] = semver(2021, 2)   
    },
    Year = {
        [2017] = function(self, unityVersion)
            return 24
        end,
        ---@param self VersionEngine
        [2018] = function(self, unityVersion)
            return (not (unityVersion < self.ConstSemVer['2018_3'])) and 24.1 or 24
        end,
        ---@param self VersionEngine
        [2019] = function(self, unityVersion)
            local version = 24.2
            if not (unityVersion < self.ConstSemVer['2019_4_21']) then
                version = 24.5
            elseif not (unityVersion < self.ConstSemVer['2019_4_15']) then
                version = 24.4
            elseif not (unityVersion < self.ConstSemVer['2019_3_7']) then
                version = 24.3
            end
            return version
        end,
        ---@param self VersionEngine
        [2020] = function(self, unityVersion)
            local version = 24.3
            if not (unityVersion < self.ConstSemVer['2020_2_4']) then
                version = 27.1
            elseif not (unityVersion < self.ConstSemVer['2020_2']) then
                version = 27
            elseif not (unityVersion < self.ConstSemVer['2020_1_11']) then
                version = 24.4
            end
            return version
        end,
        ---@param self VersionEngine
        [2021] = function(self, unityVersion)
            return (not (unityVersion < self.ConstSemVer['2021_2'])) and 29 or 27.2 
        end,
        [2022] = function(self, unityVersion)
            return 29
        end,
    },
    ---@return number
    GetUnityVersion = function()
        gg.setRanges(gg.REGION_ANONYMOUS)
        gg.clearResults()
        gg.searchNumber("00h;32h;30h;0~~0;0~~0;2Eh;0~~0;2Eh::9", gg.TYPE_BYTE, false, gg.SIGN_EQUAL, nil, nil, 1)
        local result = gg.getResultsCount() > 0 and gg.getResults(3)[3].address or 0
        gg.clearResults()
        return result
    end,
    ReadUnityVersion = function(versionAddress)
        local verisonName = Il2cpp.Utf8ToString(versionAddress)
        return string.gmatch(verisonName, "(%d+)%p(%d+)%p(%d+)")()
    end,
    ---@param self VersionEngine
    ---@param version? number
    ChooseVersion = function(self, version, globalMetadataHeader)
        if not version then
            local unityVersionAddress = self.GetUnityVersion()
            if unityVersionAddress == 0 then
                version = gg.getValues({{address = globalMetadataHeader + 0x4, flags = gg.TYPE_DWORD}})[1].value
            else
                local p1, p2, p3 = self.ReadUnityVersion(unityVersionAddress)
                local unityVersion = semver(tonumber(p1), tonumber(p2), tonumber(p3))
                ---@type number | fun(self: VersionEngine, unityVersion: table): number
                version = self.Year[unityVersion.major] or 29
                if type(version) == 'function' then
                    version = version(self, unityVersion)
                end
            end
            
        end
        ---@type Il2cppApi
        local api = assert(Il2CppConst[version], 'Not support this il2cpp version')
        Il2cpp.FieldApi.Offset = api.FieldApiOffset
        Il2cpp.FieldApi.Type = api.FieldApiType
        Il2cpp.FieldApi.ClassOffset = api.FieldApiClassOffset

        Il2cpp.ClassApi.NameOffset = api.ClassApiNameOffset
        Il2cpp.ClassApi.MethodsStep = api.ClassApiMethodsStep
        Il2cpp.ClassApi.CountMethods = api.ClassApiCountMethods
        Il2cpp.ClassApi.MethodsLink = api.ClassApiMethodsLink
        Il2cpp.ClassApi.FieldsLink = api.ClassApiFieldsLink
        Il2cpp.ClassApi.FieldsStep = api.ClassApiFieldsStep
        Il2cpp.ClassApi.CountFields = api.ClassApiCountFields
        Il2cpp.ClassApi.ParentOffset = api.ClassApiParentOffset
        Il2cpp.ClassApi.NameSpaceOffset = api.ClassApiNameSpaceOffset
        Il2cpp.ClassApi.StaticFieldDataOffset = api.ClassApiStaticFieldDataOffset
        Il2cpp.ClassApi.EnumType = api.ClassApiEnumType
        Il2cpp.ClassApi.EnumRsh = api.ClassApiEnumRsh
        Il2cpp.ClassApi.TypeMetadataHandle = api.ClassApiTypeMetadataHandle
        Il2cpp.ClassApi.InstanceSize = api.ClassApiInstanceSize
        Il2cpp.ClassApi.Token = api.ClassApiToken

        Il2cpp.MethodsApi.ClassOffset = api.MethodsApiClassOffset
        Il2cpp.MethodsApi.NameOffset = api.MethodsApiNameOffset
        Il2cpp.MethodsApi.ParamCount = api.MethodsApiParamCount
        Il2cpp.MethodsApi.ReturnType = api.MethodsApiReturnType
        Il2cpp.MethodsApi.Flags = api.MethodsApiFlags

        Il2cpp.GlobalMetadataApi.typeDefinitionsSize = api.typeDefinitionsSize
        Il2cpp.GlobalMetadataApi.version = version

        local consts = gg.getValues({
            { -- [1] 
                address = Il2cpp.globalMetadataHeader + api.typeDefinitionsOffset,
                flags = gg.TYPE_DWORD
            },
            { -- [2]
                address = Il2cpp.globalMetadataHeader + api.stringOffset,
                flags = gg.TYPE_DWORD,
            },
            { -- [3]
                address = Il2cpp.globalMetadataHeader + api.fieldDefaultValuesOffset,
                flags = gg.TYPE_DWORD,
            },
            { -- [4]
                address = Il2cpp.globalMetadataHeader + api.fieldDefaultValuesSize,
                flags = gg.TYPE_DWORD
            },
            { -- [5]
                address = Il2cpp.globalMetadataHeader + api.fieldAndParameterDefaultValueDataOffset,
                flags = gg.TYPE_DWORD
            }
        })
        Il2cpp.GlobalMetadataApi.typeDefinitionsOffset = consts[1].value
        Il2cpp.GlobalMetadataApi.stringOffset = consts[2].value
        Il2cpp.GlobalMetadataApi.fieldDefaultValuesOffset = consts[3].value
        Il2cpp.GlobalMetadataApi.fieldDefaultValuesSize = consts[4].value
        Il2cpp.GlobalMetadataApi.fieldAndParameterDefaultValueDataOffset = consts[5].value

        Il2cpp.TypeApi.Type = api.TypeApiType

        Il2cpp.Il2CppTypeDefinitionApi.fieldStart = api.Il2CppTypeDefinitionApifieldStart

        Il2cpp.MetadataRegistrationApi.types = api.MetadataRegistrationApitypes
    end,
}

return VersionEngine
end)
__bundle_register("semver.semver", function(require, _LOADED, __bundle_register, __bundle_modules)
local semver = {
  _VERSION     = '1.2.1',
  _DESCRIPTION = 'semver for Lua',
  _URL         = 'https://github.com/kikito/semver.lua',
  _LICENSE     = [[
    MIT LICENSE

    Copyright (c) 2015 Enrique García Cota

    Permission is hereby granted, free of charge, to any person obtaining a
    copy of tother software and associated documentation files (the
    "Software"), to deal in the Software without restriction, including
    without limitation the rights to use, copy, modify, merge, publish,
    distribute, sublicense, and/or sell copies of the Software, and to
    permit persons to whom the Software is furnished to do so, subject to
    the following conditions:

    The above copyright notice and tother permission notice shall be included
    in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  ]]
}

local function checkPositiveInteger(number, name)
  assert(number >= 0, name .. ' must be a valid positive number')
  assert(math.floor(number) == number, name .. ' must be an integer')
end

local function present(value)
  return value and value ~= ''
end

-- splitByDot("a.bbc.d") == {"a", "bbc", "d"}
local function splitByDot(str)
  str = str or ""
  local t, count = {}, 0
  str:gsub("([^%.]+)", function(c)
    count = count + 1
    t[count] = c
  end)
  return t
end

local function parsePrereleaseAndBuildWithSign(str)
  local prereleaseWithSign, buildWithSign = str:match("^(-[^+]+)(+.+)$")
  if not (prereleaseWithSign and buildWithSign) then
    prereleaseWithSign = str:match("^(-.+)$")
    buildWithSign      = str:match("^(+.+)$")
  end
  assert(prereleaseWithSign or buildWithSign, ("The parameter %q must begin with + or - to denote a prerelease or a build"):format(str))
  return prereleaseWithSign, buildWithSign
end

local function parsePrerelease(prereleaseWithSign)
  if prereleaseWithSign then
    local prerelease = prereleaseWithSign:match("^-(%w[%.%w-]*)$")
    assert(prerelease, ("The prerelease %q is not a slash followed by alphanumerics, dots and slashes"):format(prereleaseWithSign))
    return prerelease
  end
end

local function parseBuild(buildWithSign)
  if buildWithSign then
    local build = buildWithSign:match("^%+(%w[%.%w-]*)$")
    assert(build, ("The build %q is not a + sign followed by alphanumerics, dots and slashes"):format(buildWithSign))
    return build
  end
end

local function parsePrereleaseAndBuild(str)
  if not present(str) then return nil, nil end

  local prereleaseWithSign, buildWithSign = parsePrereleaseAndBuildWithSign(str)

  local prerelease = parsePrerelease(prereleaseWithSign)
  local build = parseBuild(buildWithSign)

  return prerelease, build
end

local function parseVersion(str)
  local sMajor, sMinor, sPatch, sPrereleaseAndBuild = str:match("^(%d+)%.?(%d*)%.?(%d*)(.-)$")
  assert(type(sMajor) == 'string', ("Could not extract version number(s) from %q"):format(str))
  local major, minor, patch = tonumber(sMajor), tonumber(sMinor), tonumber(sPatch)
  local prerelease, build = parsePrereleaseAndBuild(sPrereleaseAndBuild)
  return major, minor, patch, prerelease, build
end


-- return 0 if a == b, -1 if a < b, and 1 if a > b
local function compare(a,b)
  return a == b and 0 or a < b and -1 or 1
end

local function compareIds(myId, otherId)
  if myId == otherId then return  0
  elseif not myId    then return -1
  elseif not otherId then return  1
  end

  local selfNumber, otherNumber = tonumber(myId), tonumber(otherId)

  if selfNumber and otherNumber then -- numerical comparison
    return compare(selfNumber, otherNumber)
  -- numericals are always smaller than alphanums
  elseif selfNumber then
    return -1
  elseif otherNumber then
    return 1
  else
    return compare(myId, otherId) -- alphanumerical comparison
  end
end

local function smallerIdList(myIds, otherIds)
  local myLength = #myIds
  local comparison

  for i=1, myLength do
    comparison = compareIds(myIds[i], otherIds[i])
    if comparison ~= 0 then
      return comparison == -1
    end
    -- if comparison == 0, continue loop
  end

  return myLength < #otherIds
end

local function smallerPrerelease(mine, other)
  if mine == other or not mine then return false
  elseif not other then return true
  end

  return smallerIdList(splitByDot(mine), splitByDot(other))
end

local methods = {}

function methods:nextMajor()
  return semver(self.major + 1, 0, 0)
end
function methods:nextMinor()
  return semver(self.major, self.minor + 1, 0)
end
function methods:nextPatch()
  return semver(self.major, self.minor, self.patch + 1)
end

local mt = { __index = methods }
function mt:__eq(other)
  return self.major == other.major and
         self.minor == other.minor and
         self.patch == other.patch and
         self.prerelease == other.prerelease
         -- notice that build is ignored for precedence in semver 2.0.0
end
function mt:__lt(other)
  if self.major ~= other.major then return self.major < other.major end
  if self.minor ~= other.minor then return self.minor < other.minor end
  if self.patch ~= other.patch then return self.patch < other.patch end
  return smallerPrerelease(self.prerelease, other.prerelease)
  -- notice that build is ignored for precedence in semver 2.0.0
end
-- This works like the "pessimisstic operator" in Rubygems.
-- if a and b are versions, a ^ b means "b is backwards-compatible with a"
-- in other words, "it's safe to upgrade from a to b"
function mt:__pow(other)
  if self.major == 0 then
    return self == other
  end
  return self.major == other.major and
         self.minor <= other.minor
end
function mt:__tostring()
  local buffer = { ("%d.%d.%d"):format(self.major, self.minor, self.patch) }
  if self.prerelease then table.insert(buffer, "-" .. self.prerelease) end
  if self.build      then table.insert(buffer, "+" .. self.build) end
  return table.concat(buffer)
end

local function new(major, minor, patch, prerelease, build)
  assert(major, "At least one parameter is needed")

  if type(major) == 'string' then
    major,minor,patch,prerelease,build = parseVersion(major)
  end
  patch = patch or 0
  minor = minor or 0

  checkPositiveInteger(major, "major")
  checkPositiveInteger(minor, "minor")
  checkPositiveInteger(patch, "patch")

  local result = {major=major, minor=minor, patch=patch, prerelease=prerelease, build=build}
  return setmetatable(result, mt)
end

setmetatable(semver, { __call = function(_, ...) return new(...) end })
semver._VERSION= semver(semver._VERSION)

return semver

end)
__bundle_register("utils.il2cppconst", function(require, _LOADED, __bundle_register, __bundle_modules)
local AndroidInfo = require("utils.androidinfo")

---@type table<number, Il2cppApi>
Il2CppConst = {
    [20] = {
        FieldApiOffset = 0xC,
        FieldApiType = 0x4,
        FieldApiClassOffset = 0x8,
        ClassApiNameOffset = 0x8,
        ClassApiMethodsStep = 2,
        ClassApiCountMethods = 0x9C,
        ClassApiMethodsLink = 0x3C,
        ClassApiFieldsLink = 0x30,
        ClassApiFieldsStep = 0x18,
        ClassApiCountFields = 0xA0,
        ClassApiParentOffset = 0x24,
        ClassApiNameSpaceOffset = 0xC,
        ClassApiStaticFieldDataOffset = 0x50,
        ClassApiEnumType = 0xB0,
        ClassApiEnumRsh = 2,
        ClassApiTypeMetadataHandle = 0x2C,
        ClassApiInstanceSize = 0x78,
        ClassApiToken = 0x98,
        MethodsApiClassOffset = 0xC,
        MethodsApiNameOffset = 0x8,
        MethodsApiParamCount = 0x2E,
        MethodsApiReturnType = 0x10,
        MethodsApiFlags = 0x28,
        typeDefinitionsSize = 0x70,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x38,
        MetadataRegistrationApitypes = 0x1C,
    },
    [21] = {
        FieldApiOffset = 0xC,
        FieldApiType = 0x4,
        FieldApiClassOffset = 0x8,
        ClassApiNameOffset = 0x8,
        ClassApiMethodsStep = 2,
        ClassApiCountMethods = 0x9C,
        ClassApiMethodsLink = 0x3C,
        ClassApiFieldsLink = 0x30,
        ClassApiFieldsStep = 0x18,
        ClassApiCountFields = 0xA0,
        ClassApiParentOffset = 0x24,
        ClassApiNameSpaceOffset = 0xC,
        ClassApiStaticFieldDataOffset = 0x50,
        ClassApiEnumType = 0xB0,
        ClassApiEnumRsh = 2,
        ClassApiTypeMetadataHandle = 0x2C,
        ClassApiInstanceSize = 0x78,
        ClassApiToken = 0x98,
        MethodsApiClassOffset = 0xC,
        MethodsApiNameOffset = 0x8,
        MethodsApiParamCount = 0x2E,
        MethodsApiReturnType = 0x10,
        MethodsApiFlags = 0x28,
        typeDefinitionsSize = 0x78,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x40,
        MetadataRegistrationApitypes = 0x1C,
    },
    [22] = {
        FieldApiOffset = 0xC,
        FieldApiType = 0x4,
        FieldApiClassOffset = 0x8,
        ClassApiNameOffset = 0x8,
        ClassApiMethodsStep = 2,
        ClassApiCountMethods = 0x94,
        ClassApiMethodsLink = 0x3C,
        ClassApiFieldsLink = 0x30,
        ClassApiFieldsStep = 0x18,
        ClassApiCountFields = 0x98,
        ClassApiParentOffset = 0x24,
        ClassApiNameSpaceOffset = 0xC,
        ClassApiStaticFieldDataOffset = 0x4C,
        ClassApiEnumType = 0xA9,
        ClassApiEnumRsh = 2,
        ClassApiTypeMetadataHandle = 0x2C,
        ClassApiInstanceSize = 0x70,
        ClassApiToken = 0x90,
        MethodsApiClassOffset = 0xC,
        MethodsApiNameOffset = 0x8,
        MethodsApiParamCount = 0x2E,
        MethodsApiReturnType = 0x10,
        MethodsApiFlags = 0x28,
        typeDefinitionsSize = 0x78,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x40,
        MetadataRegistrationApitypes = 0x1C,
    },
    [23] = {
        FieldApiOffset = 0xC,
        FieldApiType = 0x4,
        FieldApiClassOffset = 0x8,
        ClassApiNameOffset = 0x8,
        ClassApiMethodsStep = 2,
        ClassApiCountMethods = 0x9C,
        ClassApiMethodsLink = 0x40,
        ClassApiFieldsLink = 0x34,
        ClassApiFieldsStep = 0x18,
        ClassApiCountFields = 0xA0,
        ClassApiParentOffset = 0x24,
        ClassApiNameSpaceOffset = 0xC,
        ClassApiStaticFieldDataOffset = 0x50,
        ClassApiEnumType = 0xB1,
        ClassApiEnumRsh = 2,
        ClassApiTypeMetadataHandle = 0x2C,
        ClassApiInstanceSize = 0x78,
        ClassApiToken = 0x98,
        MethodsApiClassOffset = 0xC,
        MethodsApiNameOffset = 0x8,
        MethodsApiParamCount = 0x2E,
        MethodsApiReturnType = 0x10,
        MethodsApiFlags = 0x28,
        typeDefinitionsSize = 104,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x30,
        MetadataRegistrationApitypes = 0x1C,
    },
    [24.1] = {
        FieldApiOffset = AndroidInfo.platform and 0x18 or 0xC,
        FieldApiType = AndroidInfo.platform and 0x8 or 0x4,
        FieldApiClassOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiMethodsStep = AndroidInfo.platform and 3 or 2,
        ClassApiCountMethods = AndroidInfo.platform and 0x110 or 0xA8,
        ClassApiMethodsLink = AndroidInfo.platform and 0x98 or 0x4C,
        ClassApiFieldsLink = AndroidInfo.platform and 0x80 or 0x40,
        ClassApiFieldsStep = AndroidInfo.platform and 0x20 or 0x14,
        ClassApiCountFields = AndroidInfo.platform and 0x114 or 0xAC,
        ClassApiParentOffset = AndroidInfo.platform and 0x58 or 0x2C,
        ClassApiNameSpaceOffset = AndroidInfo.platform and 0x18 or 0xC,
        ClassApiStaticFieldDataOffset = AndroidInfo.platform and 0xB8 or 0x5C,
        ClassApiEnumType = AndroidInfo.platform and 0x126 or 0xBE,
        ClassApiEnumRsh = 3,
        ClassApiTypeMetadataHandle = AndroidInfo.platform and 0x68 or 0x34,
        ClassApiInstanceSize = AndroidInfo.platform and 0xEC or 0x84,
        ClassApiToken = AndroidInfo.platform and 0x10c or 0xa4,
        MethodsApiClassOffset = AndroidInfo.platform and 0x18 or 0xC,
        MethodsApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        MethodsApiParamCount = AndroidInfo.platform and 0x4A or 0x2A,
        MethodsApiReturnType = AndroidInfo.platform and 0x20 or 0x10,
        MethodsApiFlags = AndroidInfo.platform and 0x44 or 0x24,
        typeDefinitionsSize = 100,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = AndroidInfo.platform and 0xA or 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x2C,
        MetadataRegistrationApitypes = AndroidInfo.platform and 0x38 or 0x1C,
    },
    [24] = {
        FieldApiOffset = AndroidInfo.platform and 0x18 or 0xC,
        FieldApiType = AndroidInfo.platform and 0x8 or 0x4,
        FieldApiClassOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiMethodsStep = AndroidInfo.platform and 3 or 2,
        ClassApiCountMethods = AndroidInfo.platform and 0x114 or 0xAC,
        ClassApiMethodsLink = AndroidInfo.platform and 0x98 or 0x4C,
        ClassApiFieldsLink = AndroidInfo.platform and 0x80 or 0x40,
        ClassApiFieldsStep = AndroidInfo.platform and 0x28 or 0x18,
        ClassApiCountFields = AndroidInfo.platform and 0x118 or 0xB0,
        ClassApiParentOffset = AndroidInfo.platform and 0x58 or 0x2C,
        ClassApiNameSpaceOffset = AndroidInfo.platform and 0x18 or 0xC,
        ClassApiStaticFieldDataOffset = AndroidInfo.platform and 0xB8 or 0x5C,
        ClassApiEnumType = AndroidInfo.platform and 0x129 or 0xC1,
        ClassApiEnumRsh = 2,
        ClassApiTypeMetadataHandle = AndroidInfo.platform and 0x68 or 0x34,
        ClassApiInstanceSize = AndroidInfo.platform and 0xF0 or 0x88,
        ClassApiToken = AndroidInfo.platform and 0x110 or 0xa8,
        MethodsApiClassOffset = AndroidInfo.platform and 0x18 or 0xC,
        MethodsApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        MethodsApiParamCount = AndroidInfo.platform and 0x4E or 0x2E,
        MethodsApiReturnType = AndroidInfo.platform and 0x20 or 0x10,
        MethodsApiFlags = AndroidInfo.platform and 0x48 or 0x28,
        typeDefinitionsSize = 104,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = AndroidInfo.platform and 0xA or 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x30,
        MetadataRegistrationApitypes = AndroidInfo.platform and 0x38 or 0x1C,
    },
    [24.2] = {
        FieldApiOffset = AndroidInfo.platform and 0x18 or 0xC,
        FieldApiType = AndroidInfo.platform and 0x8 or 0x4,
        FieldApiClassOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiMethodsStep = AndroidInfo.platform and 3 or 2,
        ClassApiCountMethods = AndroidInfo.platform and 0x118 or 0xA4,
        ClassApiMethodsLink = AndroidInfo.platform and 0x98 or 0x4C,
        ClassApiFieldsLink = AndroidInfo.platform and 0x80 or 0x40,
        ClassApiFieldsStep = AndroidInfo.platform and 0x20 or 0x14,
        ClassApiCountFields = AndroidInfo.platform and 0x11c or 0xA8,
        ClassApiParentOffset = AndroidInfo.platform and 0x58 or 0x2C,
        ClassApiNameSpaceOffset = AndroidInfo.platform and 0x18 or 0xC,
        ClassApiStaticFieldDataOffset = AndroidInfo.platform and 0xB8 or 0x5C,
        ClassApiEnumType = AndroidInfo.platform and 0x12e or 0xBA,
        ClassApiEnumRsh = 3,
        ClassApiTypeMetadataHandle = AndroidInfo.platform and 0x68 or 0x34,
        ClassApiInstanceSize = AndroidInfo.platform and 0xF4 or 0x80,
        ClassApiToken = AndroidInfo.platform and 0x114 or 0xa0,
        MethodsApiClassOffset = AndroidInfo.platform and 0x18 or 0xC,
        MethodsApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        MethodsApiParamCount = AndroidInfo.platform and 0x4A or 0x2A,
        MethodsApiReturnType = AndroidInfo.platform and 0x20 or 0x10,
        MethodsApiFlags = AndroidInfo.platform and 0x44 or 0x24,
        typeDefinitionsSize = 92,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = AndroidInfo.platform and 0xA or 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x24,
        MetadataRegistrationApitypes = AndroidInfo.platform and 0x38 or 0x1C,
    },
    [24.3] = {
        FieldApiOffset = AndroidInfo.platform and 0x18 or 0xC,
        FieldApiType = AndroidInfo.platform and 0x8 or 0x4,
        FieldApiClassOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiMethodsStep = AndroidInfo.platform and 3 or 2,
        ClassApiCountMethods = AndroidInfo.platform and 0x118 or 0xA4,
        ClassApiMethodsLink = AndroidInfo.platform and 0x98 or 0x4C,
        ClassApiFieldsLink = AndroidInfo.platform and 0x80 or 0x40,
        ClassApiFieldsStep = AndroidInfo.platform and 0x20 or 0x14,
        ClassApiCountFields = AndroidInfo.platform and 0x11c or 0xA8,
        ClassApiParentOffset = AndroidInfo.platform and 0x58 or 0x2C,
        ClassApiNameSpaceOffset = AndroidInfo.platform and 0x18 or 0xC,
        ClassApiStaticFieldDataOffset = AndroidInfo.platform and 0xB8 or 0x5C,
        ClassApiEnumType = AndroidInfo.platform and 0x12e or 0xBA,
        ClassApiEnumRsh = 3,
        ClassApiTypeMetadataHandle = AndroidInfo.platform and 0x68 or 0x34,
        ClassApiInstanceSize = AndroidInfo.platform and 0xF4 or 0x80,
        ClassApiToken = AndroidInfo.platform and 0x114 or 0xa0,
        MethodsApiClassOffset = AndroidInfo.platform and 0x18 or 0xC,
        MethodsApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        MethodsApiParamCount = AndroidInfo.platform and 0x4A or 0x2A,
        MethodsApiReturnType = AndroidInfo.platform and 0x20 or 0x10,
        MethodsApiFlags = AndroidInfo.platform and 0x44 or 0x24,
        typeDefinitionsSize = 92,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = AndroidInfo.platform and 0xA or 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x24,
        MetadataRegistrationApitypes = AndroidInfo.platform and 0x38 or 0x1C,
    },
    [24.4] = {
        FieldApiOffset = AndroidInfo.platform and 0x18 or 0xC,
        FieldApiType = AndroidInfo.platform and 0x8 or 0x4,
        FieldApiClassOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiMethodsStep = AndroidInfo.platform and 3 or 2,
        ClassApiCountMethods = AndroidInfo.platform and 0x118 or 0xA4,
        ClassApiMethodsLink = AndroidInfo.platform and 0x98 or 0x4C,
        ClassApiFieldsLink = AndroidInfo.platform and 0x80 or 0x40,
        ClassApiFieldsStep = AndroidInfo.platform and 0x20 or 0x14,
        ClassApiCountFields = AndroidInfo.platform and 0x11c or 0xA8,
        ClassApiParentOffset = AndroidInfo.platform and 0x58 or 0x2C,
        ClassApiNameSpaceOffset = AndroidInfo.platform and 0x18 or 0xC,
        ClassApiStaticFieldDataOffset = AndroidInfo.platform and 0xB8 or 0x5C,
        ClassApiEnumType = AndroidInfo.platform and 0x12e or 0xBA,
        ClassApiEnumRsh = 3,
        ClassApiTypeMetadataHandle = AndroidInfo.platform and 0x68 or 0x34,
        ClassApiInstanceSize = AndroidInfo.platform and 0xF4 or 0x80,
        ClassApiToken = AndroidInfo.platform and 0x114 or 0xa0,
        MethodsApiClassOffset = AndroidInfo.platform and 0x18 or 0xC,
        MethodsApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        MethodsApiParamCount = AndroidInfo.platform and 0x4A or 0x2A,
        MethodsApiReturnType = AndroidInfo.platform and 0x20 or 0x10,
        MethodsApiFlags = AndroidInfo.platform and 0x44 or 0x24,
        typeDefinitionsSize = 92,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = AndroidInfo.platform and 0xA or 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x24,
        MetadataRegistrationApitypes = AndroidInfo.platform and 0x38 or 0x1C,
    },
    [24.5] = {
        FieldApiOffset = AndroidInfo.platform and 0x18 or 0xC,
        FieldApiType = AndroidInfo.platform and 0x8 or 0x4,
        FieldApiClassOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiMethodsStep = AndroidInfo.platform and 3 or 2,
        ClassApiCountMethods = AndroidInfo.platform and 0x118 or 0xA4,
        ClassApiMethodsLink = AndroidInfo.platform and 0x98 or 0x4C,
        ClassApiFieldsLink = AndroidInfo.platform and 0x80 or 0x40,
        ClassApiFieldsStep = AndroidInfo.platform and 0x20 or 0x14,
        ClassApiCountFields = AndroidInfo.platform and 0x11c or 0xA8,
        ClassApiParentOffset = AndroidInfo.platform and 0x58 or 0x2C,
        ClassApiNameSpaceOffset = AndroidInfo.platform and 0x18 or 0xC,
        ClassApiStaticFieldDataOffset = AndroidInfo.platform and 0xB8 or 0x5C,
        ClassApiEnumType = AndroidInfo.platform and 0x12e or 0xBA,
        ClassApiEnumRsh = 3,
        ClassApiTypeMetadataHandle = AndroidInfo.platform and 0x68 or 0x34,
        ClassApiInstanceSize = AndroidInfo.platform and 0xF4 or 0x80,
        ClassApiToken = AndroidInfo.platform and 0x114 or 0xa0,
        MethodsApiClassOffset = AndroidInfo.platform and 0x18 or 0xC,
        MethodsApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        MethodsApiParamCount = AndroidInfo.platform and 0x4A or 0x2A,
        MethodsApiReturnType = AndroidInfo.platform and 0x20 or 0x10,
        MethodsApiFlags = AndroidInfo.platform and 0x44 or 0x24,
        typeDefinitionsSize = 92,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = AndroidInfo.platform and 0xA or 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x24,
        MetadataRegistrationApitypes = AndroidInfo.platform and 0x38 or 0x1C,
    },
    [27] = {
        FieldApiOffset = AndroidInfo.platform and 0x18 or 0xC,
        FieldApiType = AndroidInfo.platform and 0x8 or 0x4,
        FieldApiClassOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiMethodsStep = AndroidInfo.platform and 3 or 2,
        ClassApiCountMethods = AndroidInfo.platform and 0x11C or 0xA4,
        ClassApiMethodsLink = AndroidInfo.platform and 0x98 or 0x4C,
        ClassApiFieldsLink = AndroidInfo.platform and 0x80 or 0x40,
        ClassApiFieldsStep = AndroidInfo.platform and 0x20 or 0x14,
        ClassApiCountFields = AndroidInfo.platform and 0x120 or 0xA8,
        ClassApiParentOffset = AndroidInfo.platform and 0x58 or 0x2C,
        ClassApiNameSpaceOffset = AndroidInfo.platform and 0x18 or 0xC,
        ClassApiStaticFieldDataOffset = AndroidInfo.platform and 0xB8 or 0x5C,
        ClassApiEnumType = AndroidInfo.platform and 0x132 or 0xBA,
        ClassApiEnumRsh = 3,
        ClassApiTypeMetadataHandle = AndroidInfo.platform and 0x68 or 0x34,
        ClassApiInstanceSize = AndroidInfo.platform and 0xF8 or 0x80,
        ClassApiToken = AndroidInfo.platform and 0x118 or 0xa0,
        MethodsApiClassOffset = AndroidInfo.platform and 0x18 or 0xC,
        MethodsApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        MethodsApiParamCount = AndroidInfo.platform and 0x4A or 0x2A,
        MethodsApiReturnType = AndroidInfo.platform and 0x20 or 0x10,
        MethodsApiFlags = AndroidInfo.platform and 0x44 or 0x24,
        typeDefinitionsSize = 88,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = AndroidInfo.platform and 0xA or 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x20,
        MetadataRegistrationApitypes = AndroidInfo.platform and 0x38 or 0x1C,
    },
    [27.1] = {
        FieldApiOffset = AndroidInfo.platform and 0x18 or 0xC,
        FieldApiType = AndroidInfo.platform and 0x8 or 0x4,
        FieldApiClassOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiMethodsStep = AndroidInfo.platform and 3 or 2,
        ClassApiCountMethods = AndroidInfo.platform and 0x11C or 0xA4,
        ClassApiMethodsLink = AndroidInfo.platform and 0x98 or 0x4C,
        ClassApiFieldsLink = AndroidInfo.platform and 0x80 or 0x40,
        ClassApiFieldsStep = AndroidInfo.platform and 0x20 or 0x14,
        ClassApiCountFields = AndroidInfo.platform and 0x120 or 0xA8,
        ClassApiParentOffset = AndroidInfo.platform and 0x58 or 0x2C,
        ClassApiNameSpaceOffset = AndroidInfo.platform and 0x18 or 0xC,
        ClassApiStaticFieldDataOffset = AndroidInfo.platform and 0xB8 or 0x5C,
        ClassApiEnumType = AndroidInfo.platform and 0x132 or 0xBA,
        ClassApiEnumRsh = 3,
        ClassApiTypeMetadataHandle = AndroidInfo.platform and 0x68 or 0x34,
        ClassApiInstanceSize = AndroidInfo.platform and 0xF8 or 0x80,
        ClassApiToken = AndroidInfo.platform and 0x118 or 0xa0,
        MethodsApiClassOffset = AndroidInfo.platform and 0x18 or 0xC,
        MethodsApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        MethodsApiParamCount = AndroidInfo.platform and 0x4A or 0x2A,
        MethodsApiReturnType = AndroidInfo.platform and 0x20 or 0x10,
        MethodsApiFlags = AndroidInfo.platform and 0x44 or 0x24,
        typeDefinitionsSize = 88,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = AndroidInfo.platform and 0xA or 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x20,
        MetadataRegistrationApitypes = AndroidInfo.platform and 0x38 or 0x1C,
    },
    [27.2] = {
        FieldApiOffset = AndroidInfo.platform and 0x18 or 0xC,
        FieldApiType = AndroidInfo.platform and 0x8 or 0x4,
        FieldApiClassOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiMethodsStep = AndroidInfo.platform and 3 or 2,
        ClassApiCountMethods = AndroidInfo.platform and 0x11C or 0xA4,
        ClassApiMethodsLink = AndroidInfo.platform and 0x98 or 0x4C,
        ClassApiFieldsLink = AndroidInfo.platform and 0x80 or 0x40,
        ClassApiFieldsStep = AndroidInfo.platform and 0x20 or 0x14,
        ClassApiCountFields = AndroidInfo.platform and 0x120 or 0xA8,
        ClassApiParentOffset = AndroidInfo.platform and 0x58 or 0x2C,
        ClassApiNameSpaceOffset = AndroidInfo.platform and 0x18 or 0xC,
        ClassApiStaticFieldDataOffset = AndroidInfo.platform and 0xB8 or 0x5C,
        ClassApiEnumType = AndroidInfo.platform and 0x132 or 0xBA,
        ClassApiEnumRsh = 2,
        ClassApiTypeMetadataHandle = AndroidInfo.platform and 0x68 or 0x34,
        ClassApiInstanceSize = AndroidInfo.platform and 0xF8 or 0x80,
        ClassApiToken = AndroidInfo.platform and 0x118 or 0xa0,
        MethodsApiClassOffset = AndroidInfo.platform and 0x18 or 0xC,
        MethodsApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        MethodsApiParamCount = AndroidInfo.platform and 0x4A or 0x2A,
        MethodsApiReturnType = AndroidInfo.platform and 0x20 or 0x10,
        MethodsApiFlags = AndroidInfo.platform and 0x44 or 0x24,
        typeDefinitionsSize = 88,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = AndroidInfo.platform and 0xA or 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x20,
        MetadataRegistrationApitypes = AndroidInfo.platform and 0x38 or 0x1C,
    },
    [29] = {
        FieldApiOffset = AndroidInfo.platform and 0x18 or 0xC,
        FieldApiType = AndroidInfo.platform and 0x8 or 0x4,
        FieldApiClassOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiNameOffset = AndroidInfo.platform and 0x10 or 0x8,
        ClassApiMethodsStep = AndroidInfo.platform and 3 or 2,
        ClassApiCountMethods = AndroidInfo.platform and 0x11C or 0xA4,
        ClassApiMethodsLink = AndroidInfo.platform and 0x98 or 0x4C,
        ClassApiFieldsLink = AndroidInfo.platform and 0x80 or 0x40,
        ClassApiFieldsStep = AndroidInfo.platform and 0x20 or 0x14,
        ClassApiCountFields = AndroidInfo.platform and 0x120 or 0xA8,
        ClassApiParentOffset = AndroidInfo.platform and 0x58 or 0x2C,
        ClassApiNameSpaceOffset = AndroidInfo.platform and 0x18 or 0xC,
        ClassApiStaticFieldDataOffset = AndroidInfo.platform and 0xB8 or 0x5C,
        ClassApiEnumType = AndroidInfo.platform and 0x132 or 0xBA,
        ClassApiEnumRsh = 2,
        ClassApiTypeMetadataHandle = AndroidInfo.platform and 0x68 or 0x34,
        ClassApiInstanceSize = AndroidInfo.platform and 0xF8 or 0x80,
        ClassApiToken = AndroidInfo.platform and 0x118 or 0xa0,
        MethodsApiClassOffset = AndroidInfo.platform and 0x20 or 0x10,
        MethodsApiNameOffset = AndroidInfo.platform and 0x18 or 0xC,
        MethodsApiParamCount = AndroidInfo.platform and 0x52 or 0x2E,
        MethodsApiReturnType = AndroidInfo.platform and 0x28 or 0x14,
        MethodsApiFlags = AndroidInfo.platform and 0x4C or 0x28,
        typeDefinitionsSize = 88,
        typeDefinitionsOffset = 0xA0,
        stringOffset = 0x18,
        fieldDefaultValuesOffset = 0x40,
        fieldDefaultValuesSize = 0x44,
        fieldAndParameterDefaultValueDataOffset = 0x48,
        TypeApiType = AndroidInfo.platform and 0xA or 0x6,
        Il2CppTypeDefinitionApifieldStart = 0x20,
        MetadataRegistrationApitypes = AndroidInfo.platform and 0x38 or 0x1C,
    }
}


---@class Il2CppFlags
---@field Method MethodFlags
---@field Field FieldFlags
Il2CppFlags = {
    Method = {
        METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK = 0x0007,
        Access = {
            "private", -- METHOD_ATTRIBUTE_PRIVATE
            "internal", -- METHOD_ATTRIBUTE_FAM_AND_ASSEM
            "internal", -- METHOD_ATTRIBUTE_ASSEM
            "protected", -- METHOD_ATTRIBUTE_FAMILY
            "protected internal", -- METHOD_ATTRIBUTE_FAM_OR_ASSEM
            "public", -- METHOD_ATTRIBUTE_PUBLIC
        },
        METHOD_ATTRIBUTE_STATIC = 0x0010,
        METHOD_ATTRIBUTE_ABSTRACT = 0x0400,
    },
    Field = {
        FIELD_ATTRIBUTE_FIELD_ACCESS_MASK = 0x0007,
        Access = {
            "private", -- FIELD_ATTRIBUTE_PRIVATE
            "internal", -- FIELD_ATTRIBUTE_FAM_AND_ASSEM
            "internal", -- FIELD_ATTRIBUTE_ASSEMBLY
            "protected", -- FIELD_ATTRIBUTE_FAMILY
            "protected internal", -- FIELD_ATTRIBUTE_FAM_OR_ASSEM
            "public", -- FIELD_ATTRIBUTE_PUBLIC
        },
        FIELD_ATTRIBUTE_STATIC = 0x0010,
        FIELD_ATTRIBUTE_LITERAL = 0x0040,
    }
}
end)
return __bundle_require("GGIl2cpp")
end
function YXSOMODx32XB(NAME,SOTYPE,SONAME,TYPE,VALUE,VALUEXB)
local SOMOD=gg.getRangesList("il2cpp.so")
if SOMOD[1]==nil then gg.toast(NAME.."开启失败") else
SOMOD_byYx()
Il2cpp({il2cppVersion=27})
search = Il2cpp.FindMethods
({SONAME})
local Value = {SOTYPE}
local conut = { }
for k ,v in ipairs (search) do
for kk ,vv in ipairs (v) do
if vv.ClassName==Value[k] then
cncat ="0x"..vv.Offset..'\n'
gg.setValues({{address=gg.getRangesList('il2cpp.so')[1].start+cncat,flags=TYPE,value=VALUE}})
gg.setValues({{address=gg.getRangesList('il2cpp.so')[1].start+cncat+4,flags=TYPE,value=VALUEXB}})
gg.toast(NAME.."开启成功")
                end
            end
        end
    end
end


ms={}
function setvalue(add,value,falgs,dj)
local WY={}WY[1]={}WY[1].address=add WY[1].value=value WY[1].flags=falgs
if dj==true then
WY[1].freeze=true gg.addListItems(WY)
else
gg.setValues(WY)
end
end
function ms.ss(num,ty,nc)
local GGNUMBER_1=num
local GGNUMBER_2=ty
local GGNUMBER_3=false
local GGNUMBER_4=gg.SIGN_EQUAL
local GGNUMBER_5=0x3000000
local GGNUMBER_6=0xFFFFFFFF
local GGNUMBER_7=0
gg.clearResults()
gg.setRanges(nc)
gg.searchNumber(GGNUMBER_1,GGNUMBER_2,GGNUMBER_3,GGNUMBER_4,GGNUMBER_5,GGNUMBER_6,GGNUMBER_7)
Result=gg.getResults(gg.getResultCount())
end
function ms.py(num,py,ty)
if(Result and#Result~=0)then
t={}
for i,v in ipairs(Result)do
t[i]={}t[i].address=v.address+py t[i].flags=ty
end
t=gg.getValues(t)
for i,v in ipairs(t)do
if v.value ~= num then
Result[i]=nil
end
end
local MS={}
for i,v in pairs(Result)do
MS[#MS+1]=v
end
Result=MS
end
end
function ms.bc()
data={}
if Result==nil or #Result==0 then

else
for i,v in pairs(Result)do
data[#data+1]=v.address
end
end
Result = nil
end
function ms.edit(nn,off,ty,dj)
if(Result) then
ms.bc()
end
if#data>0 then
for i,v in ipairs(data)do
setvalue(v+off,nn,ty,dj or false)
end

end
end


function search(ss,lx,nc,dz1,dz2)  if ss~=nil then if lx~=nil then  if nc==nil then nc=32 end  gg.setRanges(nc)  if dz1==nil then dz1="-1" end  if dz2==nil then dz1="0" end  gg.searchNumber(ss,lx,false,gg.SIGN_EQUAL,dz1,dz2)  sl=gg.getResultCount()  if sl~=0 then  sj=gg.getResults(sl)  gg.toast("️搜索到 "..sl.." 个结果")  gg.clearResults()  else  gg.toast("失败了小老弟")  end  else  gg.toast("失败了小老弟")  end  else  gg.toast("失败了小老弟")  end  end  function py1(value,lx,py)  if #sj~=nil then  z1={} z2={}  for i=1,#sj do  z1[1]={}  z1[1].address=sj[i].address+py  z1[1].flags=lx  z1=gg.getValues(z1)  if z1[1].value==value then  z2[#z2+1]={}  z2[#z2]=sj[i]  end end  sj=z2  z1={} z2={}  gg.toast("共偏移 "..#sj.." 个数据")  else  gg.toast("失败了小老弟")  end  end  function py2(value,lx,py)  if #sj~=nil then  z1={} z2={}  for i=1,#sj do  z1[1]={}  z1[1].address=sj[i].address+py  z1[1].flags=lx  z1=gg.getValues(z1)  if z1[1].value~=value then  z2[#z2+1]={}  z2[#z2]=sj[i]  end end  sj=z2  z1={} z2={}  gg.toast("共偏移 "..#sj.." 个数据")  else  gg.toast("失败了小老弟")  end  end  function xg1(value,lx,py,dj)  if #sj~=nil then  z={}  for i=1,#sj do  z[i]={}  z[i].address=sj[i].address+py  z[i].flags=lx  z[i].value=value  if dj==true then z[i].freeze=true end  end  if dj==true then  gg.addListItems(z)  else  gg.clearList()  gg.setValues(z)  end  gg.toast("共修改 "..#z.." 个数据️")  else  gg.toast("失败了小老弟")  end  end  function xg2(bz,value,lx,py,dj)  if #bz~=nil then  z={}  for i=1,#bz do  z[i]={}  z[i].address=bz[i].address+py  z[i].flags=lx  z[i].value=value  if dj==true then z[i].freeze=true end  end  if dj==true then  gg.addListItems(z)  else  gg.clearList()  gg.setValues(z)  end  gg.toast("共修改 "..#z.." 个数据")  else  gg.toast("失败了小老弟")  end  end  function bc(bz)  if sj~=nil then  _ENV[bz]=sj  else  gg.toast("失败了小老弟")  end  end 
function xg1(value,lx,py,dj) if sj~=nil and #sj>0 then z={} for i=1,#sj do z[i]={} z[i].address=sj[i].address+py z[i].flags=lx if value == nil then value = readValue(z[i].address, lx) end z[i].value= value z[i].freeze = dj and true or false end if dj == true or dj == false then gg.addListItems(z) else gg.setValues(z) end gg.toast('') else gg.toast('') end end

sz = function ( Address , Value )
	local Somod = gg.getRangesList ( 'il2cpp.so' ) [ 1 ]
	if Somod == nil then
		gg.alert ( '请重新选择地铁跑酷进程' )
	else
		local So = Somod.start
		local Add = So + Address
		gg.processPause ( )
		gg.setValues ( { { address = Add , flags = 4 , value = Value } } )
		gg.setValues ( { { address = Add + 4 , flags = 4 , value = "~A BX	 LR" } } )
		gg.processResume ( )
	end
end



function a4c(FUNCTIONADD,TYPE,VALUE)
local SOMOD=gg.getRangesList("il2cpp.so")
if SOMOD[1]==nil then _error() else
gg.setValues({{address=SOMOD[1].start+FUNCTIONADD,flags=TYPE,value=VALUE}})
gg.setValues({{address=SOMOD[1].start+FUNCTIONADD+4,flags=TYPE,value="1EFF2FE1r"}})
end
end

function readPointer(name, offset, i)
	local re = gg.getRangesList(name)
	local x64 = gg.getTargetInfo().x64
	local va = {[true] = 32, [false] = 4}
	if re[i or 1] then
		local addr = re[i or 1].start + offset[1]
		for i = 2, #offset do
			addr = gg.getValues({{address = addr, flags = va[x64]}})
			if not x64 then
				addr[1].value = addr[1].value & 0xFFFFFFFF
			end
			addr = addr[1].value + offset[i]
		end
		return addr
	end
end

function gg.edits(addr, Table, name)
	local Table1 = {{}, {}}
	for k, v in ipairs(Table) do
		local value = {address = addr + v[3], value = v[1], flags = v[2], freeze = v[4]}
		if v[4] then
			Table1[2][#Table1[2] + 1] = value
		else
			Table1[1][#Table1[1] + 1] = value
		end
	end
	gg.addListItems(Table1[2])
	gg.setValues(Table1[1])

end


function S_Pointer(t_So, t_Offset, _bit)
	local function getRanges()
		local ranges = {}
		local t = gg.getRangesList('^/data/*.so*$')
		for i, v in pairs(t) do
			if v.type:sub(2, 2) == 'w' then
				table.insert(ranges, v)
			end
		end
		return ranges
	end
	local function Get_Address(N_So, Offset, ti_bit)
		local ti = gg.getTargetInfo()
		local S_list = getRanges()
		local t = {}
		local _t
		local _S = nil
		if ti_bit then
			_t = 32
		else
			_t = 4
		end
		for i in pairs(S_list) do
			local _N = S_list[i].internalName:gsub('^.*/', '')
			if N_So[1] == _N and N_So[2] == S_list[i].state then
				_S = S_list[i]
				break
			end
		end
		if _S then
			t[#t + 1] = {}
			t[#t].address = _S.start + Offset[1]
			t[#t].flags = _t
			if #Offset ~= 1 then
				for i = 2, #Offset do
					local S = gg.getValues(t)
					t = {}
					for _ in pairs(S) do
						if not ti.x64 then
							S[_].value = S[_].value & 0xFFFFFFFF
						end
						t[#t + 1] = {}
						t[#t].address = S[_].value + Offset[i]
						t[#t].flags = _t
					end
				end
			end
			_S = t[#t].address
		end
		return _S
	end
	local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit))
	return _A
end




-----------------------------------------------------------------------------------------

ms = { }
function setvalue ( add , value , falgs , dj )
	local WY = { } WY [ 1 ] = { } WY [ 1 ].address = add WY [ 1 ].value = value WY [ 1 ].flags = falgs
	if dj == true then
		WY [ 1 ].freeze = true gg.addListItems ( WY )
	else
		gg.setValues ( WY )
	end
end

menu ={}
name ={}
id = 0
play = false
song = ""

_G_ = {
	function()
		local searchMusic = gg.prompt({
			"歌曲•歌手",
			"列表•限制",
		},{"","10"},{
			"text",
			"text",
		})
		if not searchMusic then gg.setVisible(false) Main() elseif
			searchMusic[1] == "" then gg.alert("请输入歌曲/歌手!") _G_[1]()
			else
			local results = gg.makeRequest("http://music.163.com/api/search/get?s="..searchMusic[1].."&type=1&offset=0&total=true&limit="..searchMusic[2])
			if results.code == 200 then
				n=1
				for v,k in results.content:gmatch('"id":(.-),"name":"(.-)"') do
					if n%4 == 1 then
						menu[n/4+1] = v..";"..k
					end
					if n%4 == 2 then
						menu[n/4+1] = menu[n/4+1]..";"..k
					end
					n=n+1
				end
				_G_[2]()
				else
				local s = gg.alert("请求异常,请检查网络……","返回","退出")
				if not s then gg.setVisible(false) Main() end
				if s == 1 then os.exit() end
				if s == 2 then _G_[1]() end
			end
		end
	end,
	function()
		if #menu == 0 then gg.alert("没有搜索记录") Main() else
			for n=1,#menu do
				name[n] = menu[n]:gsub("[0-9]+;",""):gsub(";","\n歌手:")
			end
			local mu = gg.choice(name,0,"歌单")
			if not mu then _G_[1]() else
				song = name[mu]
				local sn=gg.choice({"播放","查看歌词"},nil,"歌曲:"..name[mu])
				if not sn then _G_[1]() end
				if sn == 1 then
					id = menu[mu]:match("(.-);")
					gg.toast("正在播放音乐:"..name[mu],true)
					gg.playMusic("http://music.163.com/song/media/outer/url?id="..id..".mp3")
					play = true
				end
				if sn == 2 then id = menu[mu]:match("(.-);") song = name[mu] _G_[3]() end
			end
		end
	end,
	function()
		if id == 0 then gg.alert("未有播放记录") Main() else
			local results = gg.makeRequest("http://music.163.com/api/song/media?id="..id).content
			rs = results:match('"lyric":"(.-)","code'):gsub("\\n","\n"):gsub("[[!-z]+]","")
			gg.alert("\n《"..song:gsub("\n","》\n").."\n\n"..rs)
			gg.setVisible(false)
		end
	end,
	function()
		if play then
			play = false
			gg.toast("正在停止播放...")
			for i=1,100 do
				gg.playMusic("stop")
				gg.playMusic("stop")
				gg.playMusic("stop")
				gg.playMusic("stop")
				gg.playMusic("stop")
				gg.playMusic("stop")
			end
			gg.toast("播放已停止")
			else
			gg.toast("无正在播放的音乐")
		end
	end,
	function()
		gg.setVisible(false)
		if play then _G_[4]() end
		LSP()
	end
}
function WTYY()
	local emo = gg.choice({
		"搜索歌曲",
		"搜索列表",
		"显示歌词",
		"暂停播放",
	},nil,"   ")
	if not emo then gg.setVisible(false) end
	if emo then
		_G_[emo]()
	end
end


wyyget="http://120.24.160.246:3000/"
function huoqu(txt)
return table.json(gg.makeRequest(wyyget.."song/url/v1?id="..txt.."").content)
end
function souyy(txt)
tbttt=gg.makeRequest(wyyget.."search?keywords="..txt.."&limit=10")
if tbttt==nil or type(tbttt)=="string" then gg.alert("网络异常") luajava.runUiThread(function()
luajava.getIdView("jzz"):setVisibility(View.GONE)
luajava.getIdView("sstxt"):setVisibility(View.VISIBLE)
end) end
return table.json(tbttt.content)
end
function develo(tabb)
gg.alert(tostring(tabb))
end
function develo2(tabb)
gg.copyText(tostring(tabb))
end
function tablekIn(tbl, key)
    if tbl == nil then
        return false
    end
    for k, v in pairs(tbl) do
        if k == key then
            return true
        end
    end
    return false
end
function searchmusic()
if not lasttm then lasttm=os.time() else
if os.time()-lasttm<=5 then gg.alert("请在"..(5-(os.time()-lasttm)).."秒冷却后搜索")
    return 0 end end
if not wryt then else runnable = luajava.getRunnable(function() luajava.getIdView("搜索列表"):removeView(wyr) end)
handler = luajava.getHandler()
handler:post(runnable) end
mustxt=luajava.getIdView("搜索"):getText()
if string.len(tostring(mustxt))<=2 or tostring(mustxt)==nil then gg.alert("你踏马还没输入") return 0 end
mustxt=tostring(mustxt)
luajava.runUiThread(function()
luajava.getIdView("jzz"):setVisibility(View.VISIBLE)
luajava.getIdView("sstxt"):setVisibility(View.GONE)
end)
lasttm=os.time()
mustable=souyy(mustxt)
mustable=mustable.result.songs
musnames={} musids={} musarts={}
musictable={}
for k,v in pairs(mustable) do
if tonumber(v.fee)==0 or tonumber(v.fee)==8 then
musictable[#musictable+1]=v
end
end
--gg.alert(tostring(mustable))
--gg.alert(tostring(musictable))
--gg.copyText(tostring(mustable))
--gg.alert(#musictable)
wrfun={}
wryt={LinearLayout,
    id=luajava.newId("搜索结果"),
    layout_marginTop="5dp",
    layout_marginBottom="5dp",
    orientation="vertical",
    
}
for i=1,#musictable do
musid=musictable[i].id
musids[#musids+1]=musid
musname=musictable[i].name
if tablekIn(musictable[i], "transNames")~=false then
musname=musname .."\n(".. musictable[i].transNames[0]..")"
end
musnames[#musnames+1]=musname
musart=musictable[i].artists[0].name
musarts[#musarts+1]=musart
wryt[#wryt+1]={LinearLayout,
    orientation="vertical",
    layout_marginTop="2dp",
    layout_marginBottom="2dp",
    background=getseekgra(),
    id=luajava.newId("音"..musid),
    onClick=function() 
        thread = luajava.getPThread(function()  bofang(musname,musid) end)
		thread:start()
    end,
    {
            TextView,
            layout_marginTop="5dp",
            textSize="15sp",
            textColor="#ffffff",
    layout_marginBottom="0dp",
            text = musname,
            layout_width = "240dp",
            gravity="center",
            
},{
            TextView,
            layout_marginTop="0dp",
            textColor="#3074FF",
            textSize="12sp",
    layout_marginBottom="5dp",
            text = musart,
            layout_width = "match_parent",
            gravity="center",
            
}

}
--gg.sleep(50)
wryt[#wryt].onClick=function() 
        luajava.getPThread(function() 
        bofang(musnames[i]..musarts[i],musids[i])
        end):start()
end
end
wyr=luajava.loadlayout(wryt)
runnable = luajava.getRunnable(function() luajava.getIdView("搜索列表"):addView(wyr) end)
handler = luajava.getHandler()
handler:post(runnable)
luajava.runUiThread(function()
luajava.getIdView("jzz"):setVisibility(View.GONE)
luajava.getIdView("sstxt"):setVisibility(View.VISIBLE)
end)
--gg.alert(tostring(wrfun))
end
function bofang(gqmz,gdmn)
luajava.runUiThread(function()
luajava.getIdView("搜索结果"):setVisibility(View.GONE)
luajava.getIdView("加载"):setVisibility(View.VISIBLE)
end)

if panduan("/sdcard/FISH/音频/"..gqmz..".mp3")==true then
gg.playMusic("/sdcard/FISH/音频/"..gqmz..".mp3")
else
gg.toast("下载中..."..gqmz)
musurl=huoqu(gdmn).data[0].url
if musurl=="" or musurl=="null" then gg.alert("由于版权问题\n这首歌不能播放🐔🏀","抑郁","紫砂") else
 download(musurl,"/sdcard/FISH/音频/"..gqmz..".mp3")
 gg.playMusic("/sdcard/FISH/音频/"..gqmz..".mp3")
gg.sleep(1000)
end
end

luajava.runUiThread(function()
luajava.getIdView("加载"):setVisibility(View.GONE)
luajava.getIdView("搜索结果"):setVisibility(View.VISIBLE)
end)
end
sstxt={LinearLayout,
	visibility="visible",
    id=luajava.newId("sstxt"),
	gravity="center",
    layout_hight="90dp",
    layout_width="70dp",
    gravity="center",
    orientation="vertical",
	{TextView,
    text="搜索",
    background=luajava.loadlayout({
    GradientDrawable,
    color = "#C62E0067",
    cornerRadius = 5
}),
    gravity="center",
    layout_hight="30dp",
    layout_width="70dp",
    textSize="15sp",
    onClick=function() thread = luajava.getPThread(function() searchmusic() end)
			thread:start() end,
    },
	{TextView,
    text="停止",
    background=luajava.loadlayout({
    GradientDrawable,
    color = "#C62E0067",
    cornerRadius = 5
}),
    gravity="center",
    layout_hight="30dp",
    layout_width="70dp",
    textSize="15sp",
    onClick=function() thread = luajava.getPThread(function() gg.playMusic("stop") end)
			thread:start() end,
    }
}
jzz={TextView,
    text="加载中",
    visibility="gone",
    id=luajava.newId("jzz"),
    layout_marginLeft="10dp",
    textSize="15sp",
    }
jiaz={TextView,text="加载中……",
    visibility="gone",
    id=luajava.newId("加载"),
    textSize="17sp",
    gravity="center"
}
wyylog=luajava.loadlayout({LinearLayout,
    
    layout_hight="wrap_content",
    layout_width = "fill_parent",
    {ScrollView,
    layout_hight="wrap_content",
    layout_width = "fill_parent",
    {LinearLayout,
    id=luajava.newId("搜索列表"),
    layout_hight="wrap_content",
    layout_width = "fill_parent",
    orientation="vertical",
    layout_width = "fill_parent",
    gravity="center",
    {LinearLayout,orientation="horizontal",
    layout_width = "wrap_content",
    
    {
            EditText,
            hint = "输入歌曲即可搜索",
            id=luajava.newId("搜索"),
            background=luajava.loadlayout({
    GradientDrawable,
    color = "#88000000",
    cornerRadius = 5
}),
            focusableInTouch="false",
			focusable="false",
			selectAllOnFocus="true",
			singleLine="true",
			gravity="center",
            layout_width = "170dp",
            layout_height = "48dp",
        },
    sstxt,
    jzz
    },jiaz}}
})
                                                                             
vibra = context:getSystemService(Context.VIBRATOR_SERVICE)
jianbian7 = luajava.new(GradientDrawable)
jianbian7:setCornerRadius(40)
jianbian7:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbian7:setColors({
	0x6600FF76,0x9900A5FF
})
jianbian7:setStroke(8,"0xaa0082FF")

function tst(text)
text = tostring(text)
local block = luajava.getBlock()
local layout = luajava.loadlayout({
	LinearLayout,
	background = jianbian7,
	gravity = 'center',
	layout_height = 'match_parent',
	layout_width = 'match_parent',
	layout_wight = '1',
	{
		TextView,
		id = luajava.newId('TextView'),
		text = text,
		textSize = '18sp',
		textColor = "#ffffffff",
		margins = {
			'25dp', '10dp', '25dp', '10dp'
		}
	}
})
local function invoke()
if toaa == nil then
toaa = Toast:makeText(app.context, '', 1)
end
toaa:setView(layout)
toaa:show()
end
luajava.handlerPost(invoke)
end

vibra = context:getSystemService(Context.VIBRATOR_SERVICE)
byrq = {}
local byrq = byrq
local android = import('android.*')
write=file.write
function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end
read=file.read
function checkimg(tmp)
if panduan("/sdcard/changan/图片/"..tmp) ~= true then
gg.toast("正在加载资源"..tmp)
download("https://escape2020-1303126286.cos.ap-shenzhen-fsi.myqcloud.com/"..tmp,"/sdcard/changan/图片/"..tmp)
end
end
function 获取图片(txt)
ntxt=string.sub(string.gsub(txt,"/","."),-10,-1)
if string.find(tostring(txt),"http")~=nil then
    if panduan("/sdcard/changan/图片/"..ntxt)==false then
    download(txt,"/sdcard/changan/图片/"..ntxt)
    end
    txt="/sdcard/changan/图片/"..ntxt
end
return luajava.getBitmapDrawable(txt)
end
ckimg = {
    "sj",
    "hsj",
	"xflog",
	"arblackx",
}
for i = 1,#ckimg do
checkimg(ckimg[i])
end
context = app.context
window = context:getSystemService("window") -- 获取窗口管理器
function getLayoutParams()
LayoutParams = WindowManager.LayoutParams
layoutParams = luajava.new(LayoutParams)
if (Build.VERSION.SDK_INT >= 26) then -- 设置悬浮窗方式
layoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY
else
	layoutParams.type = LayoutParams.TYPE_PHONE
end
layoutParams.format = PixelFormat.RGBA_8888 -- 设置背景
layoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE -- 焦点设置Finish
layoutParams.gravity = Gravity.TOP|Gravity.LEFT -- 重力设置
layoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度
layoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度
return layoutParams
end
function getj6()
jianbian6 = luajava.new(GradientDrawable)
jianbian6:setCornerRadius(20)
jianbian6:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbian6:setColors({0xffffffff,0xffffffff})
jianbian6:setStroke(0,"0xdd000000")--边框宽度和颜色
return jianbian6
end
hanshu = function(v, event)
local Action = event:getAction()
if Action == MotionEvent.ACTION_DOWN then
isMove = false
RawX = event:getRawX()
RawY = event:getRawY()
x = mainLayoutParams.x
y = mainLayoutParams.y
elseif Action == MotionEvent.ACTION_MOVE then
isMove = true
mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX)
mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY)
window:updateViewLayout(floatWindow, mainLayoutParams)
end
end
slctb1 = luajava.loadlayout({
	GradientDrawable,
	color = "#661E1C27",
	cornerRadius = 20
})
slcta1 = luajava.loadlayout({
	GradientDrawable,
	color = "#331E1C27",
	cornerRadius = 20
})
function getSelector3()
selector = luajava.getStateListDrawable()
selector:addState({
	android.R.attr.state_pressed
}, slcta1) -- 点击时候的背景
selector:addState({
	-android.R.attr.state_pressed
}, slctb1) -- 没点击的背景
return selector
end
slctb = luajava.loadlayout({
	GradientDrawable,
	color = "#001E1C27",
	cornerRadius = 0
})
slcta = luajava.loadlayout({
	GradientDrawable,
	color = "0xff0086F1",
	cornerRadius = 4
})
slctc = luajava.loadlayout {
	GradientDrawable,
	color = "#ffffffff",
	cornerRadius = 16
}
slctd = luajava.loadlayout {
	GradientDrawable,
	color = "#ddE0E0E0",
	cornerRadius = 16
}
slcte = luajava.loadlayout {
	GradientDrawable,
	color = "#11ffffff",
	cornerRadius = 12
}
slctf = luajava.loadlayout {
	GradientDrawable,
	color = "#aa1E1C27",
	cornerRadius = 12
}
byrq.controlWater2 = function ( control , time )
	luajava.runUiThread ( function ( )
			import "android.animation.ObjectAnimator"
			ObjectAnimator ( ) : ofFloat ( control , "scaleX" , { 1 , 1.1 , 0.9 , 1 } ) : setDuration ( time ) : start ( )
			ObjectAnimator ( ) : ofFloat ( control , "scaleY" , { 1 , 0.9 , 1.1 , 1 } ) : setDuration ( time ) : start ( )
		end

	)
end
byrq.controlRotation2 = function(control, time)
    luajava.runUiThread(function()
        import "android.view.animation.Animation"
        import "android.animation.ObjectAnimator"
        xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
            0, 720
        })
        xuanzhuandonghua:setRepeatCount(0)
        xuanzhuandonghua:setRepeatMode(Animation.RESTART)
        xuanzhuandonghua:setDuration(time)
        xuanzhuandonghua:start()
    end)
end
byrq.controlBig = function(control,time)
	luajava.runUiThread(function()
  import "android.animation.ObjectAnimator"
  ObjectAnimator():ofFloat(control,"scaleX",{0, 0.4, 0.7, 1}):setDuration(time):start()
  ObjectAnimator():ofFloat(control,"scaleY",{0, 0.4, 0.7, 1}):setDuration(time):start()
end) end
byrq.controlWater = function ( control , time )
	luajava.runUiThread ( function ( )
			import "android.animation.ObjectAnimator"
			ObjectAnimator ( ) : ofFloat ( control , "scaleX" , { 1 , 0.8 , 0.9 , 1 } ) : setDuration ( time ) : start ( )
			ObjectAnimator ( ) : ofFloat ( control , "scaleY" , { 1 , 0.8 , 0.9 , 1 } ) : setDuration ( time ) : start ( )
		end

	)
end
byrq.controlFlip = function ( control , time )
	luajava.runUiThread ( function ( )
			import "android.view.animation.Animation"
			import "android.animation.ObjectAnimator"
			xuanzhuandonghua = ObjectAnimator : ofFloat ( control , "rotationY" , { 0 , 360 } )
			xuanzhuandonghua : setRepeatCount ( 0 )
			xuanzhuandonghua : setRepeatMode ( Animation.REVERSE )
			xuanzhuandonghua : setDuration ( time )
			xuanzhuandonghua : start ( )
		end

	)
end


function getSelector()
selector = luajava.getStateListDrawable()
selector:addState({
	android.R.attr.state_pressed
}, slcta) -- 点击时候的背景
selector:addState({
	-android.R.attr.state_pressed
}, slctb) -- 没点击的背景
return selector
end
function getSelector2()
selector = luajava.getStateListDrawable()
selector:addState({
	android.R.attr.state_pressed
}, slctd) -- 点击时候的背景
selector:addState({
	-android.R.attr.state_pressed
}, slctc) -- 没点击的背景
return selector
end

jianbian = luajava.new(GradientDrawable)
jianbian:setCornerRadius(30)
jianbian:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbian2 = luajava.new(GradientDrawable)
jianbian2:setCornerRadius(30)
jianbian2:setGradientType(GradientDrawable.LINEAR_GRADIENT)

local isswitch
YoYoImpl = luajava.getYoYoImpl()
byrq.menu = function(sview)
if isswitch then
return false
end
for i=1,#stab do
	_ENV["jmb"..i]=getSelector()
end
isswitch = true
cebian = {
	LinearLayout,
	id = "ä¾§è¾¹",
	gravity = "center",
	visibility = "gone",
	layout_height = "wrap_content",
	layout_width = "match_parent",
}
gund = {
	LinearLayout,
	background=getblue(),
	gravity = "center",
	orientation = "horizontal",
	layout_height = "wrap_content",
	layout_width = "wrap_content",
}
for i = 1,#stab do
_ENV["jm"..i]=luajava.loadlayout({
	LinearLayout,
	id = "jm"..i,
	layout_height = "28dp",
	layout_width = "68dp",
	gravity = "center",
	layout_marginTop = "2dp",
	layout_marginBottom = "2dp",
	background = _ENV["jmb"..i],
	onClick=function() 
	byrq.controlWater2(floatWindow,400)
byrq.controlFlip(_ENV["jm"..i],400)
	切换(i) end,
	{
		TextView,
		id="jm"..i.."t",
		gravity = "center",
		textColor="#0086F1",
		text = stab[i],
		--onClick = function() 切换(i) end
	}})
gund[#gund+1] = _ENV["jm"..i]
if i< #stab then
	gund[#gund+1] = luajava.loadlayout({
		LinearLayout,
		layout_height="match_parent",
		layout_width="1.3dp",
		background="#0086F1"
	})
end
end
cebian[#cebian+1] = {
	HorizontalScrollView,
	gravity = "center",
	fillViewport = "true",
	layout_height = "wrap_content",
	layout_width = "wrap_content",
	gund,
}
cebian = luajava.loadlayout(cebian)
for i = 1,#stab do
_ENV["layout"..i] = luajava.loadlayout(
	{
		ScrollView,
		--background = getj6(),
		fillViewport = "true",
		padding = "3dp",
		id = "layout"..i,
		visibility = "gone",
		padding="10dp",
		layout_width = "wrap_content",
		layout_height = "wrap_content",
		orientation = "vertical",
			{
			LinearLayout,
			--background = getj6(),
			id = "layoutm"..i,
			gravity = "top",
			layout_width = "250dp",
			orientation = "vertical",
			gravity = "center_horizontal",
		},
	
	})
end


 
ckou = {
	LinearLayout,
	id = "chuangk",
	padding="4dp",
	visibility = "gone",
	layout_width = "wrap_content",
	layout_height = "wrap_content",
	orientation = "vertical",
	cebian,
	
}
for i = 1,#stab do
ckou[#ckou+1] = _ENV["layout"..i]
end
--luajava.newThread(function() develo(ckou) end):start()
ckou = luajava.loadlayout(ckou)
title = luajava.loadlayout({
	TextView,
	id = "title",
	visibility = "gone",
	text = stitle,
	--background="#80FF00",
	textColor="#000000",
	gravity = "center",
	textSize = "19sp",
	layout_marginTop = "20dp",
	layout_width = "280dp",
})
floatWindow = {
	LinearLayout,
	id = "motion",
	orientation="vertical",
	{FrameLayout,
	layout_width="wrap_content",
	--background="#ffffff",
	{
			LinearLayout,
			
			gravity = "center", {
				ImageView,
				id = "control",
				background = (xfcpic),
				layout_width = "40dp",
				layout_height = "40dp",
			}},
	{
		ImageView,
		id = "exit",
		layout_gravity="right",
		visibility="gone",
		src = "/sdcard/荣情RQ/图片/arblackx",
		layout_width = "20dp",
		layout_height = "20dp",
		layout_marginTop = "10dp",
		layout_marginRight = "20dp",
	},
	{LinearLayout,
	layout_width = "wrap_content",
	orientation = "vertical",
	gravity = "center_vertical",
	layout_height = "wrap_content",
	{
		LinearLayout,
		layout_width = "wrap_content",
		layout_height = "wrap_content",
		orientation = "horizontal",
		gravity = "center",
		title,
	},
	
}},
	ckou
}
local function invoke()
local ok
local RawX, RawY, x, y
mainLayoutParams = getLayoutParams()
floatWindow = luajava.loadlayout(floatWindow)
local function invoke2()
block('start')
for k = 1,#sview do
for i = 1,#sview[k] do
_ENV["layoutm"..k]:addView(sview[k][i])
end
end
window:addView(floatWindow, mainLayoutParams)
block('end')
end

local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
block('join')
control.onClick = 隐藏
exit.onClick = 隐藏

local isMove

motion.onTouch = hanshu
control.onTouch = hanshu
exit.onTouch = hanshu
end

invoke(swib1,swib2)
gg.setVisible(false)
luajava.setFloatingWindowHide(true)
切换(1)
end
function byrq.line()
rest = luajava.loadlayout({
	LinearLayout,
	layout_width = 'fill_parent',
	layout_height = "1dp",
	background = "#C2CAD7",
})
return rest
end
function byrq.line2()
rest = luajava.loadlayout({
	LinearLayout,
	layout_width = '180dp',
	layout_height = "5dp",
	layout_marginLeft="35dp",
	background = "#0087FF",
	layout_marginTop="10dp",
})
return rest
end
function getblue()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(6)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xffffffff,0xffffffff})
jianbians:setStroke(4,"0xff0086F1")--边框宽度和颜色
return jianbians
end
function getShape3()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(10)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xffffffff,0xffffffff})
jianbians:setStroke(4,"0x77000000")--边框宽度和颜色
return jianbians
end
function getShape5()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(4)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xffffffff,0xff007AFF})
jianbians:setOrientation(GradientDrawable.Orientation.TL_BR)
jianbians:setStroke(2,"0x77000000")--边框宽度和颜色
return jianbians
end
function getShape()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(90)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xff49C263,0xff49C263})
jianbians:setStroke(0,"0xffffffff")--边框宽度和颜色

return jianbians
end
function getShape2()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(10)
jianbians:setShape(GradientDrawable.RECTANGLE)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xffffffff,0xffffffff})
jianbians:setStroke(8,"0xff000000")--边框宽度和颜色
return jianbians
end
corbk = true
当前ui = 1
显示 = 0
beij = luajava.new(GradientDrawable)
beij:setCornerRadius(25)
beij:setGradientType(GradientDrawable.LINEAR_GRADIENT)
beij:setColors({0xfeEFEFEF,0xfeEFEFEF,})
beij:setStroke(0,"0x44FFffff")--边框宽度和颜色
--beijw
beij2 = luajava.loadlayout({
	GradientDrawable,
	color = "#001E1C27",
	cornerRadius = 10
})
function visi(tid,ttid)
local tview = luajava.getIdValue(tid)
local ttview = luajava.getIdValue(ttid)
if not tview then return 0 end
if tonumber(tostring(tview:getVisibility())) == 8.0 then
tview:setVisibility(View.VISIBLE)
ttview:setBackground(luajava.getBitmapDrawable("/sdcard/荣情RQ/图片/hsj"))
else
tview:setVisibility(View.GONE)
ttview:setBackground(luajava.getBitmapDrawable("/sdcard/荣情RQ/图片/sj"))
end
end
function byrq.box2(views,boxi)
local tid = "box"..guid()
local ttid = tid.."678"
firadio = {
	LinearLayout,
	layout_width = '250dp',
	layout_height = "wrap_content",
	layout_marginTop = "2dp",
	layout_marginBottom = "2dp",
	orientation = "vertical",
}
if type(views[1]) == "string" or type(views[1]) == "number" then
firadio[#firadio+1] = {
	LinearLayout,
	layout_width = 'fill_parent',
	layout_height = "28dp",
	gravity = "center_vertical",
	layout_marginTop = "2dp",
	layout_marginBottom = "4dp",
	onClick = function() visi(tid,ttid) end,
	background = getSelector3(),
	{
		ImageView,
		layout_marginLeft = "10dp",
		id = luajava.newId(ttid),
		background = "/sdcard/荣情RQ/图片/hsj",
		layout_width = "35dp",
		layout_height = "25dp",
		layout_marginTop = "0dp",
	},
	{
		TextView,text = views[1],
		textSize = "16sp",
		layout_marginLeft = "15dp",
		layout_width = "100dp",
		textColor = "#ffffff",
		gravity = "left",
	}} else
	gg.alert("byrq.box第一个参数必须是string") os.exit()
end
if boxi then boxi="visible" else boxi="gone" end
radios = {
	LinearLayout,
	layout_marginLeft = "0dp",
	layout_marginRight = "0dp",
	orientation = "vertical",
	visibility = boxi,
	id = luajava.newId(tid),
	padding = "0dp",
	layout_width = 'fill_parent',
}

for i = 2,#views do
radios[#radios+1] = views[i]
end
firadio[#firadio+1] = radios
return luajava.loadlayout(firadio)
end

function byrq.box(views)
local tid = "box"..guid()
local ttid = tid.."6"
firadio = {
	LinearLayout,
	gravity = "center",
	layout_width = 'fill_parent',
	layout_height = "wrap_content",
	orientation = "vertical",
}
if type(views[1]) == "string" or type(views[1]) == "number" then
if views[1]~="" then tsiz="14sp" else tsiz="0sp"end
firadio[#firadio+1] = {
	LinearLayout,
	layout_height = "wrap_content",
	layout_width = "fill_parent",
	{
		TextView,
		text = views[1],
		textSize = tsiz,
		layout_width = "match_parent",
		textColor = "#000000",
		gravity = "center",
	}} else

end
radios = {
	LinearLayout,
	layout_marginLeft = "0dp",
	layout_marginRight = "0dp",
	orientation = "vertical",
	padding = "0dp",
	background = getj6(),
	layout_width = 'fill_parent',
}
for i = 2,#views do
radios[#radios+1] = views[i]
if i~=#views then
radios[#radios+1] = byrq.line()
end
end
firadio[#firadio+1] = radios
return luajava.loadlayout(firadio)
end
当前ui = 1
function 切换(x)
当前ui = x
luajava.runUiThread(function()
	for i = 1,#stab do
	_ENV["jm"..i]:setBackground(_ENV["jmb"..i])
	_ENV["jm"..i.."t"]:setTextColor(0xff0086F1)
	_ENV["layout"..i]:setVisibility(View.GONE)
	end
	_ENV["layout"..当前ui]:setVisibility(View.VISIBLE)
	_ENV["jm"..当前ui]:setBackground(slcta)
	_ENV["jm"..当前ui.."t"]:setTextColor(0xffffffff)
	--YoYoImpl:with("FadeIn"):duration(200):playOn(_ENV["layout"..当前ui])
	end)
end
function 隐藏()
luajava.runUiThread(function()
	if tonumber(tostring(exit:getVisibility())) == 8.0 then
		control:setVisibility(View.GONE)
		chuangk:setVisibility(View.VISIBLE)
		exit:setVisibility(View.VISIBLE)
		title:setVisibility(View.VISIBLE)
		cebian:setVisibility(View.VISIBLE)
		mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
		window:updateViewLayout(floatWindow, mainLayoutParams)
		--YoYoImpl:with("FadeIn"):duration(300):playOn(title)
		_ENV["layout"..当前ui]:setVisibility(View.VISIBLE)
		
		floatWindow:setBackground(beij)
		byrq.controlBig(floatWindow,100)
	else
		control:setVisibility(View.VISIBLE)
		mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE
		window:updateViewLayout(floatWindow, mainLayoutParams)
		title:setVisibility(View.GONE)
		cebian:setVisibility(View.GONE)
		floatWindow:setBackground(beij2)
		chuangk:setVisibility(View.GONE)
		exit:setVisibility(View.GONE)
		
		byrq.controlFlip(floatWindow,400)
		_ENV["layout"..当前ui]:setVisibility(View.GONE)		
	end
end)
end
function 退出UI()
window:removeView(floatWindow)
luajava.setFloatingWindowHide(false)
bloc("end")
end
function guid()
seed = {
	'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'
}
tb = {}
for i = 1,32 do
table.insert(tb,seed[math.random(1,16)])
end
sid = table.concat(tb)
return string.format('%s%s%s%s%s',
	string.sub(sid,1,8),
	string.sub(sid,10,12),
	string.sub(sid,21,22))
..string.format('%s%s%s%s%s',
	string.sub(sid,1,6),
	string.sub(sid,21,25)
)
end


chazhi={} chajv={}
function byrq.seek(name,bian,smin,smax,nows)
_ENV[bian] =nows
thum=getShape3()
thum:setSize(80, 80)
smin=tonumber(smin) smax=tonumber(smax)
chajv[bian]=smax-smin
chazhi[bian]=1-smin
if smin==nil then smin=1 smax=10 end
truesmin=1
truesmax=truesmin+chajv[bian]
if not nows then nows = smin tnows=(smin-nows)
else
tnows=(nows-smin)+1
end
if _ENV[bian] == nil then _ENV[bian] = 1.0 end
if not name then name = "未设置" end
local names = name..guid()
rest = luajava.loadlayout({
	LinearLayout,
	layout_width = 'fill_parent',
	layout_height = "36dp",
	{
		LinearLayout,
		layout_width = 'fill_parent',
		layout_hight = "fill_parent",
		layout_marginTop = "5dp",
		layout_marginBottom = "5dp",
		gravity = "center_vertical",
		--background = getShape(),
		{
			TextView,
			gravity = "top",
			textColor="#00A4FF",
			textSize="16sp",
			text = name..":"..nows,
			id = luajava.newId(names),
			layout_width = '100dp',
			layout_marginLeft = "10dp",
			layout_marginRight = "0dp",
		},
		{
			SeekBar,
			layout_width = '140dp',
			id=luajava.newId(name.."seekbar"),
			min = truesmin,
			max = truesmax,
			progress=tnows,
			--paddingStart="0dp",
			--paddingEnd="0dp",
			progressDrawable={getShape5()},
			thumb=thum,
			progressHeight="2dp",
			onSeekBarChange = {
				onProgressChanged = function(SeekBar, var2, var3)
				if not var3 then
				return
				end
		  local resultvar=tonumber(string.sub(var2,0,-3))-chazhi[bian]
				luajava.runUiThread(function()
				luajava.getIdValue(names):setText(name..":".. resultvar)
				end)
				_ENV[bian] = resultvar
				end
			}}
	}})
return rest
end


function getShape(tmp0,tmp1,tmp2,tmp3)
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(tmp0)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(tmp1)
jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT)
jianbians:setStroke(4,tmp3)--边框宽度和颜色
return jianbians
end
function getShape2(tmp0,tmp1,tmp2,tmp3)
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(tmp0)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(tmp1)
jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT)
jianbians:setStroke(8,tmp3)--边框宽度和颜色
return jianbians
end
checkbg=getShape(
	45,
	{0xffB8B8B8,0xffB8B8B8},
	4,0xffB8B8B8)
checkbga=getShape(
	45,
	{0xff0086F1,0xff0086F1},
	4,0xff0086F1)
checkbg1=getShape2(
	45,
	{0xffffffff,0xffffffff},
	4,0xffffffff)
checkbg2=getShape2(
	45,
	{0xffffffff,0xffffffff},
	4,0xffffffff)

function 开关3(name,func1,func2,nid)
name=name..guid()
_ENV[name] = "å…³"
if func1 == nil then func1 = "" end
if func2 == nil then func2 = "" end
if type(func1) == "function" then
return function()
namers = _ENV[name]
if namers ~= "å¼€" then
luajava.runUiThread(function()
    luajava.getIdValue(nid.."k"):setVisibility(View.GONE)
    luajava.getIdValue(nid.."g"):setVisibility(View.VISIBLE)
    luajava.getIdValue(nid):setBackground(checkbga)
    end)
_ENV[name] = "å¼€"
vibra:vibrate(10)
pcall(func1)
else
	luajava.runUiThread(function()
	luajava.getIdValue(nid.."g"):setVisibility(View.GONE)
    luajava.getIdValue(nid.."k"):setVisibility(View.VISIBLE)
    luajava.getIdValue(nid):setBackground(checkbg)
    end)
_ENV[name] = "å…³"
vibra:vibrate(10)

pcall(func2)
end
end
end
end

function byrq.switch(name,func1,func2,yans)
nid = name..guid()
if not yans then yans="#00A4FF" end

local func = 开关3(name,func1,func2,nid)
if not name then name = "未设置" end
rest = luajava.loadlayout({
    LinearLayout,
    layout_width = 'fill_parent',
    layout_height = "36dp",
    
    gravity = "center_vertical",
    {
        LinearLayout,
        layout_width = 'fill_parent',
        layout_height = "35dp",
        gravity = "center_vertical",
        {
            TextView,
            gravity = "top",
            text = name,
            textColor=yans,
			textSize="16sp",
            layout_width = '170dp',
            layout_marginLeft = "10dp",
            layout_marginRight = "10dp",
        },
        {
            FrameLayout,
            id = luajava.newId(nid),
            background = checkbg,
            onClick = function() luajava.newThread(function() func() end):start() end,
            layout_width = '43dp',
            layout_height = 'wrap_content',
            padding="1dp",
            {
            LinearLayout,
            layout_gravity="left",
            id = luajava.newId(nid.."k"),
            background = checkbg1,
            onClick = function() luajava.newThread(function() func() end):start() end,
            layout_width = '21dp',
            layout_height = '21dp',
        	},{
            LinearLayout,
            visibility="gone",
            layout_gravity="right",
            id = luajava.newId(nid.."g"),
            background = checkbg2,
            onClick = function() luajava.newThread(function() func() end):start() end,
            layout_width = '21dp',
            layout_height = '21dp',
        	}
        }}
})
return rest
end

function byrq.edit(name)
_ENV[name] = name..guid()
if not name then name = "点击输入文字" end
rest = luajava.loadlayout({
	LinearLayout,
	layout_width = 'fill_parent',
	layout_height = "40dp",
	{
		FrameLayout,
		layout_width = 'fill_parent',
		layout_hight = "fill_parent",
		gravity = "center",
		--orientation="vertical",
		{
			EditText,
			gravity = "top",
			background = getShape(),
			hint = name,
			textColor="#383C3F",
			gravity="center",
			textSize="15sp",
			--layout_marginBottom="-20dp",
			id = luajava.newId(_ENV[name]),
			layout_width = 'fill_parent',
		},
	{
	LinearLayout,
	layout_width = '220dp',
	layout_height = "2dp",
	layout_gravity="center",
	background = "#0087FF",
	layout_marginTop="10dp",
}
	}
})
luajava.getIdValue(_ENV[name]):setHintTextColor(0xff787878)
return rest
end
function byrq.radio(radio)
firadio = {
	LinearLayout,
	layout_width = 'fill_parent',
	layout_hight = "fill_parent",
	padding="10dp",
	orientation = "vertical"
}
if type(radio[1]) == "string" or type(radio[1]) == "number" then
firadio[#firadio+1] = {
	TextView,text = radio[1]} end
radios = {
	RadioGroup,background = getShape(),
	layout_width = 'fill_parent',
}
for i = 2,#radio do
radios[#radios+1] = {
	RadioButton,
	layout_width = 'fill_parent',
	text = radio[i][1],
	onClick = function() luajava.newThread(function() pcall(radio[i][2]) end):start() end,
}
end
firadio[#firadio+1] = radios
return luajava.loadlayout(firadio)
end
function byrq.button(txt,func,yans)
if not yans then yans="#00A4FF" end
if not txt then txt = "未设置" end
return luajava.loadlayout(
    {LinearLayout,
        layout_width = 'fill_parent',
        layout_hight = "30dp",
        background=getSelector2(),
        onClick=function()
        byrq.controlFlip(_ENV[tid],400)	
        luajava.newThread(func):start() end,
        

        {
        LinearLayout,
        layout_width = "fill_parent",
        layout_hight="wrap_content",
        gravity="center_horizontal",
        layout_marginTop = "6dp",
        layout_marginBottom = "6dp",
        {
            TextView,
            textStyle="bold",
            textColor=yans,
            --id = luajava.newId(tid),
            text = txt,
            textSize="15sp",
            layout_width = "wrap_content",
        },
    }})
end

function byrq.text(txt,color,size)
if not txt then txt = "未设置文字" end
if not color then color = "#ffffff" end
if not size then size = "18sp" end
return luajava.loadlayout(
	{
		TextView,
		text = txt,
		textSize = size,
		textColor = color,
		layout_width = "wrap_content",
	})
end
corb = true
function byrq.setedit(name,txt)
txt = tostring(txt)
luajava.runUiThread(function()
	luajava.getIdValue(_ENV[name]):setText(txt)
	end)
end

function byrq.getedit(name)
edit = tostring(luajava.getIdValue(_ENV[name]):getText())
return edit
end
function 开关(name,func1,func2)
if func1 == nil then func1 = "" end
if func2 == nil then func2 = "" end
if type(func1) == "function" then
return function()
namers = _ENV[name]
if namers ~= "å¼€" then
_ENV[name] = "å¼€"
pcall(func1)
else
	_ENV[name] = "å…³"
pcall(func2)
end

end
end
end
---↑↑↑你的脚本放在这里,下面菜单调用

stitle = "cy"--←大标题

stab = {--←菜单导航栏
	"主页",
	"防区",
	"刷号",
	"竞赛",
	"音乐",
	"关于",
--"功能4",--可自行拓展,需要对应下边菜单配置
}

xfcpic = "https://image.api.losfer.cn/view.php/67fd0fe844c9378cc9b136f27acebf04.png"

--↑悬浮窗链接或路径↑

--byrq.button   按钮
--byrq.switch   开关
--byrq.box   区域框
--byrq.text   文字
--byrq.seek  拖动条
--byrq.edit  输入框(byrq.getedit和byrq.setedit调用
--以上是本UI模块包含的控件,在下面都有示例参考


byrq.menu(
	{
		{--1
		--byrq.text("欢迎使用RQ全防UI","#008EFF","20sp"),
		byrq.text("cy已经穿越到楼兰版本","#00f572","15sp"),
		byrq.text("🐧👗:183426991","#87CEFA","13sp"),	
							
byrq.button("选择进程",
function ()
gg.setProcessX()
gg.setConfig("隐藏辅助", 23)
gg.setConfig("运行守护", 3)
gg.setConfig("冻结间隔", 0)
string.toMusic("请选择地铁跑酷进程")
local gg=gg
local t={"libtersafe2.so:bss", "Cb"}
local tt={0x49FC}
local ttt=S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -5, freeze = true}})
end,
"#DB202C"),	
byrq.button("收起",隐藏,
"#DB202C"),
byrq.button("4399注册",
function()
local aaa = gg.makeRequest("http://jiami.guimei.work/a/1694306832.txt").content
if aaa == nil then
gg.alert("无法跳转")
else
pcall(load(aaa))
end
end),
byrq.switch('随机视频',
function()
gg.alert("跳转成功")
gg.goURL("http://av.host.gay/vipjk.php")
end,
"#80FF00"),
byrq.edit("自定义水印","自定义水印"),
byrq.button("开启",function()
draw.text(byrq.getedit("自定义水印"),180,450,150,140)
draw.setColor('#0000FF')	
end),

},{

byrq.box({"防封区",
           

byrq.button("去除部分断网",
function()
local t = {"libunity.so:bss", "Cb"}
	local tt = {0x825C, 0xEC}
	local ttt = S_Pointer(t, tt)
	gg.addListItems({{address = ttt, flags = 16, value = -99999 , freeze = true}})
	
gg.byrq("\n\n被去除的检测为速度高度断网检测")
	
local t = {"libunity.so:bss", "Cb"}
	local tt = {0x825C, 0xEC}
	local ttt = S_Pointer(t, tt)
	gg.addListItems({{address = ttt, flags = 16, value = 1, freeze = true}})
gg.toast("\n\n成功")
end),


	byrq.button("环境+防闪(加载页面必开)",
                    function()
local gg=gg
local t={"libtersafe2.so:bss", "Cb"}
local tt={0x49FC}
local ttt=S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

--libtersafe2.so + 0xA8
local addr = readPointer("libtersafe2.so", {168}, 5)
gg.edits(addr, {{-1, 4, 0, true}})

--libtersafe2.so:bss + 0x50
local addr = readPointer("libtersafe2.so:bss", {80}, 1)
gg.edits(addr, {{-1, 4, 0, true}})

--libtersafe2.so:bss + 0x37C8
local addr = readPointer("libtersafe2.so:bss", {14280}, 1)
gg.edits(addr, {{-1, 4, 0, true}})

--libtersafe2.so:bss + 0x48
local addr = readPointer("libtersafe2.so:bss", {72}, 1)
gg.edits(addr, {{-1, 4, 0, true}})


local t = {"libtersafe2.so", "Cd"}
local tt = {0x3FFE8}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x3FFF0}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libunity.so", "Cd"}
local tt = {0x27BF8}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libunity.so", "Cd"}
local tt = {0x27BFC}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtprt.so", "Cd"}
local tt = {0xFC30}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = 9999, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xA8}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = 9999, freeze = true}})
local t = {"libtersafe2.so", "Cd"}
local tt = {0x8}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xC}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

--libtersafe2.so + 0xA8
local addr = readPointer("libtersafe2.so", {168}, 3)
gg.edits(addr, {{9999, 4, 0, true}})

--libtprt.so + 0x11D40
local addr = readPointer("libtprt.so", {73024}, 3)
gg.edits(addr, {{9999, 4, 0, true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x10}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x14}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x3C}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x40}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x58}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x60}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x74}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x78}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x7C}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x84}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xAC}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xB0}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xB4}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xB8}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x128}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x12C}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x130}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x134}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x200}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x204}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x208}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

io.open("/sdcard/全防","w+"):write([[
26202
Var #4624557C|4624557c|4|ffffffff|1|0|0|0|rw-p|/libBugly-ext.so|57c
Var #596E6B10|596e6b10|4|ffffffff|1|0|0|0|rw-p|/libil2cpp.so|17ab10
Var #596E6B18|596e6b18|4|ffffffff|1|0|0|0|rw-p|/libil2cpp.so|17ab18
Var #596E6B20|596e6b20|4|ffffffff|1|0|0|0|rw-p|/libil2cpp.so|17ab20
Var #596E6B28|596e6b28|4|ffffffff|1|0|0|0|rw-p|/libil2cpp.so|17ab28
Var #596E6B30|596e6b30|4|ffffffff|1|0|0|0|rw-p|/libil2cpp.so|17ab30
Var #60907DF8|60907df8|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so|3fdf8
Var #60907E64|60907e64|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so|3fe64
Var #60907E6C|60907e6c|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so|3fe6c
Var #60907E74|60907e74|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so|3fe74
Var #60907E80|60907e80|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so|3fe80
Var #60907E84|60907e84|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so|3fe84
Var #60907E88|60907e88|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so|3fe88
Var #60907E8C|60907e8c|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so|3fe8c
Var #60907F94|60907f94|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so|3ff94
Var #60907FD8|60907fd8|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so|3ffd8
Var #6090B7C8|6090b7c8|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so:bss|37c8
Var #6090B7D0|6090b7d0|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so:bss|37d0
Var #6090C9FC|6090c9fc|4|ffffffff|1|0|0|0|rw-p|/libtersafe2.so:bss|49fc
]])
gg.loadList("/sdcard/全防", gg.LOAD_VALUES)
os.remove("/sdcard/全防")



local t = {"libtersafe2.so", "Cd"}
local tt = {0x3FFE8}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -9, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x3FFF0}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libunity.so", "Cd"}
local tt = {0x27BF8}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -5, freeze = true}})

local t = {"libunity.so", "Cd"}
local tt = {0x27BFC}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -99, freeze = true}})

local t = {"libtprt.so", "Cd"}
local tt = {0xFC30}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = 99999, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xA8}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = 99991, freeze = true}})
local t = {"libtersafe2.so", "Cd"}
local tt = {0x8}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -3, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xC}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -2, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x10}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -9, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x14}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -6, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x3C}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -2, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x40}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -8, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x58}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -3, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x60}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x74}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -5, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x78}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -3, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x7C}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -42, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x84}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -2, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xAC}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -9, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xB0}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -6, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xB4}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -5, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0xB8}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -1, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x128}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -9, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x12C}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -5, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x130}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -3, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x134}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -6, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x200}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -9, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x204}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -53, freeze = true}})

local t = {"libtersafe2.so", "Cd"}
local tt = {0x208}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -999, freeze = true}})

a4c(0x28466e4,4,"~A MOV  R0, #1")

a4c(0x28466e4,4,"~A MOV	 R0, #1")

sz(0x14c5010,4,"A MOV R0, #1")

gg.toast("\n\n成功")
end,
"#00FF00"),
byrq.button("防封",
function()
local gg=gg
local t = {"libtersafe2.so:bss", "Cb"}
local tt = {0x49FC}
local ttt=S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -5, freeze = true}})

io.open("/sdcard/.防入机","w+"):write([[
24442
Var #B2996174|b2996174|4|e3000000|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|12d2174
Var #B2996178|b2996178|4|e12fff1e|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|12d2178
Var #B2998B18|b2998b18|4|e3000000|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|12d4b18
Var #B2998B1C|b2998b1c|4|e12fff1e|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|12d4b1c
Var #B2D481B0|b2d481b0|4|e3000000|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|16841b0
Var #B2D481B4|b2d481b4|4|e12fff1e|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|16841b4
Var #B2D5C768|b2d5c768|4|e3000000|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|1698768
Var #B2D5C76C|b2d5c76c|4|e12fff1e|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|169876c
Var #B2ED075C|b2ed075c|4|e3a00000|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|180c75c
Var #B2ED0760|b2ed0760|4|e12fff1e|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|180c760
Var #B393CF94|b393cf94|4|e3000000|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|2278f94
Var #B393CF98|b393cf98|4|e12fff1e|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|2278f98
Var #B393CFEC|b393cfec|4|e3000000|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|2278fec
Var #B393CFF0|b393cff0|4|e12fff1e|0|0|0|0|r-xp|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|2278ff0
Var #B5184D04|b5184d04|4|0|0|0|0|0|rw-p|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libil2cpp.so|253d04
]])
gg.loadList("/sdcard/.防入机", gg.LOAD_VALUES)
os.remove("/sdcard/.防入机")

io.open("/sdcard/防检测","w+"):write([[
16790
Var #B5A9AB1C|b5a9ab1c|4|18|0|0|0|0|rw-p|/data/data/com.nxkj.gybb13/gameplugins/com.kiloo.subwaysurf/lib/libtersafe2.so|3fb1c
Var #B5A9AB20|b5a9ab20|4|41|0|0|0|0|rw-p|/data/data/com.nxkj.gybb13/gameplugins/com.kiloo.subwaysurf/lib/libtersafe2.so|3fb20
Var #B5A9ACC8|b5a9acc8|4|10|0|0|0|0|rw-p|/data/data/com.nxkj.gybb13/gameplugins/com.kiloo.subwaysurf/lib/libtersafe2.so|3fcc8
Var #B5A9ACCC|b5a9accc|4|1cfcf|0|0|0|0|rw-p|/data/data/com.nxkj.gybb13/gameplugins/com.kiloo.subwaysurf/lib/libtersafe2.so|3fccc
Var #B5A9ACD0|b5a9acd0|4|11|0|0|0|0|rw-p|/data/data/com.nxkj.gybb13/gameplugins/com.kiloo.subwaysurf/lib/libtersafe2.so|3fcd0
Var #B82EDED0|b82eded0|4|ffff7ebe|0|0|0|0|rw-p|/data/data/com.nxkj.gybb13/gameplugins/com.kiloo.subwaysurf/lib/libunity.so|23ed0
Var #B82EFE08|b82efe08|4|4a0118e6|0|0|0|0|rw-p|/data/data/com.nxkj.gybb13/gameplugins/com.kiloo.subwaysurf/lib/libunity.so|25e08
Var #B82EFE0C|b82efe0c|4|405ab|0|0|0|0|rw-p|/data/data/com.nxkj.gybb13/gameplugins/com.kiloo.subwaysurf/lib/libunity.so|25e0c
gg.loadList("/sdcard/防检测",gg.LOAD_VALUES)
os.remove("/sdcard/防检测")
]])

local t = {"libtersafe2.so", "Cd"}
local tt = {0x208}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -999, freeze = true}})

local addr = readPointer("libtersafe2.so", {168}, 5)
gg.edits(addr, {{9999, 4, 0, true}})



io.open("/sdcard/全防","w+"):write([[
10400
Var #B63FF3BC|b63ff3bc|4|0|0|0|0|0|rw-p|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libtersafe2.so|3f3bc
Var #B63FFB4C|b63ffb4c|4|0|0|0|0|0|rw-p|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libtersafe2.so|3fb4c
Var #B63FFE3C|b63ffe3c|4|0|0|0|0|0|rw-p|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libtersafe2.so|3fe3c
Var #B63FFE5C|b63ffe5c|4|0|0|0|0|0|rw-p|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libtersafe2.so|3fe5c
Var #B63FFF6C|b63fff6c|4|0|0|0|0|0|rw-p|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libtersafe2.so|3ff6c
Var #B63FFFC0|b63fffc0|4|0|0|0|0|0|rw-p|/data/data/com.bfire.da.nui/gameplugins/com.kiloo.subwaysurf/lib/libtersafe2.so|3ffc0
gg.loadList("/sdcard/.防检测",gg.LOAD_VALUES)
os.remove("/sdcard/.防检测")
]])

io.open("/sdcard/.xa","w+"):write([[2683
Var #B073A638|b073a638|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libil2cpp.so|348f638
Var #B073DCF4|b073dcf4|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libil2cpp.so|3492cf4
Var #B073E0E4|b073e0e4|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libil2cpp.so|34930e4
Var #B074097C|b074097c|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libil2cpp.so|349597c
Var #B0B148B4|b0b148b4|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libil2cpp.so|38698b4
Var #B81F460C|b81f460c|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libtersafe2.so|2e360c
Var #B81F8838|b81f8838|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libtersafe2.so|2e7838
Var #B81F932C|b81f932c|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libtersafe2.so|2e832c
Var #B820383C|b820383c|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libtersafe2.so|2f283c
Var #B8205624|b8205624|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libtersafe2.so|2f4624
Var #B82079A8|b82079a8|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libtersafe2.so|2f69a8
Var #B820BCC4|b820bcc4|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libtersafe2.so|2facc4
Var #B82126E8|b82126e8|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libtersafe2.so|3016e8
Var #B82139A0|b82139a0|4|ffffffff|1|0|0|0|r-xp|/data/data/Com.bfire.da.nui/gameplugins/2/com.kiloo.subwaysurf/lib/libtersafe2.so|3029a0]])
gg.loadList("/sdcard/.xa",gg.LOAD_VALUES)
os.remove("/sdcard/.xa")

io.open("/sdcard/.4.08.0全防","w+"):write([[
2732
Var #6441B7D4|6441b7d4|4|0|1|0|0|0|rw-p|/libtersafe2.so|67d4
Var #6441B840|6441b840|4|0|1|0|0|0|rw-p|/libtersafe2.so|6840
Var #6441B88C|6441b88c|4|0|1|0|0|0|rw-p|/libtersafe2.so|688c
Var #6441B8B4|6441b8b4|4|0|1|0|0|0|rw-p|/libtersafe2.so|68b4
Var #6441B9F4|6441b9f4|4|0|1|0|0|0|rw-p|/libtersafe2.so|69f4
Var #6441BA3C|6441ba3c|4|0|1|0|0|0|rw-p|/libtersafe2.so|6a3c
Var #6441BA4C|6441ba4c|4|0|1|0|0|0|rw-p|/libtersafe2.so|6a4c
Var #6441BA60|6441ba60|4|0|1|0|0|0|rw-p|/libtersafe2.so|6a60
Var #6441BB3C|6441bb3c|4|0|1|0|0|0|rw-p|/libtersafe2.so|6b3c
Var #6441BB50|6441bb50|4|0|1|0|0|0|rw-p|/libtersafe2.so|6b50
Var #6441BC44|6441bc44|4|0|1|0|0|0|rw-p|/libtersafe2.so|6c44
Var #6441BC88|6441bc88|4|0|1|0|0|0|rw-p|/libtersafe2.so|6c88
Var #6441BD48|6441bd48|4|0|1|0|0|0|rw-p|/libtersafe2.so|6d48
Var #6441BD6C|6441bd6c|4|0|1|0|0|0|rw-p|/libtersafe2.so|6d6c
Var #6441BDEC|6441bdec|4|0|1|0|0|0|rw-p|/libtersafe2.so|6dec
Var #6441BE14|6441be14|4|0|1|0|0|0|rw-p|/libtersafe2.so|6e14
Var #6441BE8C|6441be8c|4|0|1|0|0|0|rw-p|/libtersafe2.so|6e8c
Var #6441BEA4|6441bea4|4|0|1|0|0|0|rw-p|/libtersafe2.so|6ea4
Var #6441BF30|6441bf30|4|0|1|0|0|0|rw-p|/libtersafe2.so|6f30
Var #6441C148|6441c148|4|0|1|0|0|0|rw-p|/libtersafe2.so|7148
Var #6441C230|6441c230|4|0|1|0|0|0|rw-p|/libtersafe2.so|7230
Var #6441C260|6441c260|4|0|1|0|0|0|rw-p|/libtersafe2.so|7260
Var #6441C2D8|6441c2d8|4|0|1|0|0|0|rw-p|/libtersafe2.so|72d8
Var #6441C2EC|6441c2ec|4|0|1|0|0|0|rw-p|/libtersafe2.so|72ec
Var #6441C3D0|6441c3d0|4|0|1|0|0|0|rw-p|/libtersafe2.so|73d0
Var #6441C460|6441c460|4|0|1|0|0|0|rw-p|/libtersafe2.so|7460
Var #6441C540|6441c540|4|0|1|0|0|0|rw-p|/libtersafe2.so|7540
Var #6441C560|6441c560|4|0|1|0|0|0|rw-p|/libtersafe2.so|7560
Var #6441C620|6441c620|4|0|1|0|0|0|rw-p|/libtersafe2.so|7620
Var #6441C710|6441c710|4|0|1|0|0|0|rw-p|/libtersafe2.so|7710
Var #6441C728|6441c728|4|0|1|0|0|0|rw-p|/libtersafe2.so|7728
Var #6441C740|6441c740|4|0|1|0|0|0|rw-p|/libtersafe2.so|7740
Var #6441C770|6441c770|4|0|1|0|0|0|rw-p|/libtersafe2.so|7770
Var #6441C8A8|6441c8a8|4|0|1|0|0|0|rw-p|/libtersafe2.so|78a8
Var #6441C8E0|6441c8e0|4|0|1|0|0|0|rw-p|/libtersafe2.so|78e0
Var #6441C90C|6441c90c|4|0|1|0|0|0|rw-p|/libtersafe2.so|790c
Var #6441C928|6441c928|4|0|1|0|0|0|rw-p|/libtersafe2.so|7928
Var #6441C944|6441c944|4|0|1|0|0|0|rw-p|/libtersafe2.so|7944
Var #6441CAAC|6441caac|4|0|1|0|0|0|rw-p|/libtersafe2.so|7aac
Var #6441CB18|6441cb18|4|0|1|0|0|0|rw-p|/libtersafe2.so|7b18
Var #6441CC0C|6441cc0c|4|0|1|0|0|0|rw-p|/libtersafe2.so|7c0c
Var #6441CC58|6441cc58|4|0|1|0|0|0|rw-p|/libtersafe2.so|7c58
Var #6441CC88|6441cc88|4|0|1|0|0|0|rw-p|/libtersafe2.so|7c88
Var #6441CCA4|6441cca4|4|0|1|0|0|0|rw-p|/libtersafe2.so|7ca4
Var #6441CDA4|6441cda4|4|0|1|0|0|0|rw-p|/libtersafe2.so|7da4
Var #644549F8|644549f8|4|0|1|0|0|0|rw-p|/libtersafe2.so|3f9f8
Var #64454B1C|64454b1c|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fb1c
Var #64454B20|64454b20|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fb20
Var #64454B24|64454b24|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fb24
Var #64454B28|64454b28|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fb28
Var #64454B2C|64454b2c|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fb2c
Var #64454B30|64454b30|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fb30
Var #64454B34|64454b34|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fb34
Var #64454B38|64454b38|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fb38
Var #64454B40|64454b40|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fb40
Var #64454B44|64454b44|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fb44
Var #64454CB8|64454cb8|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcb8
Var #64454CBC|64454cbc|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcbc
Var #64454CC0|64454cc0|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcc0
Var #64454CC4|64454cc4|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcc4
Var #64454CC8|64454cc8|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcc8
Var #64454CCC|64454ccc|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fccc
Var #64454CD0|64454cd0|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcd0
Var #64454CD4|64454cd4|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcd4
Var #64454CD8|64454cd8|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcd8
Var #64454CDC|64454cdc|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcdc
Var #64454CE0|64454ce0|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fce0
Var #64454CE4|64454ce4|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fce4
Var #64454CE8|64454ce8|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fce8
Var #64454CEC|64454cec|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcec
Var #64454CF0|64454cf0|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcf0
Var #64454CF4|64454cf4|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcf4
Var #64454CF8|64454cf8|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcf8
Var #64454CFC|64454cfc|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fcfc
Var #64454D00|64454d00|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fd00
Var #64454D04|64454d04|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fd04
Var #64454D08|64454d08|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fd08
Var #64454D0C|64454d0c|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fd0c
Var #64454D10|64454d10|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fd10
Var #64454EEC|64454eec|4|0|1|0|0|0|rw-p|/libtersafe2.so|3feec
Var #64454EF0|64454ef0|4|0|1|0|0|0|rw-p|/libtersafe2.so|3fef0
Var #64454F04|64454f04|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff04
Var #64454F08|64454f08|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff08
Var #64454F24|64454f24|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff24
Var #64454F28|64454f28|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff28
Var #64454F3C|64454f3c|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff3c
Var #64454F40|64454f40|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff40
Var #64454F48|64454f48|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff48
Var #64454F4C|64454f4c|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff4c
Var #64454F54|64454f54|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff54
Var #64454F58|64454f58|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff58
Var #64454F5C|64454f5c|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff5c
Var #64454F68|64454f68|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff68
Var #64454F7C|64454f7c|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff7c
Var #64454F80|64454f80|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ff80
Var #64454FE4|64454fe4|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ffe4
Var #64454FE8|64454fe8|4|0|1|0|0|0|rw-p|/libtersafe2.so|3ffe8
]])
gg.loadList("/sdcard/.4.08.0全防", gg.LOAD_VALUES)
os.remove("/sdcard/.4.08.0全防")

local t = {"libtersafe2.so", "Cd"}
local tt = {0x204}
local ttt = S_Pointer(t, tt)
gg.addListItems({{address = ttt, flags = 4, value = -53, freeze = true}})
gg.toast("\n\n成功")
end),
byrq.button("行为",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
local youlong=gg.getRangesList('il2cpp.so')[1]--行为
gg.setValues({{address=youlong.start+0x14c5454,flags=4,value='~A MOV R0, #0'}})
gg.setValues({{address=youlong.start+0x14c5454+4,flags=4,value='~A BX	 LR'}})


gg.toast("\n\n无视检测到您的数据异常请重新启动游戏成功")
end),

    
    }),
			
		}, {

		byrq.box2({"刷号区",
		byrq.button("内购",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0xf3aba8,4,"~A B +0x102CC")
gg.toast("成功")
end),
byrq.button("全版本通用人物全解",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
YXSOMODx32XB("人物全解","PlayerInfo","IsCollectionComplete",4,"0100A0E3r","1EFF2FE1r")
end),

byrq.button("全版本通用滑板全解",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
YXSOMODx32XB("滑板全解","PlayerInfo","isHoverboardUnlocked",4,"0100A0E3r","1EFF2FE1r")
end),

byrq.button("全版本通用装扮全解",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
YXSOMODx32XB("装扮全解","PlayerInfo","IsThemeUnlockedForCharacter",4,"0100A0E3r","1EFF2FE1r")
end),

byrq.button("全版本通用背饰全解",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
YXSOMODx32XB("背饰全解","PlayerInfo","IsOrnamentUnlocked",4,"0100A0E3r","1EFF2FE1r")
gg.toast("\n\n成功")
end),
byrq.button("奖杯",
function()						
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0xe8b0bc,4,"~A MOVW R0, #25")
end),

byrq.button("开发者全饰",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
local il2cppmod=gg.getRangesList('il2cpp.so')
gg.setValues({{address=il2cppmod[1].start+0x26eb980,flags=4,value='~A B -0x1C6DBF0'}})
gg.setValues({{address=il2cppmod[1].start+0x26eb980+4,flags=4,value='~A bx lr'}})
end),

byrq.button("等级",
function()
a4c(0xa6cc44,4,"~A MOVW R0, #"..gg.prompt({""},{"30"},{"text"})[1])
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
end),


byrq.button("滑板技能",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0xfe4c34,4,"~A MOVW R0, #"..gg.prompt({"输入1获取输入0就是没有"},{"1"},{"text"})[1])
end),



byrq.button("自定义最高排名",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0xa9fc3c,4,"~A MOVW R0, #"..gg.prompt({""},{"1"},{"text"})[1])
local loadingBox = getLoadingBox ('跑到一万分显示...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
end),

byrq.button("炫跑卡",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0xaa8990,4,"~A MOVW R0, #"..gg.prompt({"改成7就是隐藏版"},{"6"},{"text"})[1])
end),
}),
byrq.box2({"宝物+显示区",

byrq.button("十抽半饰",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c( 0x11f2fd4 , 4 , "~A B -0x774C78" )
a4c( 0x11f2fd4 + 4 , 4 , "1EFF2FE1r" )
end),
byrq.button("宝物直接解锁",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x10a5790,4,-369092746)
end),
byrq.button("宝物直接备份",
function()--宝物直接备份
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x10a5790,4,-369096587)
end),


byrq.button("十倍显示",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x26ef8c0,4,"~A MOVW R0, #"..gg.prompt({"输入1显示输入0恢复"},{"1"},{"text"})[1])
end),
}),
byrq.box2({"其他区",
byrq.switch("获取微博",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x1160cc4,4,"~A MOV	 R0, #1")
end,
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x1160cc4,4,"~A MOV	 R0, #0")
end),
byrq.switch("双倍金币",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0xa556b4,4,'~A MOVW R0, #1')
end,
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0xa556b4,4,'~A MOVW R0, #0')
end),

byrq.button("备份数据",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0xab7818,4,'~A MOV R0, #1')--允许当前账号保存数据
a4c(0xacff34,4,'~A MOV R0, #1')--创建任务保存数据
a4c(0x26e591c,4,'~A MOV R0, #1')--直接备份游戏数据
end),


byrq.button("历史分数",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0xa69074,4,"~A MOVT	 R0, #30999")
end),

byrq.button("最高排行改1",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0xa8b234,4,"~A MOV	 R0, #1")
end),





byrq.button("历史最高分",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0xa69a14,4,"~A MOVT	 R0, #30999")
end),

byrq.button("人物显示",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x26ba404,4,'~A MOV R0, #1')
end),

byrq.button("滑板显示",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x26ba958,4,'~A MOV R0, #1')
end),
}),
		}, {
	
			
		byrq.box2({"道具赛",
		byrq.button("2人道具赛",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x2841054,4,"~A MOV  R0, #1")---单人道具赛
gg.toast("\n\n成功")
end),
		byrq.button("滑板时间变长",
		function()
		search(1300, 16, 32)
py1(1000, 16, 24)
py1(6000, 16, 96)
xg1(0, 16, 100)
xg1(0, 16, 84)
xg1(13736.200, 16, 80)
gg.alert("成功如果没有成功就开一把无尽")
end),


byrq.button("无视道具",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x13c2914,'~A MOV R0, #0')--独家无视部分道具
a4c(0x2434964,4,"~A MOV R0, #0")--无视香蕉
--a4c(0x28469c8,4,"~A MOV  R0, #1")
end),

byrq.button("自己攻击自己",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x13c2914,'~A MOV R0, #1')--独家
gg.toast("使用无视道具可恢复")
end),


byrq.button("所有道具都是自己发射",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x13c27e4,'~A MOV R0, #1')--独家
end),


byrq.switch("道具效果磁铁",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x2436a50,'~A MOV R0, #1')--独家
end,
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x2436a50,'~A MOV R0, #0')
end),

byrq.switch("道具效果乌龟",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x2436a24,'~A MOV R0, #1')--独家
end,
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x2436a24,'~A MOV R0, #0')
end),

byrq.switch("道具效果恶魔",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24369f8,'~A MOV R0, #1')--独家
end,
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24369f8,'~A MOV R0, #0')
end),

byrq.switch("状态一直是磁铁",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x242f5d8,'~A MOV R0, #1')--独家
end,
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x242f5d8,'~A MOV R0, #0')
end),

byrq.switch("状态一直是恶魔",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x242f2e8,'~A MOV R0, #1')--独家
end,
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x242f2e8,'~A MOV R0, #0')
end),

byrq.switch("状态一直是乌龟",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x242f460,'~A MOV R0, #1')--独家
end,
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x242f460,'~A MOV R0, #0')
end),

byrq.button("娱乐小功能",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x2435890,'~A MOV R0, #0')--独家
end),


byrq.button("争霸赛排名",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x13E5298,4,"~A MOVW R0, #"..gg.prompt({""},{""},{"text"})[1])
end),

byrq.button("身法赛排名",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x13E3444,4,"~A MOVW R0, #"..gg.prompt({""},{""},{"text"})[1])
end),

byrq.button("身法赛等级",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x13E3714,4,"~A MOVW R0, #1")
a4c(0x13E396C,4,"~A MOVW R0, #1")
end),



byrq.button("身法赛分数",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x13E35AC,4,"~A MOVW R0, #"..gg.prompt({""},{""},{"text"})[1])
end),

byrq.button("宝物等级",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
a4c(0x10a0818,4,"~A MOVW	 R0, #"..gg.prompt({"请输入代码"},{"3299"},{"text"})[1])
end),

byrq.button("装逼",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x242f750,"~A MOVW R0, #2")--蓝泡泡
sz(0x13aef5c,'~A MOVW R0, #0')--能量
end),

byrq.box2({"锁定道具",
byrq.box({"锁定道具",
byrq.button("蓝泡泡(对抗)",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #2")
end),
byrq.button("群体护盾",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #512")
gg.toast("\n\n成功")
end),

byrq.button("超级导弹(抗赛)",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #544")
gg.toast("\n\n成功")
end),
byrq.button("导弹",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #1")
end),

byrq.button("滑板(抗赛)",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #560")
end),

byrq.button("护盾",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #4")
end),

byrq.button("香蕉",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #8")
end),

byrq.button("颜料",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #16")
end),

byrq.button("恶魔",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #32")
end),

byrq.button("粘液罐",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #64")
end),

byrq.button("狗子",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #128")
end),

byrq.button("乌龟",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #272")
end),

byrq.button("饮料",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
sz(0x24378b4,"~A MOVW R0, #320")
end),

}),
}),
byrq.switch("两个宝物聚能",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
gg.toast("宝物相机校服")
Name="成功"
ms.ss("3110",4,32)
ms.py(1,0x4,4)
ms.py(1,-0x4,4)
ms.edit(1,0x74,16)
ms.edit(0,0x64,16)
ms.edit(2.0,0x94,16)
ms.edit(0,0xA8,16)
ms.edit(0,0x98,16)
ms.edit(3,0x60,16)
ms.edit(0,0x5C,4)
ms.edit(0,0x50,4)
ms.edit(3,0x4C,4)

ms.ss("3210",4,32)
ms.py(1,0x4,4)
ms.py(1,-0x4,4)
ms.edit(1,0x74,16)
ms.edit(0,0x64,16)
ms.edit(2.0,0x94,16)
ms.edit(0,0xA8,16)
ms.edit(0,0x98,16)
ms.edit(3,0x60,16)
ms.edit(0,0x5C,4)
ms.edit(0,0x50,4)
ms.edit(3,0x4C,4)
end,
function()
Name="成功"
Name="成功"
ms.ss("3110",4,32)
ms.py(1,0x4,4)
ms.py(1,-0x4,4)
ms.edit(1,0x74,16)
ms.edit(0,0x64,16)
ms.edit(20.0,0x94,16)
ms.edit(0,0xA8,16)
ms.edit(0,0x98,16)
ms.edit(20,0x60,16)
ms.edit(0,0x5C,4)
ms.edit(0,0x50,4)
ms.edit(4,0x4C,4)

ms.ss("3210",4,32)
ms.py(1,0x4,4)
ms.py(1,-0x4,4)
ms.edit(1,0x74,16)
ms.edit(0,0x64,16)
ms.edit(20.0,0x94,16)
ms.edit(0,0xA8,16)
ms.edit(0,0x98,16)
ms.edit(20,0x60,16)
ms.edit(0,0x5C,4)
ms.edit(0,0x50,4)
ms.edit(5,0x4C,4)
end),

byrq.box2({"聚能合集",
byrq.box({"聚能",
byrq.button("阿旺老聚能",
function()
bf = gg.prompt({"选择等级[1;10]","扇子","卫衣","校服","相机","延迟[0;15]","时间聚能","跳跃聚能","下滑聚能","撞墙聚能"}, {}, {"number","checkbox","checkbox","checkbox","checkbox","number","checkbox","checkbox","checkbox","checkbox"})
if bf == nil then else
if bf[1] == "10" then gg.alert("你选择了满级宝物聚能") else gg.alert("你选择了 "..bf[1].." 级宝物聚能") end
if bf[6] == "0" then gg.alert("你选择了 默认时间 聚能一次") else gg.alert("你选择了延迟 "..bf[6].." 秒聚能一次") end
if bf[7] == true then gg.alert("你选择了时间聚能") end
if bf[8] == true then gg.alert("你选择了跳跃聚能") end
if bf[9] == true then gg.alert("你选择了下滑聚能") end
if bf[10] == true then gg.alert("你选择了撞墙聚能") end
if bf[2] == true then else if bf[3] == true then else if bf[4] == true then else if bf[5] == true then else gg.alert("请选择聚能宝物") end end end end
if bf[7] == true then else if bf[8] == true then else if bf[9] == true then else if bf[10] == true then else gg.alert("请选择聚能类型") end end end end
if bf[7] == true then
if bf[2] == true then
if bf[1] == "10" then
search(2910,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(0,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("290"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(0,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[3] == true then
if bf[1] == "10" then
search(3010,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(0,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("300"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(0,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[4] == true then
if bf[1] == "10" then
search(3110,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(0,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("310"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(0,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[5] == true then
if bf[1] == "10" then
search(3210,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(0,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("320"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(0,4,0x50)--类型
xg1(3,4,0x4C)

gg.clearResults()
gg.clearList()
end
end
end
if bf[10] == true then
if bf[2] == true then
if bf[1] == "10" then
search(2910,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(5,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("290"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(5,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[3] == true then
if bf[1] == "10" then
search(3010,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(5,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("300"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(5,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[4] == true then
if bf[1] == "10" then
search(3110,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(5,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("310"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(5,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[5] == true then
if bf[1] == "10" then
search(3210,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(5,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("320"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(5,4,0x50)--类型
xg1(3,4,0x4C)

gg.clearResults()
gg.clearList()
end
end
end
if bf[9] == true then
if bf[2] == true then
if bf[1] == "10" then
search(2910,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(6,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("290"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(6,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[3] == true then
if bf[1] == "10" then
search(3010,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(6,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("300"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(6,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[4] == true then
if bf[1] == "10" then
search(3110,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(6,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("310"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(6,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[5] == true then
if bf[1] == "10" then
search(3210,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(6,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("320"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(6,4,0x50)--类型
xg1(3,4,0x4C)

gg.clearResults()
gg.clearList()
end
end
end
if bf[8] == true then
if bf[2] == true then
if bf[1] == "10" then
search(2910,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(7,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("290"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(7,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[3] == true then
if bf[1] == "10" then
search(3010,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(7,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("300"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(7,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[4] == true then
if bf[1] == "10" then
search(3110,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(7,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("310"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(7,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
end
end
if bf[5] == true then
if bf[1] == "10" then
search(3210,4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(7,4,0x50)
xg1(3,4,0x4C)
gg.clearResults()
gg.clearList()
else
search("320"..bf[1],4,32)
py1(1,4,0x4)
py1(1,4,-0x4)
xg1(1,16,0x74)
xg1(0,16,0x64)
xg1(0,16,0x60)
xg1(0,16,0xA8)
xg1(0,16,0x98)
xg1(bf[6],16,0x94)
xg1(0,4,0x5C)
xg1(7,4,0x50)--类型
xg1(3,4,0x4C)

gg.clearResults()
gg.clearList()
end
end
end
end
end),

byrq.box({"聚能",
byrq.switch(	
 "相机时间聚能",
    function()
gg.alert("没用已被删除")
        end), byrq.switch(	"校服时间聚能",
function()
gg.alert("没用已被删除")
        end), byrq.switch(	"卫衣时间聚能",
function()
gg.alert("没用已被删除")
		end), byrq.switch(	

"扇子时间聚能",
function()
gg.alert("没用已被删除")
end),
}),
}),
}),
}),
},{

			byrq.box2({"更多音乐",
byrq.box({
"更多音乐",
byrq.switch("口水旋律Vol.59",--功能名字 不可重复
    function()
gg.playMusic("https://image.api.losfer.cn/view.php/0fabb2c200dddb91ae71b971e213868c.mp3")
    end,
    function()
      gg.toast("正在停止播放...")
      for i=1,100 do
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
      end
      gg.toast("播放已停止")
      gg.toast("无正在播放的音乐")         
    end
        ),
byrq.switch("海誓山盟",--功能名字 不可重复
    function()
gg.playMusic("https://image.api.losfer.cn/view.php/0ead07ab110ce719d4a005dcf292f773.mp3")
    end,
    function()
      gg.toast("正在停止播放...")
      for i=1,100 do
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
      end
      gg.toast("播放已停止")
      gg.toast("无正在播放的音乐")         
    end
        ),
byrq.switch("有本事把我踩在脚下",--功能名字 不可重复
    function()
gg.playMusic("https://image.api.losfer.cn/view.php/fb19e90cc929121868fd3b5fc28d72bd.mp3")
    end,
    function()
      gg.toast("正在停止播放...")
      for i=1,100 do
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
      end
      gg.toast("播放已停止")
      gg.toast("无正在播放的音乐")         
    end
        ),
byrq.switch("口水旋律Vol.77",--功能名字 不可重复
   function()
gg.playMusic("https://image.api.losfer.cn/view.php/c0a1bd274ca79f737a381c38cccc676a.mp3")
    end,
    function()
      gg.toast("正在停止播放...")
      for i=1,100 do
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
      end
      gg.toast("播放已停止")
      gg.toast("无正在播放的音乐")         
    end
        ),
    byrq.switch("脚踩魔怔b",
    function()
    gg.playMusic("http://music.163.com/song/media/outer/url?id=2027640152")
    end,
    function()
      gg.toast("正在停止播放...")
      for i=1,100 do
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
      end
      gg.toast("播放已停止")
      gg.toast("无正在播放的音乐")         
    end
    ),

    byrq.switch("1",
    function()
    gg.playMusic("https://image.api.losfer.cn/view.php/3a4f0cdbb51d3e2f2ba25210d79bec2c.mp3")
    end,
    function()
      gg.toast("正在停止播放...")
      for i=1,100 do
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
        gg.playMusic("stop")
      end
      gg.toast("播放已停止")
      gg.toast("无正在播放的音乐")         
    end
    ),

}),
}),
byrq.button("音乐搜索",
function()
WTYY()
end),

wyylog
},{

byrq.text(os.date"我去","#00f572","10sp"),
byrq.text("一群:917063803","#87CEFA","15sp"),
byrq.button("退出插件",
function()
gg.toast("1")
window:removeView(floatWindow)
luajava.setFloatingWindowHide(false)
luajava.newThread(function() os.exit() end):start()
bloc("end")
end,
"#DB202C"),
byrq.button("复制群号",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
gg.copyText("917063803")
end),
byrq.button("加入我们",
function()
local loadingBox = getLoadingBox ('请稍等...')
loadingBox ['显示'] ()
gg.setVisible(false)
gg.sleep(1900)
loadingBox ['关闭'] ()
gg.sleep(0)
gg.QQgroup("183426991")
end),
byrq.text(os.date"登录时间:%m月%d日%H时%M分%S秒", "#87CEFA","15sp"),
}})



function proo()
byrq.controlRotation2(control1,3000)
end

luajava.newThread(function()--更新逻辑
	while true do
		gg.sleep(3000)
		if 显示==0 then
			proo()
		end
	end
end):start()
jm1 : setBackground(slcta )
gg.setVisible(false )
luajava.setFloatingWindowHide(true )
---bloc不要动 动了脚本功能会失效
bloc = luajava.getBlock()
bloc("join" )