Crack Lua [NL] jag0yaw src

Начинающий
Статус
Оффлайн
Регистрация
19 Июл 2022
Сообщения
118
Реакции[?]
26
Поинты[?]
11K
Код:
_DEBUG = false


local ffi = require("ffi")
local clipboard = require("neverlose/clipboard")
local anti_aim = require("neverlose/anti_aim")

ffi.cdef[[
    void* __stdcall URLDownloadToFileA(void* LPUNKNOWN, const char* LPCSTR, const char* LPCSTR2, int a, int LPBINDSTATUSCALLBACK);

    bool DeleteUrlCacheEntryA(const char* lpszUrlName);

    void* __stdcall ShellExecuteA(void* hwnd, const char* op, const char* file, const char* params, const char* dir, int show_cmd);

    bool CreateDirectoryA(const char* lpPathName, void* lpSecurityAttributes);
]]

local js = panorama.loadstring([[
    return {
        OpenExternalBrowserURL: function(url){
            void SteamOverlayAPI.OpenExternalBrowserURL(url)
        }
    }
]])()

local ffi_stuff = {}

ffi_stuff.urlmon = ffi.load 'UrlMon'
ffi_stuff.wininet = ffi.load 'WinInet'


local helpers = {}

helpers.round = function(num, decimals)
    local mult = 10^(decimals or 0)
    return math.floor(num * mult + 0.5) / mult
end
helpers.in_air = function(player)
    if player == nil then return end
    local flags = player.m_fFlags
    if bit.band(flags, 1) == 0 then
        return true
    end
    return false
end
helpers.on_ground = function(player)
    if player == nil then return end
    local flags = player.m_fFlags
    if bit.band(flags, 1) == 1 then
        return true
    end
    return false
end
helpers.is_crouching = function(player)
    if player == nil then return end
    local flags = player.m_fFlags
    if bit.band(flags, 4) == 4 then
        return true
    end
    return false
end
helpers.get_velocity = function(player)
    if player == nil then return end
    local velocity_ref = player.m_vecVelocity
    local velocity = velocity_ref:length()
    return velocity
end
helpers.normalize_yaw = function(yaw)
    while yaw > 180 do yaw = yaw - 360 end
    while yaw < -180 do yaw = yaw + 360 end
    return yaw
end
helpers.calc_shit = function(xdelta, ydelta)
    if xdelta == 0 and ydelta == 0 then
        return 0
    end

    return math.deg(math.atan2(ydelta, xdelta))
end
helpers.get_nearest_enemy = function(plocal, enemies)
    local local_player = entity.get_local_player()
    if not local_player or not local_player:is_alive() then return end

    local camera_position = render.camera_position()

    local camera_angles = render.camera_angles()

    local direction = vector():angles(camera_angles)

    local closest_distance, closest_enemy = math.huge
    for i = 1, #enemies do
        local enemy = entity.get(enemies[i])
        local head_position = enemy:get_hitbox_position(1)

        local ray_distance = head_position:dist_to_ray(
            camera_position, direction
        )
    
        if ray_distance < closest_distance then
            closest_distance = ray_distance
            closest_enemy = enemy
        end
    end

    if not closest_enemy then
        return
    end
    return closest_enemy
end
helpers.calc_angle = function(local_x, local_y, enemy_x, enemy_y)
    local ydelta = local_y - enemy_y
    local xdelta = local_x - enemy_x
    local relativeyaw = math.atan( ydelta / xdelta )
    relativeyaw = helpers.normalize_yaw( relativeyaw * 180 / math.pi )
    if xdelta >= 0 then
        relativeyaw = helpers.normalize_yaw(relativeyaw + 180)
    end
    return relativeyaw
end
helpers.angle_vector = function(angle_x, angle_y)
    local sy = math.sin(math.rad(angle_y))
    local cy = math.cos(math.rad(angle_y))
    local sp = math.sin(math.rad(angle_x))
    local cp = math.cos(math.rad(angle_x))
    return cp * cy, cp * sy, -sp
end
helpers.get_damage = function(plocal, enemy, x, y, z)
    local ex = { }
    local ey = { }
    local ez = { }
    ex[0], ey[0], ez[0] = enemy:get_hitbox_position(1).x, enemy:get_hitbox_position(1).y, enemy:get_hitbox_position(1).z
    ex[1], ey[1], ez[1] = ex[0] + 40, ey[0], ez[0]
    ex[2], ey[2], ez[2] = ex[0], ey[0] + 40, ez[0]
    ex[3], ey[3], ez[3] = ex[0] - 40, ey[0], ez[0]
    ex[4], ey[4], ez[4] = ex[0], ey[0] - 40, ez[0]
    ex[5], ey[5], ez[5] = ex[0], ey[0], ez[0] + 40
    ex[6], ey[6], ez[6] = ex[0], ey[0], ez[0] - 40
    local trace = {damage = 0, trace = nil}
    --local dmg = 0
    for i=0, 6 do
        if trace.damage == 0 or trace.damage == nil then
            trace.damage, trace.trace = utils.trace_bullet(enemy, vector(ex[i], ey[i], ez[i]), vector(x, y, z))
        end
    end
    return trace.damage--trace.trace == nil and client.scale_damage(plocal, 1, dmg) or dmg
end
helpers.lerp = function(a, b, percentage) return a + (b - a) * percentage end
helpers.gram_create = function(value, count) local gram = { }; for i=1, count do gram[i] = value; end return gram; end
helpers.Download = function(from, to)
    ffi_stuff.wininet.DeleteUrlCacheEntryA(from)
    ffi_stuff.urlmon.URLDownloadToFileA(nil, from, to, 0,0)
end
helpers.gradient_text = function(r1, g1, b1, a1, r2, g2, b2, a2, text)
    local output = ''

    local len = #text-1

    local rinc = (r2 - r1) / len
    local ginc = (g2 - g1) / len
    local binc = (b2 - b1) / len
    local ainc = (a2 - a1) / len

    for i=1, len+1 do
        output = output .. ('\a%02x%02x%02x%02x%s'):format(r1, g1, b1, a1, text:sub(i, i))

        r1 = r1 + rinc
        g1 = g1 + ginc
        b1 = b1 + binc
        a1 = a1 + ainc
    end

    return output
end

helpers.colored_single_text = function(r1, g1, b1, a1, text, r2, g2, b2, a2)
    local output = ''

    output = ('\a%02x%02x%02x%02x%s\a%02x%02x%02x%02x'):format(r1, g1, b1, a1, text, r2, g2, b2, a2)

    return output
end
helpers.vectordistance = function(x1,y1,z1,x2,y2,z2)
    return math.sqrt(math.pow(x1 - x2, 2) + math.pow( y1 - y2, 2) + math.pow( z1 - z2 , 2) )
end
helpers.colored_text = function(r, g, b, a, text)
    local output = ''

    output = ('\a%02x%02x%02x%02x%s'):format(r, g, b, a, text)

    return output
end
helpers.screen_size = render.screen_size()

files.create_folder("nl\\jagoyaw\\")
files.create_folder("nl\\jagoyaw\\fonts")

-- network.get(url: string[, headers: table, callback: function])
-- files.write(path: string, contents: string[, is_binary: boolean])

-- network.get('https://cdn.discordapp.com/attachments/614973363215138817/964726308787609610/easing.lua', {}, function(s)
--     -- if s and r.status == 200 then
--         -- files.write("nl\\jagoyaw\\easing.lua", r.body)
--         print(s)
--     -- end
-- end)

local to_download = {
    { link = 'https://cdn.discordapp.com/attachments/614973363215138817/964726308787609610/easing.lua', dir = "nl\\jagoyaw\\easing.lua" },
    { link = 'https://cdn.discordapp.com/attachments/953060406182678628/953060859020709910/smallest_pixel-7.ttf', dir = "nl\\jagoyaw\\fonts\\pixel.ttf" },
    { link = 'https://cdn.discordapp.com/attachments/953060406182678628/957747508602359818/Acta_Symbols_W95_Arrows.ttf', dir = "nl\\jagoyaw\\fonts\\ActaSymbolsW95Arrows.ttf" },
    { link = 'https://cdn.discordapp.com/attachments/614973363215138817/1015456850914840656/lucida-console.ttf', dir = "nl\\jagoyaw\\fonts\\lucida_console.ttf" },
}

for i, value in pairs(to_download) do
    if not files.read(value.dir) then
        helpers.Download(value.link, value.dir)
    end
end


-- helpers.CreateDir("nl\\jagoyaw\\fonts\\")

-- helpers.Download('https://cdn.discordapp.com/attachments/953060406182678628/953060859020709910/smallest_pixel-7.ttf', 'nl\\jagoyaw\\fonts\\pixel.ttf')
-- helpers.Download('https://cdn.discordapp.com/attachments/953060406182678628/957747508602359818/Acta_Symbols_W95_Arrows.ttf', 'nl\\jagoyaw\\fonts\\ActaSymbolsW95Arrows.ttf')
-- helpers.Download('https://cdn.discordapp.com/attachments/614973363215138817/997160940871094292/small_fonts.ttf', 'nl\\jagoyaw\\fonts\\small_fonts.ttf')

-- print(files.read("nl\\jagoyaw\\easing.lua"))

local easing = require 'jagoyaw/easing'

local Unpack = unpack or table.unpack;

local script_db = {}

script_db.username = common.get_username()
script_db.lua_name = 'jag0yaw'
script_db.lua_version = 'BETA'

local UI = {
    list = { },
}

UI.push = function( args )
    assert( args.element, 'Element is nil' )
    assert( args.index, 'Index is nil' )
    assert( type( args.index ) == 'string', 'Invalid type of index' )

    UI.list[ args.index ] = { }

    UI.list[ args.index ].element = args.element

    UI.list[ args.index ].flags = args.flags or ''

    UI.list[ args.index ].visible_state = function()
        if not args.conditions then
            return true
        end

        for k, v in pairs( args.conditions ) do
            if not v() then
                return false
            end
        end

        return true
    end

    UI.list[ args.index ].element:set_callback( UI.visibility_handle )

    UI.visibility_handle()
end

UI.get = function( index )
    return UI.list[ index ] and UI.list[ index ].element:get()
end

-- UI.get_color = function( index )
--     return UI.list[ index ] and UI.list[ index ].element:GetColor()
-- end

UI.get_element = function( index )
    return UI.list[ index ] and UI.list[ index ].element
end

UI.delete = function( index )
    UI.get( index ):destroy()

    UI.list[ index ] = nil
end

UI.contains = function( index, value )
    index = UI.get( index )

    if type( index ) ~= "table" then
        return false
    end

    for i = 1, #index do
        if index[ i ] == value then
            return true
        end
    end

    return false
end

UI.visibility_handle = function()
    if ui.get_alpha() == 0 then return end

    for k, v in pairs( UI.list ) do
        v.element:set_visible( v.visible_state() )
    end
end

local configs = {}

configs.code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

configs.encode = function(data)
    return ( ( data:gsub( '.', function( x )
        local r, b='', x:byte(  )
        for i = 8, 1, -1 do r = r .. ( b%2 ^ i - b%2 ^ ( i - 1 ) > 0 and '1' or '0' ) end
        return r;
    end ) .. '0000' ):gsub( '%d%d%d?%d?%d?%d?', function( x )
        if ( #x < 6 ) then return '' end
        local c = 0
        for i = 1, 6 do c = c + ( x:sub( i, i ) == '1' and 2 ^ ( 6 - i ) or 0 ) end
        return configs.code:sub( c + 1, c + 1 )
    end) .. ( { '', '==', '=' } )[ #data%3 + 1 ] )
end

configs.decode = function(data)
    data = string.gsub( data, '[^' .. configs.code .. '=]', '' )
    return ( data:gsub( '.', function( x )
        if ( x == '=' ) then return '' end
        local r, f = '', ( configs.code:find( x ) - 1 )
        for i = 6, 1, -1 do r = r .. ( f%2 ^ i - f%2 ^ ( i - 1 ) > 0 and '1' or '0' ) end
        return r;
    end ):gsub( '%d%d%d?%d?%d?%d?%d?%d?', function( x )
        if ( #x ~= 8 ) then return '' end
        local c = 0
        for i = 1, 8 do c = c + ( x:sub( i, i ) == '1' and 2 ^ ( 8 - i ) or 0 ) end
        return string.char( c )
    end) )
end

configs.export = function()
    local table = {}
    for k, v in pairs( UI.list ) do
        if v.flags == 'c' then
            table[k] = { UI.list[ k ].element:get().r, UI.list[ k ].element:get().g, UI.list[ k ].element:get().b, UI.list[ k ].element:get().a }
        elseif v.flags == '-' then
            goto skip
        else
            table[k] = UI.list[ k ].element:get()
        end
        ::skip::
    end

    clipboard.set(configs.encode(json.stringify(table)))
end


configs.import = function(config)
    local data = json.parse(configs.decode(config))

    for item, value in pairs(data) do
        if UI.list[ item ].flags == 'c' then
            UI.get_element(item):set(color(value[1], value[2], value[3], value[4]))
        else
            UI.get_element(item):set(value)
        end
    end

    UI.visibility_handle()
end

local global_vars = {
    plr_conditions = { 'Global', 'Standing', 'Moving', 'Crouching T', 'Crouching CT', 'Slowwalk', 'Air duck', 'Air', 'Legit aa' },
    plr_conditions_to_int = {
        [ 'Global' ] = 1,
        [ 'Standing' ] = 2,
        [ 'Moving' ] = 3,
        [ 'Crouching T' ] = 4,
        [ 'Crouching CT' ] = 5,
        [ 'Slowwalk' ] = 6,
        [ 'Air duck' ] = 7,
        [ 'Air' ] = 8,
        [ 'Legit aa' ] = 9
    }
}

local ref = {
    pitch = ui.find("Aimbot", "Anti Aim", "Angles", "Pitch"),
    yaw = {
        mode = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw"),
        base = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw", "Base"),
        offset = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw", "Offset"),
        avoid_backstab = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw", "Avoid Backstab")
    },
    yaw_modifier = {
        mode = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw Modifier"),
        offset = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw Modifier", "Offset")
    },
    body_yaw = {
        switch = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw"),
        inverter = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "Inverter"),
        left_limit = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "Left Limit"),
        right_limit = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "Right Limit"),
        fake_options = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "Options"),
        desync_freestand = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "Freestanding"),
        on_shot_desync = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "On Shot"),
        lby_mode = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "LBY Mode"),
    },
    freestanding = {
        switch = ui.find("Aimbot", "Anti Aim", "Angles", "Freestanding"),
        disable_yaw_modifiers = ui.find("Aimbot", "Anti Aim", "Angles", "Freestanding", "Disable Yaw Modifiers"),
        body_freestanding = ui.find("Aimbot", "Anti Aim", "Angles", "Freestanding", "Disable Yaw Modifiers")
    },
    leg_movement = ui.find("Aimbot", "Anti Aim", "Misc", "Leg Movement"),
    slowwalk = ui.find("Aimbot", "Anti Aim", "Misc", "Slow Walk"),
    fakeduck = ui.find("Aimbot", "Anti Aim", "Misc", "Fake Duck"),
    fakelag = {
        switch = ui.find("Aimbot", "Anti Aim", "Fake Lag", "Enabled"),
        limit = ui.find("Aimbot", "Anti Aim", "Fake Lag", "Limit"),
        variability = ui.find("Aimbot", "Anti Aim", "Fake Lag", "Variability")
    },
    auto_peek = ui.find("Aimbot", "Ragebot", "Main", "Peek Assist"),
    hide_shots = {
        switch = ui.find("Aimbot", "Ragebot", "Main", "Hide Shots"),
        options = ui.find("Aimbot", "Ragebot", "Main", "Hide Shots", "Options")
    },
    doubletap = {
        switch = ui.find("Aimbot", "Ragebot", "Main", "Double Tap"),
        lag_options = ui.find("Aimbot", "Ragebot", "Main", "Double Tap", "Lag Options"),
        fakelag_limit = ui.find("Aimbot", "Ragebot", "Main", "Double Tap", "Fake Lag Limit")
    },
    autoscope = ui.find("Aimbot", "Ragebot", "Accuracy", "Auto Scope"),
    hitchance = {
        value = ui.find("Aimbot", "Ragebot", "Selection", "Hit Chance"),
        strict_hitchance = ui.find("Aimbot", "Ragebot", "Selection", "Hit Chance", "Strict Hit Chance")
    },
    minimum_damage = {
        value = ui.find("Aimbot", "Ragebot", "Selection", "Minimum Damage"),
        delay_show = ui.find("Aimbot", "Ragebot", "Selection", "Minimum Damage", "Delay Shot")
    },
    body_aim = {
        mode = ui.find("Aimbot", "Ragebot", "Safety", "Body Aim"),
        disablers = ui.find("Aimbot", "Ragebot", "Safety", "Body Aim", "Disablers")
    },
    safe_point = ui.find("Aimbot", "Ragebot", "Safety", "Safe Points"),
    hitbox_safety = ui.find("Aimbot", "Ragebot", "Safety", "Ensure Hitbox Safety"),
    thirdperson = ui.find("Visuals", "World", "Main", "Force Thirdperson"),
    override_zoom = {
        force_viewmodel = ui.find("Visuals", "World", "Main", "Override Zoom", "Force Viewmodel"),
        scope_overlay = ui.find("Visuals", "World", "Main", "Override Zoom", "Scope Overlay")
    }
}

local menu = {}

menu.update_log = {
"NEW DISCORD CLICK BUTTON ON THE RIGHT->",
"https://discord.gg/nR7QwtkqEP",
"Fixed Load default config",
"Added new default config",
"Added Disable freestanding in air",
"Added new bluhgang indicator",
"Improved body-yaw presets",
"Removed obsolete features",
"Fixed jag0-walk",
"Added left hand knife",
"Added jag0yaw logo to UI",
"Fixed massive fake exploit",
"Fixed legit antiaim",
"Added Ideal tick",
"Fixed jag0yaw v2 indicator",
"Changes to acatel indicator",
"Added skeet spectator list",
"Added new Trash Talk",
"Added skeet rainbow bar",
"Added new event logs (skeet based)",
"Added debug informations",
"Changes to UI",
"Various general improvements",
"More changes coming soon!"


}

menu.handle_updatelog = function(table)
    local text = ''
    for i = 1, #table do
        text = text .. ' - ' .. table[i] .. (i ~= #table and '\n' or '')
    end
    return text
end

local groups = {
    main = {
        info = ui.create("Global", "Information"),
        config_system = ui.create('Global', 'Config system'),
        nothing = ui.create('Global', ' '),
        image = ui.create('Global', '')
    },
    anti_aim = {
        main = ui.create("Anti-aim", "Main"),
        builder = ui.create("Anti-aim", "Preset changer"),
        binds = ui.create("Anti-aim", "Binds"),
    },
    aimbot = {
        main = ui.create("Aimbot", "Main"),
        hitchances = ui.create("Aimbot", "Hitchances"),
        other = ui.create("Aimbot", "Other"),
    },
    visuals = {
        main = ui.create("Visuals", "Main"),
        ui = ui.create("Visuals", "Ui"),
        crosshair = ui.create("Visuals", "Indicators"),
        custom_scope = ui.create("Visuals", "Custom scope"),
        logs = ui.create("Visuals", "Skeet"),
        other = ui.create("Visuals", "Other"),
    },
    misc = {
        main = ui.create("Misc", "Main"),
        binds = ui.create("Misc", "Binds")
    }
}


menu.side_bar = {}

menu.side_bar.animation = {
    "J",
    "JA",
    "JAG",
    "JAGO",
    "JAGO-",
    "JAGO-Y",
    "JAGO-YA",
    "JAGO-YAW",
    "JAGO-YAW",
    "JAGO-YA",
    "JAGO-Y",
    "JAGO-",
    "JAGO",
    "JAG",
    "JA",
    "J",
    ""
}

menu.side_bar.values = {
    timer = 0
}

menu.side_bar.run = function()
    local curtime = math.floor(globals.curtime * 2)

    if menu.side_bar.values.timer ~= curtime then
        ui.sidebar(helpers.gradient_text(150, 171, 255, 255, 119, 124, 145, 255, menu.side_bar.animation[curtime % #menu.side_bar.animation + 1]), 'user-shield')
        menu.side_bar.values.timer = curtime
    end
end

ui.sidebar(helpers.gradient_text(150, 171, 255, 255, 119, 124, 145, 255, script_db.lua_name), 'user-shield')
--"\aFFFFFFFF [JagoYaw] Build -> \aFCCDFFFF  Dev")
common.add_notify("Hello, " .. common.get_username() .. "!","\aFFFFFFFFWelcome back to JAG0YAW!")
groups.main.info:label("\a858585FF[\aFCCDFFFFJag0yaw\a858585FF]\aFCCDFFFF \aFFFFFFFFWelcome back \aFCCDFFFF" .. common.get_username() .. "!")
groups.main.info:label("\aFFFFFFFFBuild \a858585FF» \aFCCDFFFF" ..script_db.lua_version)
groups.main.info:label("\aFFFFFFFFUpdate\a858585FF » \aFCCDFFFF09.09.2022" )
groups.main.info:label("\aFFFFFFFF\n" .. menu.handle_updatelog(menu.update_log))

local default_config = string.format("eyJhaW1ib3RfZWxlbWVudHMiOlsiSGl0Y2hhbmNlcyIsIk90aGVyIl0sImFudGlhaW1fcHJlc2V0cyI6IkN1c3RvbSIsImFudGlhaW1fc2V0dGluZ3MiOnRydWUsImFycm93c19jb2xvciI6WzE0Mi4wLDE2NS4wLDIyOS4wLDI1NS4wXSwiYXJyb3dzX3N0eWxlIjoiRGlzYWJsZWQiLCJhdmF0YXJfc2lkZSI6IkxlZnQiLCJjbGFudGFnIjpmYWxzZSwiY3Jvc3NoYWlyX3N0eWxlIjoiQWNhdGVsIiwiY3VzdG9tX3Njb3BlX2NvbG9yIjpbMTQyLjAsMTY1LjAsMjI5LjAsMjU1LjBdLCJjdXN0b21fc2NvcGVfaW5hY2N1cmFjeSI6ZmFsc2UsImN1c3RvbV9zY29wZV9sZW5naHQiOjEwLjAsImN1c3RvbV9zY29wZV9vZmZzZXQiOjcwLjAsImRlYnVnX2luZm8iOnRydWUsImRvdWJsZXRhcF9vcHRpb25zIjpbIlByZWRpY3QgZHQgZGFtYWdlIl0sImV4cGVyaW1lbnRhbF9hbnRpYnJ1dGVmb3JjZSI6dHJ1ZSwiZmFrZV9saW1pdF9qaXR0ZXJfQWlyIjo2MC4wLCJmYWtlX2xpbWl0X2ppdHRlcl9BaXIgZHVjayI6NjAuMCwiZmFrZV9saW1pdF9qaXR0ZXJfQ3JvdWNoaW5nIENUIjo2MC4wLCJmYWtlX2xpbWl0X2ppdHRlcl9Dcm91Y2hpbmcgVCI6NjAuMCwiZmFrZV9saW1pdF9qaXR0ZXJfR2xvYmFsIjo2MC4wLCJmYWtlX2xpbWl0X2ppdHRlcl9MZWdpdCBhYSI6NjAuMCwiZmFrZV9saW1pdF9qaXR0ZXJfTW92aW5nIjo2MC4wLCJmYWtlX2xpbWl0X2ppdHRlcl9TbG93d2FsayI6NjAuMCwiZmFrZV9saW1pdF9qaXR0ZXJfU3RhbmRpbmciOjYwLjAsImZha2VfbGltaXRfbGVmdF9BaXIiOjYwLjAsImZha2VfbGltaXRfbGVmdF9BaXIgZHVjayI6NjAuMCwiZmFrZV9saW1pdF9sZWZ0X0Nyb3VjaGluZyBDVCI6NjAuMCwiZmFrZV9saW1pdF9sZWZ0X0Nyb3VjaGluZyBUIjo2MC4wLCJmYWtlX2xpbWl0X2xlZnRfR2xvYmFsIjoxLjAsImZha2VfbGltaXRfbGVmdF9MZWdpdCBhYSI6NjAuMCwiZmFrZV9saW1pdF9sZWZ0X01vdmluZyI6NjAuMCwiZmFrZV9saW1pdF9sZWZ0X1Nsb3d3YWxrIjo2MC4wLCJmYWtlX2xpbWl0X2xlZnRfU3RhbmRpbmciOjYwLjAsImZha2VfbGltaXRfcmFuZG9tX0FpciI6NjAuMCwiZmFrZV9saW1pdF9yYW5kb21fQWlyIGR1Y2siOjYwLjAsImZha2VfbGltaXRfcmFuZG9tX0Nyb3VjaGluZyBDVCI6NjAuMCwiZmFrZV9saW1pdF9yYW5kb21fQ3JvdWNoaW5nIFQiOjYwLjAsImZha2VfbGltaXRfcmFuZG9tX0dsb2JhbCI6NjAuMCwiZmFrZV9saW1pdF9yYW5kb21fTGVnaXQgYWEiOjYwLjAsImZha2VfbGltaXRfcmFuZG9tX01vdmluZyI6NjAuMCwiZmFrZV9saW1pdF9yYW5kb21fU2xvd3dhbGsiOjYwLjAsImZha2VfbGltaXRfcmFuZG9tX1N0YW5kaW5nIjo2MC4wLCJmYWtlX2xpbWl0X3JpZ2h0X0FpciI6NjAuMCwiZmFrZV9saW1pdF9yaWdodF9BaXIgZHVjayI6NjAuMCwiZmFrZV9saW1pdF9yaWdodF9Dcm91Y2hpbmcgQ1QiOjYwLjAsImZha2VfbGltaXRfcmlnaHRfQ3JvdWNoaW5nIFQiOjYwLjAsImZha2VfbGltaXRfcmlnaHRfR2xvYmFsIjoxLjAsImZha2VfbGltaXRfcmlnaHRfTGVnaXQgYWEiOjYwLjAsImZha2VfbGltaXRfcmlnaHRfTW92aW5nIjo2MC4wLCJmYWtlX2xpbWl0X3JpZ2h0X1Nsb3d3YWxrIjo2MC4wLCJmYWtlX2xpbWl0X3JpZ2h0X1N0YW5kaW5nIjo2MC4wLCJmYWtlX2xpbWl0X3R5cGVfQWlyIjoiU3RhdGljIiwiZmFrZV9saW1pdF90eXBlX0FpciBkdWNrIjoiU3RhdGljIiwiZmFrZV9saW1pdF90eXBlX0Nyb3VjaGluZyBDVCI6IlN0YXRpYyIsImZha2VfbGltaXRfdHlwZV9Dcm91Y2hpbmcgVCI6IlN0YXRpYyIsImZha2VfbGltaXRfdHlwZV9HbG9iYWwiOiJTdGF0aWMiLCJmYWtlX2xpbWl0X3R5cGVfTGVnaXQgYWEiOiJTdGF0aWMiLCJmYWtlX2xpbWl0X3R5cGVfTW92aW5nIjoiU3RhdGljIiwiZmFrZV9saW1pdF90eXBlX1Nsb3d3YWxrIjoiU3RhdGljIiwiZmFrZV9saW1pdF90eXBlX1N0YW5kaW5nIjoiU3RhdGljIiwiZmFrZV9vcHRpb25zX0FpciI6W10sImZha2Vfb3B0aW9uc19BaXIgZHVjayI6W10sImZha2Vfb3B0aW9uc19Dcm91Y2hpbmcgQ1QiOltdLCJmYWtlX29wdGlvbnNfQ3JvdWNoaW5nIFQiOltdLCJmYWtlX29wdGlvbnNfR2xvYmFsIjpbIkF2b2lkIG92ZXJsYXAiLCJKaXR0ZXIiLCJBbnRpIEJydXRlZm9yY2UiXSwiZmFrZV9vcHRpb25zX0xlZ2l0IGFhIjpbXSwiZmFrZV9vcHRpb25zX01vdmluZyI6W10sImZha2Vfb3B0aW9uc19TbG93d2FsayI6W10sImZha2Vfb3B0aW9uc19TdGFuZGluZyI6W10sImZyZWVzdGFuZGluZ19rZXkiOmZhbHNlLCJmcmVlc3RhbmRpbmdfbW9kZV9BaXIiOiJPZmYiLCJmcmVlc3RhbmRpbmdfbW9kZV9BaXIgZHVjayI6Ik9mZiIsImZyZWVzdGFuZGluZ19tb2RlX0Nyb3VjaGluZyBDVCI6Ik9mZiIsImZyZWVzdGFuZGluZ19tb2RlX0Nyb3VjaGluZyBUIjoiT2ZmIiwiZnJlZXN0YW5kaW5nX21vZGVfR2xvYmFsIjoiT2ZmIiwiZnJlZXN0YW5kaW5nX21vZGVfTGVnaXQgYWEiOiJPZmYiLCJmcmVlc3RhbmRpbmdfbW9kZV9Nb3ZpbmciOiJPZmYiLCJmcmVlc3RhbmRpbmdfbW9kZV9TbG93d2FsayI6Ik9mZiIsImZyZWVzdGFuZGluZ19tb2RlX1N0YW5kaW5nIjoiT2ZmIiwiaGl0Y2hhbmNlX2FpciI6NTAuMCwiaGl0Y2hhbmNlX2Fpcl9lbmFibGUiOmZhbHNlLCJoaXRjaGFuY2VfYWlyX3dlYXBvbnMiOltdLCJoaXRjaGFuY2Vfbm9zY29wZSI6NTAuMCwiaGl0Y2hhbmNlX25vc2NvcGVfZW5hYmxlIjpmYWxzZSwiaGl0Y2hhbmNlX25vc2NvcGVfd2VhcG9ucyI6W10sImhpdG1hcmtlciI6dHJ1ZSwiaGl0bWFya2VyX2RhbWFnZV9jb2xvciI6WzI1NS4wLDI1NS4wLDI1NS4wLDI1NS4wXSwiaGl0bWFya2VyX3BsdXNfY29sb3IiOlsyNTUuMCwyNTUuMCwyNTUuMCwyNTUuMF0sImhpdG1hcmtlcl90eXBlIjpbIisiXSwiaWRlYWx0aWNrIjpmYWxzZSwiaWRlYWx0aWNrX29wdGlvbnMiOltdLCJpbmRpY2F0b3JzX2NvbG9yIjpbMTQyLjAsMTY1LjAsMjI5LjAsMjU1LjBdLCJraWxsc2F5IjpmYWxzZSwibGJ5X21vZGVfQWlyIjoiRGlzYWJsZWQiLCJsYnlfbW9kZV9BaXIgZHVjayI6IkRpc2FibGVkIiwibGJ5X21vZGVfQ3JvdWNoaW5nIENUIjoiRGlzYWJsZWQiLCJsYnlfbW9kZV9Dcm91Y2hpbmcgVCI6IkRpc2FibGVkIiwibGJ5X21vZGVfR2xvYmFsIjoiU3dheSIsImxieV9tb2RlX0xlZ2l0IGFhIjoiRGlzYWJsZWQiLCJsYnlfbW9kZV9Nb3ZpbmciOiJEaXNhYmxlZCIsImxieV9tb2RlX1Nsb3d3YWxrIjoiRGlzYWJsZWQiLCJsYnlfbW9kZV9TdGFuZGluZyI6IkRpc2FibGVkIiwibGVnaXRhYV9hdF90YXJnZXRzIjp0cnVlLCJsZWdpdGFhX2tleSI6ZmFsc2UsImxvZ3MiOnRydWUsIm1hc3NpdmVfZmFrZV9rZXkiOmZhbHNlLCJvbnNob3RfbW9kZV9BaXIiOiJEaXNhYmxlZCIsIm9uc2hvdF9tb2RlX0FpciBkdWNrIjoiRGlzYWJsZWQiLCJvbnNob3RfbW9kZV9Dcm91Y2hpbmcgQ1QiOiJEaXNhYmxlZCIsIm9uc2hvdF9tb2RlX0Nyb3VjaGluZyBUIjoiRGlzYWJsZWQiLCJvbnNob3RfbW9kZV9HbG9iYWwiOiJTd2l0Y2giLCJvbnNob3RfbW9kZV9MZWdpdCBhYSI6IkRpc2FibGVkIiwib25zaG90X21vZGVfTW92aW5nIjoiRGlzYWJsZWQiLCJvbnNob3RfbW9kZV9TbG93d2FsayI6IkRpc2FibGVkIiwib25zaG90X21vZGVfU3RhbmRpbmciOiJEaXNhYmxlZCIsInByZXNldF9lbmFibGVfQWlyIjpmYWxzZSwicHJlc2V0X2VuYWJsZV9BaXIgZHVjayI6ZmFsc2UsInByZXNldF9lbmFibGVfQ3JvdWNoaW5nIENUIjpmYWxzZSwicHJlc2V0X2VuYWJsZV9Dcm91Y2hpbmcgVCI6ZmFsc2UsInByZXNldF9lbmFibGVfR2xvYmFsIjpmYWxzZSwicHJlc2V0X2VuYWJsZV9MZWdpdCBhYSI6ZmFsc2UsInByZXNldF9lbmFibGVfTW92aW5nIjpmYWxzZSwicHJlc2V0X2VuYWJsZV9TbG93d2FsayI6ZmFsc2UsInByZXNldF9lbmFibGVfU3RhbmRpbmciOmZhbHNlLCJyYWluYm93Ijp0cnVlLCJzbG93d2Fsa190eXBlIjoiT2xkIiwic3BlY3RhdG9ycyI6dHJ1ZSwic3RhdGljX3JhZ2RvbGxzIjp0cnVlLCJ0ZWxlcG9ydF9pbmFpciI6ZmFsc2UsInRyYXNoIjpmYWxzZSwidWlfY29sb3IiOlsxNDIuMCwxNjUuMCwyMjkuMCwyNTUuMF0sInVpX2VsZW1lbnRzIjpbIldhdGVybWFyayJdLCJ1aV9zdHlsZSI6IkRlZmF1bHQiLCJ2aWV3bW9kZWxfc2NvcGUiOmZhbHNlLCJ2aXN1YWxfZWxlbWVudHMiOlsiSW5kaWNhdG9ycyIsIlVpIiwiU2tlZXQiLCJPdGhlciJdLCJ3YXJtdXBfYWEiOmZhbHNlLCJ3YXRlcm1hcmtfbmFtZSI6IkNoZWF0Iiwid2F0ZXJtYXJrX25hbWVfcmVmIjoiIiwieWF3X2FkZF9sZWZ0X0FpciI6MC4wLCJ5YXdfYWRkX2xlZnRfQWlyIGR1Y2siOjAuMCwieWF3X2FkZF9sZWZ0X0Nyb3VjaGluZyBDVCI6MC4wLCJ5YXdfYWRkX2xlZnRfQ3JvdWNoaW5nIFQiOjAuMCwieWF3X2FkZF9sZWZ0X0dsb2JhbCI6LTE4LjAsInlhd19hZGRfbGVmdF9MZWdpdCBhYSI6LTE4MC4wLCJ5YXdfYWRkX2xlZnRfTW92aW5nIjowLjAsInlhd19hZGRfbGVmdF9TbG93d2FsayI6MC4wLCJ5YXdfYWRkX2xlZnRfU3RhbmRpbmciOjAuMCwieWF3X2FkZF9yaWdodF9BaXIiOjAuMCwieWF3X2FkZF9yaWdodF9BaXIgZHVjayI6MC4wLCJ5YXdfYWRkX3JpZ2h0X0Nyb3VjaGluZyBDVCI6MC4wLCJ5YXdfYWRkX3JpZ2h0X0Nyb3VjaGluZyBUIjowLjAsInlhd19hZGRfcmlnaHRfR2xvYmFsIjotMjMuMCwieWF3X2FkZF9yaWdodF9MZWdpdCBhYSI6LTE4MC4wLCJ5YXdfYWRkX3JpZ2h0X01vdmluZyI6MC4wLCJ5YXdfYWRkX3JpZ2h0X1Nsb3d3YWxrIjowLjAsInlhd19hZGRfcmlnaHRfU3RhbmRpbmciOjAuMCwieWF3X2FkZF90eXBlX0FpciI6IlN0YXRpYyIsInlhd19hZGRfdHlwZV9BaXIgZHVjayI6IlN0YXRpYyIsInlhd19hZGRfdHlwZV9Dcm91Y2hpbmcgQ1QiOiJTdGF0aWMiLCJ5YXdfYWRkX3R5cGVfQ3JvdWNoaW5nIFQiOiJTdGF0aWMiLCJ5YXdfYWRkX3R5cGVfR2xvYmFsIjoiU3RhdGljIiwieWF3X2FkZF90eXBlX0xlZ2l0IGFhIjoiU3RhdGljIiwieWF3X2FkZF90eXBlX01vdmluZyI6IlN0YXRpYyIsInlhd19hZGRfdHlwZV9TbG93d2FsayI6IlN0YXRpYyIsInlhd19hZGRfdHlwZV9TdGFuZGluZyI6IlN0YXRpYyIsInlhd19tb2RpZmllcl9BaXIiOiJEaXNhYmxlZCIsInlhd19tb2RpZmllcl9BaXIgZHVjayI6IkRpc2FibGVkIiwieWF3X21vZGlmaWVyX0Nyb3VjaGluZyBDVCI6IkRpc2FibGVkIiwieWF3X21vZGlmaWVyX0Nyb3VjaGluZyBUIjoiRGlzYWJsZWQiLCJ5YXdfbW9kaWZpZXJfR2xvYmFsIjoiQ2VudGVyIiwieWF3X21vZGlmaWVyX0xlZ2l0IGFhIjoiRGlzYWJsZWQiLCJ5YXdfbW9kaWZpZXJfTW92aW5nIjoiRGlzYWJsZWQiLCJ5YXdfbW9kaWZpZXJfU2xvd3dhbGsiOiJEaXNhYmxlZCIsInlhd19tb2RpZmllcl9TdGFuZGluZyI6IkRpc2FibGVkIiwieWF3X21vZGlmaWVyX3ZhbHVlX0FpciI6MC4wLCJ5YXdfbW9kaWZpZXJfdmFsdWVfQWlyIGR1Y2siOjAuMCwieWF3X21vZGlmaWVyX3ZhbHVlX0Nyb3VjaGluZyBDVCI6MC4wLCJ5YXdfbW9kaWZpZXJfdmFsdWVfQ3JvdWNoaW5nIFQiOjAuMCwieWF3X21vZGlmaWVyX3ZhbHVlX0dsb2JhbCI6MzAuMCwieWF3X21vZGlmaWVyX3ZhbHVlX0xlZ2l0IGFhIjowLjAsInlhd19tb2RpZmllcl92YWx1ZV9Nb3ZpbmciOjAuMCwieWF3X21vZGlmaWVyX3ZhbHVlX1Nsb3d3YWxrIjowLjAsInlhd19tb2RpZmllcl92YWx1ZV9TdGFuZGluZyI6MC4wfQ==")

groups.main.config_system:button("                      Load default config                       ", function()
    local status, error = pcall(configs.import, default_config)
    if status then
        common.add_notify(script_db.lua_name, "Succesfully loaded default config")
    else
        common.add_notify(script_db.lua_name, "Error while loading default config (" .. error .. ")")
    end
end)



groups.main.config_system:button("                Export config to clipboard                ", function()
    local status, error = pcall(configs.export)
    if status then
        common.add_notify(script_db.lua_name, "Succesfully exported settings to clipboard")
    else
        common.add_notify(script_db.lua_name, "Error while exporting settings to clipboard (" .. error .. ")")
    end
end)

groups.main.config_system:button("             Import config from clipboard             ", function()
    local data = clipboard.get()

    local status, error = pcall(configs.import, data)
    if status then
        common.add_notify(script_db.lua_name, "Succesfully imported settings from clipboard")
    else
        common.add_notify(script_db.lua_name, "Error while importing config (" .. error .. ")")
    end
end)

groups.main.config_system:button("                             Join discord                              ", function() -- button is clicked copy discord link
    js.OpenExternalBrowserURL("https://discord.gg/nR7QwtkqEP")
end)
groups.main.config_system:button("                               JAG0 BETA                              ", function() -- button is clicked copy discord link
    js.OpenExternalBrowserURL("https://en.neverlose.cc/market/item?id=sc3Shk")
end)

menu.gears = {}

UI.push( { element = groups.aimbot.main:selectable("Aimbot elements", { 'Hitchances', "Other" }), index = 'aimbot_elements', flags = '' } )

UI.push( { element = groups.aimbot.hitchances:switch("Air"), index = 'hitchance_air_enable', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end
} } )

menu.gears.air_hc = UI.get_element('hitchance_air_enable'):create()

UI.push( { element = menu.gears.air_hc:slider("Hitchance\nair", 0, 100, 50), index = 'hitchance_air', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end,
    function() return UI.get('hitchance_air_enable') end
} } )

UI.push( { element = menu.gears.air_hc:selectable("Weapons\nair", { 'Scout', 'Revolver', 'Other' }), index = 'hitchance_air_weapons', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end,
    function() return UI.get('hitchance_air_enable') end
} } )

UI.push( { element = groups.aimbot.hitchances:switch("No scope"), index = 'hitchance_noscope_enable', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end
} } )

menu.gears.noscope_hc = UI.get_element('hitchance_noscope_enable'):create()

UI.push( { element = menu.gears.noscope_hc:slider("Hitchance\nnoscope", 0, 100, 50), index = 'hitchance_noscope', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end,
    function() return UI.get('hitchance_noscope_enable') end
} } )

UI.push( { element = menu.gears.noscope_hc:selectable("Weapons\nnoscope", { 'Auto', 'Scout', 'Other' }), index = 'hitchance_noscope_weapons', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end,
    function() return UI.get('hitchance_noscope_enable') end
} } )

UI.push( { element = groups.aimbot.other:selectable("Doubletap options", { "Faster doubletap", "Adaptive recharge", "Predict dt damage" }), index = 'doubletap_options', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', "Other") end
} } )
UI.push( { element = groups.aimbot.other:switch("Ideal tick"), index = 'idealtick', flags = '', conditions = {
} } )

UI.get_element('idealtick'):set_tooltip("it Enables your doubletap, autopeek, freestand, safepoint head and instant recharge using one bind")

UI.push( { element = groups.aimbot.other:selectable("Ideal tick options", {
   "freestand", "doubletap", "safepoint head", "instant recharge" }), index = 'idealtick_options', flags = '', conditions = {
} } )

UI.push( { element = groups.anti_aim.main:switch("Enable antiaim settings"), index = 'antiaim_settings', flags = '', conditions = {
} } )

UI.get_element('antiaim_settings'):set_tooltip("Enables aimbot settings")

UI.push( { element = groups.anti_aim.main:combo("Body yaw type", { "Smart", "Jitter", "Avoidance", "Custom" }), index = 'antiaim_presets', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

-- UI.push( { element = groups.anti_aim.main:combo("Yaw base", { "Forward", "Backward", "Right", "Left", "At target", "Freestanding" }), index = 'yaw_base', flags = '', conditions = {
--     function() return UI.get('antiaim_settings') end
-- } } )

UI.push( { element = groups.anti_aim.main:combo("Active condition", global_vars.plr_conditions), index = 'condition_selector', flags = '-', conditions = {
    function() return UI.get('antiaim_settings') end,
    function() return UI.get('antiaim_presets') == "Custom" end
} } )

UI.push( { element = groups.anti_aim.main:combo("Slow walk type", { "Old", "New", "Hybrid" }), index = 'slowwalk_type', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end,
    function() return UI.get('antiaim_presets') == "Smart" end
} } )

UI.push( { element = groups.anti_aim.main:switch("Freestanding"), index = 'freestanding_key', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

UI.push( { element = groups.anti_aim.main:switch("Disable Freestanding In Air"), index = 'freestanding_air', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

UI.push( { element = groups.anti_aim.main:switch("Massive Fake Exploit"), index = 'massive_fake_key', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

-- UI.push( { element = groups.anti_aim.main:switch("Antibackstab"), index = 'antibackstab', flags = '', conditions = {
--     function() return UI.get('antiaim_settings') end
-- } } )

UI.push( { element = groups.anti_aim.main:switch("Teleport in air"), index = 'teleport_inair', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

-- UI.push( { element = groups.anti_aim.main:switch("Break extrapolation"), index = 'break_extrapolation', flags = '', conditions = {
--     function() return UI.get('antiaim_settings') end
-- } } )

-- UI.get_element('break_extrapolation'):set_tooltip("Attempts to break enemies extrapolation/dt prediction")

UI.push( { element = groups.anti_aim.main:switch("Experimental anti bruteforce"), index = 'experimental_antibruteforce', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

UI.push( { element = groups.anti_aim.main:switch("Warmup anti-aim"), index = 'warmup_aa', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

UI.push( { element = groups.anti_aim.main:switch("Legit desync (bind)"), index = 'legitaa_key', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

UI.push( { element = groups.anti_aim.main:switch("Legit desync at-targets"), index = 'legitaa_at_targets', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

--UI.push( { element = groups.anti_aim.main:combo("Manual Side", { "None", "Left", "Right" }), index = 'manual_side', flags = '', conditions = {
--   function() return UI.get('antiaim_settings') end
--} } )

for i = 1, #global_vars.plr_conditions do
    local condition = global_vars.plr_conditions[i]

    local base_argument = function() return ( UI.get('antiaim_presets') == "Custom" and condition == UI.get('condition_selector') ) and UI.get('antiaim_settings') end

    UI.push( { element = groups.anti_aim.builder:switch("Enable condition"), index = 'preset_enable_' .. condition, flags = '', conditions = {
        base_argument,
        function() return i ~= 1 end
    } } )

    base_argument = function() return ( UI.get('antiaim_presets') == "Custom" and condition == UI.get('condition_selector') ) and UI.get('antiaim_settings') and (i == 1 and true or UI.get('preset_enable_' .. condition)) end

    UI.push( { element = groups.anti_aim.builder:combo("Yaw Add Type", { "Static", "Jitter", "Random" }), index = 'yaw_add_type_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Yaw Add Left", -180, 180, 0), index = 'yaw_add_left_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Yaw Add Right", -180, 180, 0), index = 'yaw_add_right_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:combo("Yaw Modifier", { "Disabled", "Center", "Offset", "Random", "Spin" }), index = 'yaw_modifier_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Modifier Degree", -180, 180, 0), index = 'yaw_modifier_value_' .. condition, flags = '', conditions = {
        base_argument,
        function() return UI.get('yaw_modifier_' .. condition) ~= 'Disabled' end
    } } )

    UI.push( { element = groups.anti_aim.builder:combo("Fake Limit Type", { "Static", "Jitter", "Random" }), index = 'fake_limit_type_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Fake Limit Left", 0, 60, 60), index = 'fake_limit_left_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Fake Limit Right", 0, 60, 60), index = 'fake_limit_right_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Jitter Value", 0, 60, 60), index = 'fake_limit_jitter_' .. condition, flags = '', conditions = {
        base_argument,
        function() return UI.get('fake_limit_type_' .. condition) == 'Jitter' end
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Random Min Value", 0, 60, 60), index = 'fake_limit_random_' .. condition, flags = '', conditions = {
        base_argument,
        function() return UI.get('fake_limit_type_' .. condition) == "Random" end
    } } )

    UI.push( { element = groups.anti_aim.builder:selectable("Fake Options", { "Avoid overlap", "Jitter", "Randomize Jitter", "Anti Bruteforce" }), index = 'fake_options_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:combo("LBY Mode", { "Disabled", "Opposite", "Sway" }), index = 'lby_mode_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:combo("Freestanding Desync", { "Off", "Peek Fake", "Peek Real" }), index = 'freestanding_mode_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:combo("Desync On Shot", { "Disabled", "Opposite", "Freestanding", "Switch" }), index = 'onshot_mode_' .. condition, flags = '', conditions = {
        base_argument
    } } )
end

do
    UI.get_element('yaw_add_right_Legit aa'):set(-180)
    UI.get_element('yaw_add_left_Legit aa'):set(-180)
end

local guwwno = render.load_image(network.get('https://i.imgur.com/H0nvv79.gif'), vector(150, 50))
groups.main.image:texture(guwwno, vector(255, 248))
groups.main.nothing:label("")

UI.push( { element = groups.visuals.main:selectable("Visual elements", {
    "Indicators", 'Ui', 'Custom scope', 'Skeet', 'Other' }), index = 'visual_elements', flags = ''
} )

UI.push( { element = groups.visuals.crosshair:combo("Indicators", {
    'Disabled', "Idealyaw (soon)", "Jagoyaw v3 (soon)", "Jagoyaw v2", "Axis", "Prediction v2 (soon)", "Acatel","bluhgang", "Jagoyaw v4 (soon)", "Drainyaw (soon)"}), index = 'crosshair_style', flags = '', conditions = {
    function() return UI.contains('visual_elements', "Indicators") end
} } )

UI.push( { element = groups.visuals.crosshair:color_picker("Indicators color", color(142, 165, 229,255)), index = 'indicators_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Indicators') end
} } )

UI.push( { element = groups.visuals.crosshair:combo("Arrows", { "Disabled", "Team skeet", "Jagoyaw"}), index = 'arrows_style', flags = '', conditions = {
    function() return UI.contains('visual_elements', "Indicators") end
} } )

UI.push( { element = groups.visuals.crosshair:color_picker("Arrows color", color(142, 165, 229,255)), index = 'arrows_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Indicators') end
} } )

UI.push( { element = groups.visuals.ui:selectable("Ui elements", { 'Watermark', 'Keybinds', 'Spectators' }), index = 'ui_elements', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end
} } )

UI.push( { element = groups.visuals.ui:combo("Ui style", { "Default", "Glow (soon)" }), index = 'ui_style', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end
} } )

UI.push( { element = groups.visuals.ui:combo("Watermark name", { "Cheat", "Custom" }), index = 'watermark_name', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end,
    function() return UI.contains('ui_elements', 'Watermark') end
} } )

UI.push( { element = groups.visuals.ui:input('name'), index = 'watermark_name_ref', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end,
    function() return UI.contains('ui_elements', 'Watermark') end,
    function() return UI.get('watermark_name') == 'Custom' end
} } )

UI.push( { element = groups.visuals.ui:combo("Avatars side", { 'Left', 'Right' }), index = 'avatar_side', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end,
    function() return UI.contains('ui_elements', 'Spectators') end
} } )

UI.push( { element = groups.visuals.ui:color_picker("Ui color", color(142, 165, 229,255)), index = 'ui_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end
} } )

UI.push( { element = groups.visuals.custom_scope:slider("Scope line length", 0, 500, 10), index = 'custom_scope_lenght', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Custom scope') end
} } )

UI.push( { element = groups.visuals.custom_scope:slider("Scope line offset", 0, 500, 70), index = 'custom_scope_offset', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Custom scope') end
} } )

UI.push( { element = groups.visuals.custom_scope:color_picker("Color", color(142, 165, 229,255)), index = 'custom_scope_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Custom scope') end
} } )

UI.push( { element = groups.visuals.custom_scope:switch("Scope inaccuracy"), index = 'custom_scope_inaccuracy', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Custom scope') end
} } )

UI.push( { element = groups.visuals.custom_scope:switch("Viewmodel in scope"), index = 'viewmodel_scope', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Custom scope') end
} } )

UI.push( { element = groups.visuals.other:switch("Static ragdolls"), index = 'static_ragdolls', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Other') end
} } )

UI.get_element('static_ragdolls'):set_tooltip("Makes it, so ragdolls stay static after players die")

UI.push( { element = groups.visuals.other:switch("Hit markers"), index = 'hitmarker', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Other') end
} } )

UI.push( { element = groups.visuals.other:selectable("Hitmarkers type",  { "+", "damage" }), index = 'hitmarker_type', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Other') end,
    function() return UI.get('hitmarker') end
} } )

UI.push( { element = groups.visuals.other:color_picker("Hitmarker color", color(255, 255, 255, 255) ), index = 'hitmarker_plus_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Other') end,
    function() return UI.get('hitmarker') end
} } )

UI.push( { element = groups.visuals.other:color_picker("Damage hitmarker color", color(255, 255, 255, 255) ), index = 'hitmarker_damage_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Other') end
} } )

UI.push( { element = groups.visuals.logs:switch("Event logs"), index = 'logs', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

UI.push( { element = groups.visuals.logs:switch("Rainbow Bar"), index = 'rainbow', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

UI.push( { element = groups.visuals.logs:switch("Trash Talk"), index = 'trash', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

UI.push( { element = groups.visuals.logs:switch("Spectators"), index = 'spectators', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

UI.push( { element = groups.visuals.logs:switch("Debug Info"), index = 'debug_info', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

UI.push( { element = groups.visuals.logs:switch("Left Hand Knife"), index = 'left_hand', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

-- UI.push( { element = groups.visuals.logs:selectable("Animation Breaker",{ 'Ground', 'Air', 'Zero Pitch on Land' }), index = 'anim_break', flags = '', conditions = {
--     function() return UI.contains('visual_elements', 'Skeet') end
-- } } )

UI.push( { element = groups.visuals.main:switch("Clantag"), index = 'clantag', flags = '', conditions = {
} } )

UI.get_element('clantag'):set_tooltip("synced clantag used to represent the strongest lua script on neverlose forums!")

UI.push( { element = groups.visuals.main:switch("Kill say"), index = 'killsay', flags = '', conditions = {
} } )

helpers.dragging_fn = function(name, base_x, base_y)
    return (function()
        local a = {}
        local b, c, f, g, h, i, k, l, m, n, o
        local d, j = {}, {}
        local p = {__index = {drag = function(self, ...)
                    local q, r = self:get()
                    local s, t = a.drag(q, r, ...)
                    if q ~= s or r ~= t then
                        self:set(s, t)
                    end
                    return s, t
                end, set = function(self, q, r)
                    local j = render.screen_size()
                    self.x_reference:set(q / j.x * self.res)
                    self.y_reference:set(r / j.y * self.res)
                end, get = function(self)
                    local j = render.screen_size()
                    return self.x_reference:get() / self.res * j.x, self.y_reference:get() / self.res * j.y
                end}}
        function a.new(u, v, w, x)
            x = x or 10000
            local j = render.screen_size()
            local y = groups.main.info:slider(u .. ' window position', 0, x, v / j.x * x)
            local z = groups.main.info:slider(u .. ' window position y', 0, x, w / j.y * x)
            y:set_visible(false)
            z:set_visible(false)
            return setmetatable({name = u, x_reference = y, y_reference = z, res = x}, p)
        end
        function a.drag(q, r, A, B, C, D, E)
            if globals.framecount ~= b then
                c = ui.get_alpha() > 0
                f, g = d.x, d.y
                d = ui.get_mouse_position()
                i = h
                h = common.is_button_down(0x1) == true
                m = l
                l = {}
                o = n
                n = false
                j = render.screen_size()
            end
            if c and i ~= nil then
                if (not i or o) and h and f > q and g > r and f < q + A and g < r + B then
                    n = true
                    q, r = q + d.x - f, r + d.y - g
                    if not D then
                        q = math.max(0, math.min(j.x - A, q))
                        r = math.max(0, math.min(j.y - B, r))
                    end
                end
            end
            table.insert(l, {q, r, A, B})
            return q, r, A, B
        end
        return a
    end)().new(name, base_x, base_y)
end

local handle_aa = {}

handle_aa.vars = {
    player_state = 1,
    player_condition = 'global',
    second_condition = 'Normal',
    antiaim_state = { 'global', 'Normal' },
    bestenemy = 0,
    best_value = false,
    desync_value = 0
}

handle_aa.player_state = function()
    local localplayer = entity.get_local_player()
    if localplayer == nil then return end
    local team = localplayer.m_iTeamNum
    local onground = helpers.on_ground( localplayer ) and not common.is_button_down(0x20)
    local legit_aa = UI.get('legitaa_key')
    local velocity = helpers.get_velocity( localplayer )
    local crouched = helpers.is_crouching( localplayer ) and onground
    local flags = localplayer.m_fFlags --263 crouch, 257 on ground, 256 in air
    local slowwalking = ref.slowwalk:get() and onground and velocity > 2 and not crouched
    local inair_crouch = helpers.in_air( localplayer ) and not onground and flags == 262
    local inair = helpers.in_air( localplayer ) and not onground
    local fakeducking = ref.fakeduck:get() and onground

    if inair_crouch then
        handle_aa.vars.player_state = 7
    elseif inair then
        handle_aa.vars.player_state = 8
    end
    if onground and velocity > 2 and flags ~= 256 and flags ~= 263 and not fakeducking then
        handle_aa.vars.player_state = 3
    end
    if onground and velocity < 2 and flags ~= 256 and flags ~= 263 and not fakeducking then
        handle_aa.vars.player_state = 2
    end
    if ( team == 3 and crouched ) or ( team == 3 and fakeducking ) then
        handle_aa.vars.player_state = 5
    end
    if ( team == 2 and crouched ) or ( team == 2 and fakeducking ) then
        handle_aa.vars.player_state = 4
    end
    if slowwalking and not fakeducking then
        handle_aa.vars.player_state = 6
    end
    if legit_aa then
        handle_aa.vars.player_state = 9
    end

    handle_aa.vars.player_condition = global_vars.plr_conditions[handle_aa.vars.player_state]

    handle_aa.vars.antiaim_state = { handle_aa.vars.player_condition, handle_aa.vars.second_condition }
end

handle_aa.get_best_side = function( fsmode )
    local localplayer = entity.get_local_player()
    if not localplayer then return end

    local eye_pos = localplayer:get_eye_position()

    local enemies = entity.get_players(true)

    handle_aa.vars.bestenemy = helpers.get_nearest_enemy(localplayer, enemies)

    local enemy = handle_aa.vars.bestenemy ~= nil and entity.get(handle_aa.vars.bestenemy) or nil

    if handle_aa.vars.bestenemy ~= nil and handle_aa.vars.bestenemy ~= 0 and enemy:is_alive() and fsmode ~= nil then
        local e_x, e_y, e_z = enemy:get_hitbox_position(0).x, enemy:get_hitbox_position(0).y, enemy:get_hitbox_position(0).z

        local yaw = helpers.calc_angle(eye_pos.x, eye_pos.y, e_x, e_y)
        local rdir_x, rdir_y, rdir_z = helpers.angle_vector(0, (yaw + 90))
        local rend_x = eye_pos.x + rdir_x * 10
        local rend_y = eye_pos.y + rdir_y * 10

        local ldir_x, ldir_y, ldir_z = helpers.angle_vector(0, (yaw - 90))
        local lend_x = eye_pos.x + ldir_x * 10
        local lend_y = eye_pos.y + ldir_y * 10

        local r2dir_x, r2dir_y, r2dir_z = helpers.angle_vector(0, (yaw + 90))
        local r2end_x = eye_pos.x + r2dir_x * 100
        local r2end_y = eye_pos.y + r2dir_y * 100

        local l2dir_x, l2dir_y, l2dir_z = helpers.angle_vector(0, (yaw - 90))
        local l2end_x = eye_pos.x + l2dir_x * 100
        local l2end_y = eye_pos.y + l2dir_y * 100

        local ldamage = helpers.get_damage(localplayer, enemy, rend_x, rend_y, eye_pos.z)
        local rdamage = helpers.get_damage(localplayer, enemy, lend_x, lend_y, eye_pos.z)

        local l2damage = helpers.get_damage(localplayer, enemy, r2end_x, r2end_y, eye_pos.z)
        local r2damage = helpers.get_damage(localplayer, enemy, l2end_x, l2end_y, eye_pos.z)

        if ( fsmode == 'Freestanding' ) or ( fsmode == 'Reversed Freestanding' ) then
            if l2damage > r2damage or ldamage > rdamage or l2damage > ldamage then
                handle_aa.vars.best_value = fsmode == 'Freestanding' and false or true
            elseif r2damage > l2damage or rdamage > ldamage or r2damage > rdamage then
                handle_aa.vars.best_value = fsmode == 'Freestanding' and true or false
            end
        end
    else
        handle_aa.vars.best_value = true
    end

    return handle_aa.vars.best_value
end

handle_aa.legitaa = {}

handle_aa.legitaa.vars = {
    classnames = {
        'CWorld',
        'CCSPlayer',
        'CFuncBrush'
    },
    on_bombsite = false
}

handle_aa.legitaa.check_bombsite = function(e, event_name)
    local localplayer = entity.get_local_player()
    if not localplayer then return end

    local user_id = entity.get(e.userid, true)

    if user_id == localplayer then
        if event_name == "enter_bombzone" then
            handle_aa.legitaa.vars.on_bombsite = true
        end

        if event_name == "exit_bombzone" then
            handle_aa.legitaa.vars.on_bombsite = false
        end
    end
end

helpers.entity_has_c4 = function(ent)
    local bomb = entity.get_entities('CC4')[1]
    return bomb ~= nil and bomb.m_hOwnerEntity == ent
end
handle_aa.legitaa.handle = function(e)
    local plocal = entity.get_local_player()
    if not plocal then return end
    local distance = 100
    local bomb = entity.get_entities("CPlantedC4")[1]

    local bomb_pos = bomb ~= nil and bomb.m_vecOrigin or { x = nil }

    if bomb_pos.x ~= nil then
        local player_pos = plocal.m_vecOrigin
        distance = player_pos:dist(bomb_pos)
    end

    local team_num = plocal.m_iTeamNum
    local defusing = team_num == 3 and distance < 70

    local on_bombsite = plocal.m_bInBombZone

    local has_bomb = helpers.entity_has_c4(plocal) == 49

    local eye_pos = plocal:get_eye_position()
    local viewangles = render.camera_angles()

    local sin_pitch = math.sin(math.rad(viewangles.x))
    local cos_pitch = math.cos(math.rad(viewangles.x))
    local sin_yaw = math.sin(math.rad(viewangles.y))
    local cos_yaw = math.cos(math.rad(viewangles.y))

    local dir_vec = { cos_pitch * cos_yaw, cos_pitch * sin_yaw, -sin_pitch }

    local traced = utils.trace_line(eye_pos, vector(eye_pos.x + (dir_vec[1] * 8192), eye_pos.y + (dir_vec[2] * 8192), eye_pos.z + (dir_vec[3] * 8192)), plocal, 0xFFFFFFFF)

    local using = true

    if traced ~= nil then
        for i=0, #handle_aa.legitaa.vars.classnames do
            if traced.entity ~= nil and traced.entity:get_classname() == handle_aa.legitaa.vars.classnames[i] then
                using = false
            end
        end
    end

    local near_door = false

    -- if plocal:is_alive() then
    --     for yaw = 18, 360, 18 do
    --         yaw = helpers.normalize_yaw(yaw)

    --         local my_eye_position = plocal:get_eye_position()
    --         local final_angle = vector(0, yaw, 0)

    --         local final_point = my_eye_position + Cheat.AngleToForward(final_angle) * 0x60
    --         local trace_info = utils.trace_line(my_eye_position, final_point, plocal, 0x200400B)
    --         local hit_entity = trace_info.entity

    --         if hit_entity ~= nil then
    --             if hit_entity:get_classname() == "CPropDoorRotating" then
    --                 near_door = true
    --             end
    --         end
    --     end
    -- end

    if ((on_bombsite and not defusing) or (not using and not defusing)) and not near_door then
        e.in_use = 0
    end
end

handle_aa.set_antiaim = function(e)
    local localplayer = entity.get_local_player()
    if not localplayer then return end
    local onGround = helpers.on_ground(localplayer)
    local ticks = cvar.sv_maxusrcmdprocessticks;
    -- local flags = localplayer.m_fFlags
    -- local inverter_state = rage.antiaim:get_rotation(true) < 0
    -- local lp_bodyyaw = localplayer.m_flPoseParameter[11] * 120 - 60

    local lp_bodyyaw = localplayer.m_flPoseParameter[11] * 120 - 60

    local handle_value_offset = function(left_value, right_value)
        if e.choked_commands == 0 then
            handle_aa.vars.desync_value = lp_bodyyaw
        end
        return handle_aa.vars.desync_value > 0 and left_value or right_value
    end

    local set_values = function(args)
        local mode = args.mode
        local table = args.settings
        if mode == 'hidden' then
            ref.yaw.offset:override(table[1])
            ref.yaw_modifier.mode:override(table[2])
            ref.yaw_modifier.offset:override(table[3])
            ref.body_yaw.left_limit:override(table[4])
            ref.body_yaw.right_limit:override(table[5])
            ref.body_yaw.fake_options:override(table[6])
            ref.body_yaw.desync_freestand:override(table[7])
            ref.body_yaw.inverter:override(table[8])
            ref.body_yaw.lby_mode:override(table[9])
        else
            ref.yaw.offset:set(table[1])
            ref.yaw_modifier.mode:set(table[2])
            ref.yaw_modifier.offset:set(table[3])
            ref.body_yaw.left_limit:set(table[4])
            ref.body_yaw.right_limit:set(table[5])
            ref.body_yaw.fake_options:set(table[6])
            ref.body_yaw.desync_freestand:set(table[7])
            ref.body_yaw.inverter:set(table[8])
            ref.body_yaw.lby_mode:set(table[9])
        end
    end

    local legitaa_on = handle_aa.vars.antiaim_state[1] == 'Legit aa'

    if legitaa_on then
        handle_aa.legitaa.handle(e)
    end

    local yaw_value = 'Backward'
    local yaw_base = 'At Target'
    local pitch = 'Down'

    if legitaa_on then
        if not UI.get('legitaa_at_targets') then
            yaw_base = 'Local View'
        end
        pitch = 'Disabled'
    end

    if (UI.get('freestanding_key') or (UI.get('idealtick') and UI.contains('idealtick_options', 0))) and not legitaa_on then
        if (UI.get("freestanding_air")) then
        ref.freestanding.switch:set(not helpers.in_air( localplayer ))
        else
        ref.freestanding.switch:set(true)
        end
    else
        ref.freestanding.switch:set(false)
    end

    ref.yaw.base:set(yaw_base)
    ref.pitch:set(pitch)
    ref.yaw.mode:set(yaw_value)

    if UI.get('massive_fake_key') and not (ref.doubletap.switch:get() or ref.hide_shots.switch:get()) and not legitaa_on then
        handle_aa.vars.second_condition = 'Massive fake'
        local side = handle_aa.get_best_side("Freestanding")
        ref.body_yaw.switch:set(false)
        ref.fakelag.switch:set(false)
        e.send_packet = false;
    
        ticks:int(17)

        ref.yaw.offset:override(nil)

        if e.choked_commands > 1 and e.choked_commands < ticks:int() then
            ref.yaw.offset:override(side and 90 or -90)
        end

        set_values({ settings = {
            side and -15 or 15, 'Disabled', 0, 59, 59, {}, 'Off', false, 'Disabled'
        }})
    elseif UI.get('warmup_aa') and entity.get_game_rules().m_bWarmupPeriod and not legitaa_on then
        set_values({ settings = {
            0, 'Disabled', 0, 59, 59, {}, 'Off', false, 'Disabled'
        }})
    else
        handle_aa.vars.second_condition = 'Normal'
        ticks:int(16)
        if UI.get('antiaim_presets') == 'Custom' then
            ref.body_yaw.inverter:set(false)
            local condition = UI.get('preset_enable_' .. handle_aa.vars.antiaim_state[1]) and global_vars.plr_conditions[handle_aa.vars.player_state] or global_vars.plr_conditions[1]

            local yaw = handle_value_offset(UI.get('yaw_add_left_' .. condition), UI.get('yaw_add_right_' .. condition))
            local fakelimit_right = UI.get('fake_limit_right_' .. condition)
            local fakelimit_left = UI.get('fake_limit_left_' .. condition)

            if UI.get('yaw_add_type_' .. condition) == 'Jitter' then
                yaw = utils.random_int(0, 1) == 1 and UI.get('yaw_add_right_' .. condition) or UI.get('yaw_add_left_' .. condition)
            elseif UI.get('yaw_add_type_' .. condition) == 'Random' then
                yaw = utils.random_int(UI.get('yaw_add_right_' .. condition), UI.get('yaw_add_left_' .. condition))
            end

            if UI.get('fake_limit_type_' .. condition) == 'Jitter' then
                if utils.random_int(0, 1) == 1 then
                    fakelimit_right = UI.get('fake_limit_right_' .. condition)
                    fakelimit_left = UI.get('fake_limit_left_' .. condition)
                else
                    fakelimit_right = UI.get('fake_limit_jitter_' .. condition)
                    fakelimit_left = UI.get('fake_limit_jitter_' .. condition)
                end
            elseif UI.get('fake_limit_type_' .. condition) == 'Random' then
                fakelimit_right = utils.random_int(UI.get('fake_limit_random_' .. condition), UI.get('fake_limit_right_' .. condition))
                fakelimit_left = utils.random_int(UI.get('fake_limit_random_' .. condition), UI.get('fake_limit_left_' .. condition))
            end

            ref.body_yaw.on_shot_desync:set(UI.get('onshot_mode_' .. condition))

            set_values({ settings = {
                yaw,
                UI.get('yaw_modifier_' .. condition),
                UI.get('yaw_modifier_value_' .. condition),
                fakelimit_left, fakelimit_right,
                UI.get('fake_options_' .. condition),
                UI.get('freestanding_mode_' .. condition),
                false,
                UI.get('lby_mode_' .. condition)
            }})
        else
            local anti_aim_values = {
                [ 'Standing' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Moving' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Crouching T' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Crouching CT' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Slowwalk' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Air duck' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Air' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Legit aa' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Global' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                }
            }
            if not legitaa_on then
                local exp_antibruteforce = UI.get('experimental_antibruteforce')
                if UI.get('antiaim_presets') == 'Smart' then
                    local random = utils.random_int(0, 1)
                    if UI.get('slowwalk_type') == 0 then
                        anti_aim_values[ 'Slowwalk' ] = {
                            handle_value_offset(-10, 10), 'Disabled', 0, 18, 18, exp_antibruteforce and { 'Jitter', 'Anti Bruteforce' } or 'Jitter', 'Peek Fake', false, 'Disabled'
                        }
                    elseif UI.get('slowwalk_type') == 1 then
                        local random2 = utils.random_int(3, 33)
                        anti_aim_values[ 'Slowwalk' ] = {
                            handle_value_offset(-10, 10), 'Disabled', 0, random2, random2, exp_antibruteforce and { 'Jitter', 'Anti Bruteforce' } or 'Jitter', 'Peek Fake', false, 'Disabled'
                        }
                    elseif UI.get('slowwalk_type') == 2 then
                        anti_aim_values[ 'Slowwalk' ] = {
                            handle_value_offset(-33, 33), 'Center', 6, 58, 58, 'Randomize Jitter', 'Off', false, 'Disabled'
                        }
                    end
                    anti_aim_values[ 'Standing' ] = {
                        handle_value_offset(-7, 7), 'Disabled', 0, random == 1 and 48 or 18, random == 1 and 48 or 18, { 'Jitter', 'Anti Bruteforce' }, 'Peek Fake', false, 'Disabled'
                    }
                    anti_aim_values[ 'Moving' ] = {
                        handle_value_offset(-7, 7), 'Disabled', 0, random == 1 and 48 or 18, random == 1 and 48 or 18, { 'Jitter', 'Anti Bruteforce' }, 'Peek Fake', false, 'Disabled'
                    }
                    anti_aim_values[ 'Crouching T' ] = {
                        0, 'Disabled', 0, 59, 59, exp_antibruteforce and { 'Jitter', 'Anti Bruteforce' } or 'Jitter', 'Off', true, 'Disabled'
                    }
                    anti_aim_values[ 'Crouching CT' ] = {
                        0, 'Disabled', 0, 59, 59, exp_antibruteforce and { 'Jitter', 'Anti Bruteforce' } or 'Jitter', 'Off', true, 'Disabled'
                    }
                    anti_aim_values[ 'Air duck' ] = {
                        handle_value_offset(-12, 7), 'Disabled', 0, random == 1 and 60 or 18, random == 1 and 60 or 18, 'Anti Bruteforce', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Air' ] = {
                        handle_value_offset(-12, 7), 'Disabled', 0, random == 1 and 60 or 18, random == 1 and 60 or 18, 'Anti Bruteforce', 'Off', false, 'Disabled'
                    }
                elseif UI.get('antiaim_presets') == 'Jitter' then -- moving  JITTERNOWYw
                    anti_aim_values[ 'Standing' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Moving' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Crouching T' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Crouching CT' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Slowwalk' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Air duck' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Air' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                elseif UI.get('antiaim_presets') == 'Avoidance' then -- jitter
                    anti_aim_values[ 'Standing' ] = {
                        handle_value_offset(-6, 7), 'Center', -88, 60, 60, 'Jitter', desync_freestand, false, 'Disabled'
                    }
                    anti_aim_values[ 'Moving' ] = {
                        handle_value_offset(-6, 7), 'Center', -88, 60, 60, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                    anti_aim_values[ 'Crouching T' ] = {
                        handle_value_offset(-20, 20), 'Center', -38, 59, 59, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                    anti_aim_values[ 'Crouching CT' ] = {
                        handle_value_offset(-20, 20), 'Center', -30, 59, 59, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                    anti_aim_values[ 'Slowwalk' ] = {
                        handle_value_offset(-33, 33), 'Center', -8, 59, 59, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                    anti_aim_values[ 'Air duck' ] = {
                        handle_value_offset(-6, 7), 'Center', -88, 60, 60, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                    anti_aim_values[ 'Air' ] = {
                        handle_value_offset(-6, 7), 'Center', -88, 60, 60, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                end
            else
                anti_aim_values[ 'Legit aa' ] = {
                    -180, 'Disabled', 0, 60, 60, "Off", 'Peek Fake', false, 'Opposite'
                }
            end
            set_values( { settings = anti_aim_values[handle_aa.vars.antiaim_state[1]], mode = 'hidden' } )
        end
    end

    if handle_aa.vars.antiaim_state[2] ~= 'Massive fake' then
        ref.body_yaw.switch:set(true)
        if UI.get('idealtick') then
            ref.fakelag.switch:set(false)
        else
            ref.fakelag.switch:set(true)
        end
    end
end

local visuals = {}

visuals.indicators = {}

visuals.indicators.vars = {
    dt_color = 0,
    dt_color2 = 0,
    scope_adder = 0,
    values = helpers.gram_create(0, 15),
    -- other = {
    --     Colors = {
    --         Transperent = color(255, 255, 255, 0.25*255),
    --         Black = color(0.05*255, 0.05*255, 0.05*255, 0.5*255),
    --         White = color(255, 255, 255, 255),
    --         Orange = color(255, 0.53*255, 0.26*255, 255)
    --     },
    --     Stuff = {
    --         Indicators = {
    --             Animations = {DT = {Value = 0.0}},
    --             State = {
    --                 {Preset = "/STANDING/", Colored = false},
    --                 {Preset = "/RUNNING/", Colored = false},
    --                 {Preset = "/CROUCH/", Colored = false},
    --                 {Preset = "/CROUCH/", Colored = false},
    --                 {Preset = "+TANKAA+", Colored = true},
    --                 {Preset = "/AEROBIC/", Colored = false},
    --                 {Preset = "/AEROBIC/", Colored = false},
    --                 {Preset = "/E-PEEK/", Colored = false},
    --                 {Preset = "/DORMANT/", Colored = false},
    --             }
    --         }
    --     },
    --     AntiBruteforce = {Players = {}, Time = nil},


    --     CanFire = function()
        
    --         local GetCurtime = function(a8)
    --             return globals.curtime - a8 * globals.tickinterval
    --         end
    --         local a9 = entity.get_local_player()
    --         local aa = a9:GetActiveWeapon()
    --         if not a9 or not aa then
    --             return false
    --         end
    --         if GetCurtime(-16) < a9:GetProp("m_flNextAttack") then
    --             return false
    --         end
    --         if GetCurtime(0) < aa:GetProp("m_flNextPrimaryAttack") then
    --             return false
    --         end
    --         return true
    --     end,

    --     Helpers = {ColorCopy = function(self, Color)
    --             return color(Color.r, Color.g, Color.b, Color.a)
    --         end, CalcMultiTextSize = function(self, ae, ...)
    --             local ao = vector(0.0, 0.0)
    --             local q = {...}
    --             local ap = {}
    --             if q[1] then
    --                 table.insert(ap, q[1])
    --             end
    --             if q[2] then
    --                 table.insert(ap, q[2])
    --             end
    --             for ac, aq in pairs(ae) do
    --                 local ar = render.measure_text(aq.Text, unpack(ap))
    --                 render.measure_text(aq.Text, unpack(ap))
    --                 ao.x = ao.x + ar.x
    --                 if ar.y > ao.y then
    --                     ao.y = ar.y
    --                 end
    --             end
    --             return ao
    --         end, MultiText = function(self, ae, ao, ...)
    --             local q = {...}
    --             local ap = {}
    --             if q[1] then
    --                 table.insert(ap, q[1])
    --             end
    --             if q[2] and type(q[2]) ~= "boolean" then
    --                 table.insert(ap, q[2])
    --             end
    --             for ac, aq in pairs(ae) do
    --                 render.text(aq.Text, ao, aq.Color, ...)
    --                 ao.x = ao.x + render.measure_text(aq.Text, unpack(ap)).x
    --             end
    --         end
    --     },
    --     v = {normalize_yaw = function(self, w)
    --         while w > 180.0 do
    --             w = w - 360.0
    --         end
    --         while w < -180.0 do
    --             w = w + 360.0
    --         end
    --         return w
    --     end, linear_interpolation = function(self, x, y, z)
    --         return x + (y - x) * z
    --     end, closest_point = function(self, A, B, C)
    --         local D = A - B
    --         local E = C - B
    --         local F = #E
    --         E = E / F
    --         local G = E:Dot(D)
    --         if G < 0.0 then
    --             return B
    --         end
    --         if G > F then
    --             return C
    --         end
    --         return B + E * Vector.new(G, G, G)
    --     end, breathe = function(self, H)
    --         H = H or 2.0
    --         local I = GlobalVars.realtime * H
    --         local J = I % (math.pi * 2.0)
    --         J = math.abs(-math.pi + J)
    --         return math.sin(J)
    --     end}
    -- }
}

local fonts = {
    font = { font = render.load_font("Verdana Bold", 11), size = 11 },
    font1 = { font = render.load_font("Verdana Bold", 10), size = 10 },
    font2 = { font = render.load_font("Arial", 11), size = 11 },
    font5 = { font = render.load_font("Arial Bold", 11), size = 11 },
    font55 = { font = render.load_font("Arial Bold", 26), size = 26 },
    font7 = { font = render.load_font("Arial", 13,"a"), size = 13 },
    fontpred = { font = render.load_font("Arial Bold", 12), size = 12 },
    fontideal = { font = render.load_font("Verdana", 12), size = 12 },
    verdana_skt = { font = render.load_font("Verdana", 13), size = 13 },
    verdana_bolde = { font = render.load_font("Verdana", 11, 'b'), size = 11 },
    blockfont = { font = render.load_font("nl\\jagoyaw\\fonts\\small_fonts.ttf", 10), size = 10 },
    verdanar11 = { font =  render.load_font('Verdana', 11, 'a'), size = 11 },
    fontxd = { font = render.load_font("Verdana Bold", 23), size = 23 },
    fontxd2 = { font = render.load_font("Verdana", 12), size = 12 },
    fontdx = { font = render.load_font("nl\\jagoyaw\\fonts\\pixel.ttf", 10,"o")},
    fontarrow = { font = render.load_font("nl\\jagoyaw\\fonts\\ActaSymbolsW95Arrows.ttf", 21, 'a'), size = 21 },
    console = { font = render.load_font("nl\\jagoyaw\\fonts\\lucida_console.ttf", 10, 'd'), size = 10 }
}

visuals.indicators.draw = function()

    local w = 25;
    local bgGap = 4;
    local screen_size = render.screen_size()
    local x = screen_size.x / 2;
    local y = screen_size.y / 2;
    local ping_spike = ui.find("Miscellaneous", "Main", "Other", "Fake Latency")
    local is_key_pressed = common.is_button_down(0x20)
    local player = entity.get_local_player()
    if not player then
        return
    end
    local scoped = player.m_bIsScoped;
    local alpha = math.sin(math.abs(-math.pi + (globals.curtime * (1 / 0.7)) % (math.pi * 2))) * 255
    local flags = player.m_fFlags
    local localplayer = entity.get_local_player()
    local onGround = helpers.on_ground(localplayer)
    local add_y = 0;
    local numer = 0
    local is_dt = ref.doubletap.switch:get()
    local is_hs = ref.hide_shots.switch:get()
    local is_baim = ref.body_aim.mode:get()
    local is_safe = ref.safe_point:get()
    local delta = localplayer.m_flPoseParameter[11] * 120 - 60
    local chrg = rage.exploit:get()
    local inverter_state = (localplayer.m_flPoseParameter[11] * 120 - 60) > 0
    local desync_delta = localplayer.m_flPoseParameter[11] * 120 - 60

    local idealyaw_color = "";
    local idealyaw_text = "";

    if desync_delta > 55 then
        idealyaw_color = color(155, 11, 32, 255);
    else
        idealyaw_color = color(220, 135, 49, 255);
    end

     local textSize = render.measure_text(fonts.font7.font,nil,"JAG0 YAW");
     local textSize1 = render.measure_text(fonts.font7.font,nil,"JAG0 YAW");
    -- render.measure_text(1, "JAG0 YAW")

    local lp_alive = player:is_alive()

    if not lp_alive then return end

   --#endregion if UI.get('crosshair_style') == 1 then
        --local textSize = render.measure_text("REVOLUTION", 12);
      -- = render.text(fonts.fontdx.font, vector(x + 3 + baimcalc.x + 2 + safecalc.x + 2, y + 41 + numer), color(1, 1, 1, 100 / 255), "fs")


    --     local a = render.measure_text(">", fonts.font5.size, fonts.font5.font)
    --     local b = render.measure_text("<", fonts.font5.size, fonts.font5.font)

    --     if ref.base:GetInt() == 2 then
    --         render.text(">", vector(x + 40, y - a.y/2), color(220 / 255, 135 / 255, 49 / 255, 255), fonts.font55.size, fonts.font55.font)
    --         render.text("<", vector(x - 54, y - a.y/2), Color.RGBA(255,255,255,255), fonts.font55.size, fonts.font55.font)
    --     elseif ref.base:GetInt() == 3 then
    --         render.text(">", vector(x + 40, y - a.y/2), Color.RGBA(255,255,255,255), fonts.font55.size, fonts.font55.font)
    --         render.text("<", vector(x - 54, y - a.y/2),color(220 / 255, 135 / 255, 49 / 255, 255), fonts.font55.size, fonts.font55.font)
    --     end

    --     if ref.base:GetInt() == 4 then
    --         render.text("IDEAL YAW", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("IDEAL YAW", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + bgGap), color(220 / 255, 135 / 255, 49 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     elseif ref.base:GetInt() == 5 then
    --         render.text("IDEAL YAW", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("IDEAL YAW", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + bgGap), color(220 / 255, 135 / 255, 49 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     end

    --     if ref.base:GetInt() == 1 then
    --         render.text("FAKEYAW", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("FAKEYAW", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + bgGap), color(207 / 255, 177 / 255, 255 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     elseif ref.base:GetInt() == 2 then
    --         render.text("FAKEYAW", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("FAKEYAW", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + bgGap), color(207 / 255, 177 / 255, 255 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     elseif ref.base:GetInt() == 3 then
    --         render.text("FAKEYAW", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("FAKEYAW", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + bgGap), color(207 / 255, 177 / 255, 255 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     end
    --     if ref.base:GetInt() == 5 then
    --         render.text("FREESTAND", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("FREESTAND", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(209 / 255, 139 / 255, 230 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     else
    --         render.text("DYNAMIC", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("DYNAMIC", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(209 / 255, 139 / 255, 230 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     end

    --     if ref.doubletap:GetBool() then
    --         if chrg < 1 then
    --             render.text("DT", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --             render.text("DT", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(200 / 255, 15 / 255, 15 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --             add_y = add_y + 10;
    --         else
    --             render.text("DT", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --             render.text("DT", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(15 / 255, 255 / 255, 15 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --             add_y = add_y + 10;
    --         end
    --     end

    --     if ref.onshotaa:GetBool() then
    --         render.text("AA", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("AA", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(209 / 255, 139 / 255, 230 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     end

    --     if inverter_state then
    --         render.text("B", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("B", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(15 / 255, 115 / 255, 15 / 255, 135 / 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     end
    -- elseif UI.get('crosshair_style') == 2 then
    --     render.text("JAG0YAW", vector(x - 1, y + 23 + bgGap), color(177 / 255, 171 / 255, 255 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --     add_y = add_y + 9;
    --     if ref.base:GetInt() == 5 then
    --         render.text("FREESTAND", vector(x,  y + 23 + add_y + bgGap), color(209 / 255, 139 / 255, 230 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --         add_y = add_y + 9;
    --     else
    --         render.text("DYNAMIC",  vector(x, y + 23 + add_y + bgGap), color(209 / 255, 139 / 255, 230 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --         add_y = add_y + 9;
    --     end
    --     if ref.onshotaa:GetBool() then
    --         render.text("ONSHOT", vector(x, y + 23 + add_y + bgGap), color(132 / 255, 255 / 255, 16 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --         add_y = add_y + 9;
    --     end
    --     if ref.fakeduck:GetBool() then
    --         render.text("DUCK", vector(x, y + 23 + add_y + bgGap), color(255 / 255, 255 / 255, 255 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --         add_y = add_y + 9;
    --     end
    --     if is_dt then
    --         if chrg < 1 then
    --             render.text("DT", vector(x, y + 23 + add_y + bgGap), color(200 / 255, 15 / 255, 15 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --             add_y = add_y + 9;
    --         else
    --             render.text("DT", vector(x, y + 23 + add_y + bgGap), color(132 / 255, 255 / 255, 16 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --             add_y = add_y + 9;
    --         end
    --     end

    if UI.get('crosshair_style') == "Jagoyaw v2" then
     --  render.text(fonts.fontdx.font, vector(x + 3 + baimcalc.x + 2 + safecalc.x + 2, y + 41 + numer), color(1, 1, 1, 100 / 255), "fs")

       local color_ref = UI.get('indicators_color')

       render.text(fonts.font7.font, vector((x + 12 + (w / 2)) - (textSize1.x / 2) + 1, y + 20 + bgGap + 1), color(0, 0, 0, 255), nil, tostring(math.abs(math.floor(desync_delta)) .. "°"))
       render.text(fonts.font7.font, vector((x + 12 + (w / 2)) - (textSize1.x / 2), y + 20 + bgGap), color(color_ref.r, color_ref.g, color_ref.b, 255), nil, tostring(math.abs(math.floor(desync_delta)) .. "°"))
        render.gradient(vector(screen_size.x / 2, screen_size.y / 2 + 39), vector(screen_size.x / 2 + (math.abs(desync_delta * 110 / 100)), screen_size.y / 2 + 40), color_ref,color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0))
        render.gradient(vector(screen_size.x / 2, screen_size.y / 2 + 39), vector(screen_size.x / 2 + (-math.abs(desync_delta * 110 / 100)), screen_size.y / 2 + 40), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0))

        local calcv1 = render.measure_text(fonts.font7.font,nil,"JAG0WALK")
        local calcv2 = render.measure_text(fonts.font7.font,nil,"LEGIT AA")
        local calcv3 = render.measure_text(fonts.font7.font,nil,"AUTO-DIR")
        local calcv4 = render.measure_text(fonts.font7.font,nil,"JAG0YAW")
        local calcv5 = render.measure_text(fonts.font7.font,nil,"DMG")

        if ref.slowwalk:get() then
            render.text(fonts.font7.font, vector(x + 1 - calcv1.x/2, y + 39 + bgGap + 1), color(0, 0, 0, 255),nil,"JAG0WALK");
            render.text(fonts.font7.font, vector(x - calcv1.x/2, y + 39 + bgGap), color(color_ref.r, color_ref.g, color_ref.b, 255),nil,"JAG0WALK");
        elseif handle_aa.vars.antiaim_state[1] == 'Legit aa' then
            render.text(fonts.font7.font, vector(x + 1 - calcv2.x/2, y + 39 + bgGap + 1), color(0, 0, 0, 255),nil,"LEGIT AA");
            render.text(fonts.font7.font, vector(x - calcv2.x/2, y + 39 + bgGap), color(color_ref.r, color_ref.g, color_ref.b, 255),nil,"LEGIT AA");
        elseif ref.yaw.base:get() == 5 then
            render.text(fonts.font7.font, vector(x - 6 + calcv3.x/2, y + 39 + bgGap + 1), color(0, 0, 0, 255),nil,"FREESTAND");
            render.text(fonts.font7.font, vector(x - 7 + calcv3.x/2, y + 39 + bgGap), color(color_ref.r, color_ref.g, color_ref.b, 255),nil,"FREESTAND");
        else
            render.text(fonts.font7.font, vector(x + 1 - calcv4.x / 2, y + 40 + bgGap), color(0, 0, 0, 255), nil,"JAGOYAW");
            render.text(fonts.font7.font, vector(x - calcv4.x / 2, y + 39 + bgGap), color(color_ref.r, color_ref.g, color_ref.b, 255), nil,"JAGOYAW");
        end
else if UI.get('crosshair_style') == 'Axis' then
        local screen_size = render.screen_size()
        local ind_offset = 0
        local scoped = localplayer.m_bIsScoped

        local height = 20--ui.get(UI.get('vis_indicators_height'))
        local pos = { screen_size.x / 2, screen_size.y / 2 + height }

        local color_ref = UI.get('indicators_color')

        local name = 'JAGO'

        local main_txt = ''

        for i = 1, #name do
            local adder = i ~= #name and '  ' or ''
            local text = name:sub(i, i) .. adder
            main_txt = main_txt .. text
        end

        local maintxt_size = render.measure_text(2, 'o', main_txt)

        local desync = desync_delta

        local clr1 = desync > 0 and { color_ref.r, color_ref.g, color_ref.b } or { 255, 255, 255 }
        local clr2 = desync < 0 and { color_ref.r, color_ref.g, color_ref.b } or { 255, 255, 255 }

        local text = helpers.gradient_text(clr1[1], clr1[2], clr1[3], 255, clr2[1], clr2[2], clr2[3], 255, main_txt)

        local dtclreased = easing.quad_in_out(visuals.indicators.vars.dt_color, 0, 1, 1)
        local dtclr2eased = easing.quad_in_out(visuals.indicators.vars.dt_color2, 0, 1, 1)
        local dt_color = {255 - 255 * dtclreased * (1-dtclr2eased), 255 * dtclreased - (100 * dtclr2eased), 0 + 60 * dtclr2eased}

        local dtclrFT = globals.frametime * 4
        local doubletap = rage.exploit:get() == 1
        visuals.indicators.vars.dt_color = math.clamp(visuals.indicators.vars.dt_color + (doubletap and dtclrFT or -dtclrFT), 0, 1)
        visuals.indicators.vars.dt_color2 = math.clamp(visuals.indicators.vars.dt_color2 + ((ref.hide_shots.switch:get() and ref.doubletap.switch:get() and doubletap) and dtclrFT or -dtclrFT), 0, 1)

        local FT = globals.frametime * 3
        local scope_value = easing.quad_in_out(visuals.indicators.vars.scope_adder, 0, 1, 1)

        visuals.indicators.vars.scope_adder = math.clamp(visuals.indicators.vars.scope_adder + (scoped and FT or -FT), 0, 1)

        local adder_ = scope_value
        local bar_add, bar_add2 = 20 - 20 * adder_, 20 + 10 * adder_
        local text_ = tostring(math.floor(math.abs(desync)))
        local text_size_ = render.measure_text(2, 'o', text_)

        render.text(2, vector(pos[1] - 3 + (text_size_.x / 2 * adder_ + 4 - 4 * adder_) + adder_ * 6, pos[2] - 8), color(240, 240, 240, 230), 'c', text_)

        render.gradient(vector(pos[1] + adder_ * 3, pos[2] - 3), vector(pos[1] + adder_ * 3 + bar_add2 * (math.abs(desync) / 60), pos[2] - 3 + 1), color(color_ref.r, color_ref.g, color_ref.b, color_ref.a), color(color_ref.r, color_ref.g, color_ref.b, 0), color(color_ref.r, color_ref.g, color_ref.b, color_ref.a), color(color_ref.r, color_ref.g, color_ref.b, 0))
        render.gradient(vector(pos[1] + adder_ * 4, pos[2] - 3), vector(pos[1] + adder_ * 4 + -(bar_add * (math.abs(desync) / 60)), pos[2] - 3 + 1), color(color_ref.r, color_ref.g, color_ref.b, color_ref.a), color(color_ref.r, color_ref.g, color_ref.b, 0), color(color_ref.r, color_ref.g, color_ref.b, color_ref.a), color(color_ref.r, color_ref.g, color_ref.b, 0))

        ind_offset = ind_offset + 2

        local items = {
            [1] = { true, text, { 255, 255, 255, 255 } },
            [2] = { handle_aa.vars.antiaim_state[2] == 'Sideways Roll' or handle_aa.vars.antiaim_state[2] == 'Roll', 'ROLL', { 160, 160, 160, 255 } },
            [3] = { ref.doubletap.switch:get(), 'DT', { dt_color[1], dt_color[2], dt_color[3], 255 } },
            [4] = { ref.hide_shots.switch:get(), 'OS', { 225 - 70 * dtclr2eased, 170 - 70 * dtclr2eased, 160 - 70 * dtclr2eased, 255 } },
            [5] = { ref.freestanding.switch:get(), 'FS', { 255, 255, 255, 255 } },
            [6] = { ref.safe_point:get() == 'Force', 'SP', { 120, 200, 120, 255 } },
            [7] = { ref.body_aim.mode:get() == 'Force', 'FB', { 170, 50, 255, 255 } }
        }

        for i, bind in ipairs(items) do
            local text_size = render.measure_text(2, 'o', bind[2])
    
            local speed = globals.frametime * 5
            local alpha = easing.quad_in_out(visuals.indicators.vars.values[i], 0, 1, 1)
    
            local adaptive_pos = (text_size.x / 2 * scope_value) + 2 * scope_value
    
            if i == 2 then
                ind_offset = ind_offset + 1
            end
    
            adaptive_pos = math.ceil(adaptive_pos)

            visuals.indicators.vars.values[i] = math.clamp(visuals.indicators.vars.values[i] + (bind[1] and speed or -speed), 0, 1)
            render.text(2, vector(pos[1] + 1 + adaptive_pos, pos[2] + ind_offset), color(bind[3][1], bind[3][2], bind[3][3], bind[3][4] * alpha), 'c', bind[2])
    
            ind_offset = ind_offset + 8 * alpha
        end
    else if UI.get('crosshair_style') == 'bluhgang' then
        local w = render.measure_text(2, 'o', "jagoyaw")
        local w2 = render.measure_text(2, 'o', "DT MUSLIM CRY")
        local w3 = render.measure_text(2, 'o', "HS DOGS CANT HIT")
        local w4 = render.measure_text(2, 'o', "DMG IQ TEST")
        local color_ref = UI.get('indicators_color')
        local binds = ui.get_binds()
        local alpha = math.sin(math.abs(-3.14 + (globals.curtime * (1 / 0.3)) % (3.14 * 2))) * 255

        render.gradient(vector(screen_size.x / 2, screen_size.y / 2 + 23), vector(screen_size.x / 2 + (math.abs(desync_delta * 50 / 100)), screen_size.y / 2 + 25), color(255, 255, 255,255),color(255, 255, 255, 0), color(255, 255, 255,255), color(255, 255, 255, 0))
    
        render.gradient(vector(screen_size.x / 2, screen_size.y / 2 + 23), vector(screen_size.x / 2 + (-math.abs(desync_delta * 50 / 100)), screen_size.y / 2 + 25), color(255, 255, 255,255), color(255,255, 255, 0), color(255, 255, 255,255), color(255, 255, 255, 0))
  
        render.text(fonts.fontdx.font, vector(x - (w.x/2)-3, y + 25), color(), nil, "jagoyaw")
  
        if (is_dt) then
  
            render.text(fonts.fontdx.font, vector(x - (w2.x/2)-3, y + 35), rage.exploit:get() == 0 and color(255,178,113) or color(150,178,113), nil, "DT MUSLIM CRY")
  
        end
  
        if (not is_dt and is_hs) then
  
            render.text(fonts.fontdx.font, vector(x - (w3.x/2)-3, y + 35), color(157,165,230), nil, "HS DOGS CANT HIT")
  
        end
  
        for i = 1, #binds do
  
            if binds[i].active and binds[i].name == "Minimum Damage" then
  
                if (is_dt or is_hs) then
                render.text(fonts.fontdx.font, vector(x - (w4.x/2)-3, y + 45), color(157,209,201), nil, "DMG IQ TEST")
                else
                render.text(fonts.fontdx.font, vector(x - (w4.x/2)-3, y + 35), color(157,209,201), nil, "DMG IQ TEST")
                end
            end
  
        end

    else if UI.get('crosshair_style') == 'Acatel' then
        local w = render.measure_text(2, nil, "JAG0YAW")
        local color_ref = UI.get('indicators_color')
        local alpha = math.sin(math.abs(-3.14 + (globals.curtime * (1 / 0.3)) % (3.14 * 2))) * 255
        render.text(fonts.fontdx.font, vector(x + 3, y + 15), color(), nil, "JAG0YAW ")
        render.text(fonts.fontdx.font, vector(x + 40, y + 15), color(), nil, helpers.colored_text(color_ref.r,color_ref.g,color_ref.b,alpha,script_db.lua_version:upper()))

        local data = entity.get_players(true)

        if #data == 0 then
            render.text(fonts.fontdx.font, vector(x + 3, y + 23), color(244, 208, 63, 255), nil, "DORMANCY:"..helpers.colored_text(255, 255, 255, 255,"0"))
        else
            render.text(fonts.fontdx.font, vector(x + 3, y + 23), color(136, 134, 255, 255), nil, "SMART:")
            render.text(fonts.fontdx.font, vector(x + 27, y + 23), color(165, 177, 217, 255), nil, ""..helpers.colored_text(255, 95, 91, 255,inverter_state and ' RIGHT' or " LEFT"))

        end

        if is_dt and not ref.fakeduck:get() and ref.auto_peek:get() then
            local chrg = rage.exploit:get()
            local text = math.floor((chrg * 1000) / 10) .. "x"
            local color_ = {255,0,0}
            if chrg == 1 then
                text = "100x"
                color_ = {84,255,40}
            end
            render.text(fonts.fontdx.font, vector(x + 3, y + 31), color(255, 255, 255, 255), nil, "IDEALTICK "..helpers.colored_text(color_[1], color_[2], color_[3], 255,text))
        
            numer = numer + 8
        elseif is_dt then
            local chrg = rage.exploit:get()
            local text = "DT"
            local color_ = {255,0,0}
            if chrg == 1 then
                color_ = {84,255,40}
            end
            if ref.fakeduck:get() then
                text = "DT (FAKE DUCK)"
            end
            render.text(fonts.fontdx.font, vector(x + 3, y + 31), color(color_[1], color_[2], color_[3], 255), nil, text)
            numer = numer + 8
        elseif ref.hide_shots.switch:get() then
            render.text(fonts.fontdx.font, vector(x + 3, y + 31), color(227, 167, 176, 255), nil, "ONSHOT")
            numer = numer + 8
        elseif ref.fakeduck:get() then
            render.text(fonts.fontdx.font, vector(x + 3, y + 31), color(255, 255, 255, 255), nil, "FAKE DUCK")
            numer = numer + 8
        end

        local baimcalc = render.measure_text(2, nil, "BAIM")
        render.text(fonts.fontdx.font, vector(x + 3, y + 31 + numer), color(255, 255, 255, is_baim == "Force" and 255 or 100), nil, "BAIM")
        local safecalc = render.measure_text(2, nil, "SP")
        render.text(fonts.fontdx.font, vector(x + 5 + baimcalc.x, y + 31 + numer), color(255, 255, 255, is_safe == "Force" and 255 or 100), nil, "SP")
        render.text(fonts.fontdx.font, vector(x + 5 + baimcalc.x + safecalc.x, y + 31 + numer), color(255, 255, 255, ref.freestanding.switch:get() and 255 or 100), nil, "FS")
    
--[[     elseif UI.get('crosshair_style') == 8 then
        if not EngineClient.IsInGame() then
            return
        end
        local localplayer = EntityList.GetLocalPlayer()
        if not localplayer then
            return
        end
        if not localplayer:IsAlive() then
            return
        end
        local foncik = fonts.verdana_bolde.font
        local screannn = vector(helpers.screen_size.x / 2.0, helpers.screen_size.y / 2.0 + 2.0)
        local aG = AntiAim.GetInverterState()
        local aE = handle_aa.vars.player_state
        aE = visuals.indicators.vars.other.Stuff.Indicators.State[aE-1] or visuals.indicators.vars.other.Stuff.Indicators.State[3]
        local bc = color(1.0, 0.53, 0.26)
        local bd = color(1.0, 1.0, 1.0)
        local a6 = aG and bd or bc
        local a7 = aG and bc or bd
        local a4 = {{Color = a6, Text = "jago"}, {Color = a7, Text = "yaw°"}}
        local bm = visuals.indicators.vars.other.Helpers:CalcMultiTextSize(a4, fonts.verdana_bolde.size, fonts.verdana_bolde.font)
        local bn = vector(screannn.x - bm.x / 2.0 + 2.0, screannn.y + 14.0)
        local bo = bc.a
        bc.a = visuals.indicators.vars.other.v:breathe(1) * bo
        render.text(
            "",
            vector(screannn.x + 1.0, screannn.y - 2.0),
            bc,
            fonts.verdana_bolde.size,
            fonts.verdana_bolde.font,
            true,
            true
        )
        bc.a = bo
        render.text("jagoyaw°", bn + 1.0, visuals.indicators.vars.other.Colors.Black, fonts.verdana_bolde.size, fonts.verdana_bolde.font)
        visuals.indicators.vars.other.Helpers:MultiText(a4, bn, fonts.verdana_bolde.size, fonts.verdana_bolde.font)
        screannn.y = screannn.y + bm.y + 14.0
        if visuals.indicators.vars.other.AntiBruteforce.Time ~= nil then
            local bp = 5.0
            local bq = bp + visuals.indicators.vars.other.AntiBruteforce.Time
            local br = 1.0
            if bq > GlobalVars.realtime then
                br = (bq - GlobalVars.realtime) / bp
            else
                visuals.indicators.vars.other.AntiBruteforce.Time = nil
            end
            screannn.y = screannn.y + 2.0
            local bs = vector(29.0, 3.0)
            Render.BoxFilled(
                vector(screannn.x - bs.x, screannn.y),
                vector(screannn.x + bs.x, screannn.y + bs.y),
                visuals.indicators.vars.other.Colors.Black
            )
            Render.BoxFilled(
                vector(screannn.x - bs.x + 1.0, screannn.y + 1.0),
                vector(screannn.x - bs.x + 1.0 + (bs.x - 1.0) * 2.0 * br, screannn.y + bs.y - 1.0),
                bc
            )
            screannn.y = screannn.y + bs.y
        end
        screannn.y = screannn.y + 3.0
        local bs = vector(28.0, 1.0)
        local bt = 8.0
        Render.BoxFilled(vector(screannn.x - bs.x, screannn.y), vector(screannn.x, screannn.y + bs.y), a6)
        Render.BoxFilled(vector(screannn.x + bs.x, screannn.y), vector(screannn.x, screannn.y + bs.y), a7)
        local bu = visuals.indicators.vars.other.Helpers:ColorCopy(a6)
        bu.a = 0.0
        Render.GradientBoxFilled(
            vector(screannn.x - bs.x, screannn.y),
            vector(screannn.x - bs.x + bs.y, screannn.y + bt),
            a6,
            a6,
            bu,
            bu
        )
        local bu = visuals.indicators.vars.other.Helpers:ColorCopy(a7)
        bu.a = 0.0
        Render.GradientBoxFilled(
            vector(screannn.x + bs.x, screannn.y),
            vector(screannn.x + bs.x - bs.y, screannn.y + bt),
            a7,
            a7,
            bu,
            bu
        )
        screannn.y = screannn.y + 2.0
        local bm = render.measure_text(aE.Preset, fonts.fontdx.size, fonts.fontdx.font)
        local bn = vector(screannn.x - bm.x / 2.0, screannn.y)
        render.text(aE.Preset, bn, aE.Colored and bc or bd, fonts.fontdx.size, fonts.fontdx.font, true, false)
        screannn.y = screannn.y + 9.0
        local bx = GlobalVars.frametime * 4.0
        if visuals.indicators.vars.other.CanFire() then
            visuals.indicators.vars.other.Stuff.Indicators.Animations.DT.Value =
                math.min(visuals.indicators.vars.other.Stuff.Indicators.Animations.DT.Value + bx, 1.0)
        else
            visuals.indicators.vars.other.Stuff.Indicators.Animations.DT.Value =
                math.max(visuals.indicators.vars.other.Stuff.Indicators.Animations.DT.Value - bx, 0.0)
        end
        local by = {
            [1] = {Text = "ROLL", Active = handle_aa.vars.antiaim_state[2] == 'Sideways Roll' or handle_aa.vars.antiaim_state[2] == 'Roll' },
            [2] = {Text = "FAKE", Active = handle_aa.vars.antiaim_state[2] == 'Massive fake'},
            [3] = {
                Text = "DT",
                Active = is_dt,
                Circle = visuals.indicators.vars.other.Stuff.Indicators.Animations.DT.Value
            },
            [4] = {Text = "OS", Active = is_hs},
            [5] = {Text = "SP", Active = is_safe == 2.0},
            [6] = {Text = "FB", Active = is_baim == 2.0},
            [7] = {Text = "FS", Active = ref.base:Get() == 5.0},
        }
        for bz, z in ipairs(by) do
            if not z.Active then goto aV end
            if z.Active == nil then
                goto aV
            end
            local bm = render.measure_text(z.Text, fonts.fontdx.size, fonts.fontdx.font)
            local bn = vector(screannn.x, screannn.y)
            if z.Active and z.Circle ~= nil then
                local ar = 3.3
                local bk = ar * 0.75
                Render.Circle(
                    vector(bn.x + bm.x / 2.0 + bk + 2, bn.y + bm.y / 2.0),
                    ar,
                    58.0,
                    bd,
                    1.8,
                    -180,
                    -180 + 360 * z.Circle
                )
            end
            bn.x = bn.x - bm.x / 2.0
            render.text(z.Text, bn, z.Active and bc or visuals.indicators.vars.other.Colors.Transperent, fonts.fontdx.size, fonts.fontdx.font, true, false)
            screannn.y = screannn.y + 9.0
            ::aV::
        end ]]
    end
    end
end
end
end

visuals.arrows = function()
    local localplayer = entity.get_local_player()
    if not localplayer then
        return
    end
    local inverter_state = (localplayer.m_flPoseParameter[11] * 120 - 60) > 0

    local w = 25
    local bgGap = 4
    local screen_size = render.screen_size()
    local x = screen_size.x / 2
    local y = screen_size.y / 2

    local arrows_color = UI.get('arrows_color')
    if UI.get('arrows_style') == "Team skeet" then
            local color1 = not inverter_state and arrows_color or color(0,0,0,75)
            local color2 = inverter_state and arrows_color or color(0,0,0,75)

            render.rect(vector(x - 48, y - 10), vector(x - 46, y + 9), color1)
            render.rect(vector(x + 47, y - 10), vector(x + 49, y + 9), color2)
        -- if ref.base:GetInt() == 2 or UI.get('roll_manual') == 2 then
        --     Render.PolyFilled(color(0, 0, 0, 0.3), vector(x - 50, y - 10), vector(x - 50, y + 9), vector(x - 66, y))
        --     Render.PolyFilled(arrows_color, vector(x + 52, y - 10), vector(x + 52, y + 9), vector(x + 66, y))
        -- elseif ref.base:GetInt() == 3 or UI.get('roll_manual') == 1 then       
        --     Render.PolyFilled(arrows_color, vector(x - 50, y - 10), vector(x - 50, y + 9), vector(x - 66, y))
        --     Render.PolyFilled(color(0, 0, 0, 0.3), vector(x + 52, y - 10), vector(x + 52, y + 9), vector(x + 66, y))
        -- else
        --     Render.PolyFilled(color(0, 0, 0, 0.3), vector(x - 50, y - 10), vector(x - 50, y + 9), vector(x - 66, y))
        --     Render.PolyFilled(color(0, 0, 0, 0.3), vector(x + 52, y - 10), vector(x + 52, y + 9), vector(x + 66, y))
            render.poly(color(0, 0, 0, 75), vector(x - 50, y - 10), vector(x - 50, y + 9), vector(x - 66, y))
            render.poly(color(0, 0, 0, 75), vector(x + 52, y - 10), vector(x + 52, y + 9), vector(x + 66, y))
        -- end

    elseif UI.get('arrows_style') == 'Jagoyaw' then
        local color1 = not inverter_state and arrows_color or color(0,0,0,75)
        local color2 = inverter_state and arrows_color or color(0,0,0,75)
        render.text(fonts.fontarrow.font, vector((x - 55), y - 18 + bgGap), color1, 'c', "w")
        render.text(fonts.fontarrow.font, vector((x + 55), y - 18 + bgGap), color2, 'c', "x")
    end
end

visuals.base_render = {
    box = function(x,y,w,h,color,rounding)
        render.rect_outline(vector(x,y), vector(x+w,y+h), color, 1, rounding == nil and 0 or rounding, false)
    end,
    box_filled = function(x,y,w,h,color,rounding)
        render.rect(vector(x,y), vector(x+w,y+h), color, rounding == nil and 0 or rounding, false)
    end,
    gradient_box_filled = function(x,y,w,h,horizontal,color,color2)
        render.gradient(vector(x,y), vector(x+w,y+h), color, color, horizontal and color2 or color, horizontal and color or color2, 0)
    end,
    string = function(x,y,cen,string,color,TYPE,font,fontsize)
        if TYPE == 0 then
            render.text(font, vector(x,y), color, cen and 'c' or '', string)
        elseif TYPE == 1 then
            render.text(font, vector(x,y), color, cen and 'c' or '', string)
        elseif TYPE == 2 then
            render.text(font, vector(x,y), color, cen and 'c' or '', string)
        end
    end,
    circle = function(x,y,rad,start,endd,color,seg,th)
        render.circle_outline(vector(x,y), color, rad, start, endd, th)
    end,
    text_size = function(string,font,fontsize)
        return render.measure_text(font, '', string)
    end
}

visuals.global_render = {
    box = function(x, y, w, colorref)
        visuals.base_render.box_filled(x,y+2,w,18,color(17,17,17,120*(colorref.a)/255),4)
        visuals.base_render.box_filled(x+3,y+1,w-6,1,color(colorref.r,colorref.g,colorref.b,colorref.a))
        visuals.base_render.circle(x+3,y+4,3,180,0.25,color(colorref.r,colorref.g,colorref.b,colorref.a),75,1)
        visuals.base_render.circle(x+w-3,y+4,3,-90,0.25,color(colorref.r,colorref.g,colorref.b,colorref.a),75,1)
        visuals.base_render.gradient_box_filled(x,y+4,1,12,false,color(colorref.r,colorref.g,colorref.b,colorref.a),color(colorref.r,colorref.g,colorref.b,0))
        visuals.base_render.gradient_box_filled(x+w-1,y+4,1,12,false,color(colorref.r,colorref.g,colorref.b,colorref.a),color(colorref.r,colorref.g,colorref.b,0))
    end
}

-- visuals.Render_engine = (function()
--     local self = {}

--     local renderer_fade = function(x, y, w, h, color, length, round)
--         local r, g, b, a = color.r, color.g, color.b, color.a

--         for i = 1, 10 do
--             Render.Box(vector(x - i, y - i), vector(w + i, h + i), color(r, g, b, (60 - (60 / length) * i) * (a / 255)), round)
--         end
--     end

--     local renderer_window = function(x, y, w, h, color, shadow_color, outline_color, left, outline)
--         local r, g, b, a = color.r, color.g, color.b, color.a
--         local r1, g1, b1, a1 = shadow_color.r, shadow_color.g, shadow_color.b, shadow_color.a
--         local r2, g2, b2, a2 = outline_color.r, outline_color.g, outline_color.b, outline_color.a

--         Render.Blur(vector(x, y), vector(w, h), color(1,1,1, a), 5)
    
--         if outline then
--             Render.Circle(vector(x + 4, y + 4), 4, 4, color(r, g, b, a), 1, -175, -90)

--             Render.BoxFilled(vector(x + 4, y), vector(w - 5, y+1), color(r, g, b, a))
--             Render.Circle(vector(w - 4, y + 4), 4, 4, color(r, g, b, a), 1, 260, 370)

--             Render.GradientBoxFilled(vector(x, y + 4), vector(x + 1, h - 6), color(r, g, b, a), color(r, g, b, a), color(r, g, b, 0), color(r, g, b, 0))
--             Render.GradientBoxFilled(vector(w - 1, y + 4), vector(w, h - 6), color(r, g, b, a), color(r, g, b, a), color(r, g, b, 0), color(r, g, b, 0))
--         end

--         Render.Box(vector(x, y), vector(w, h), color(r2, g2, b2, (80 / 255) * a2), 5)
    
--         if left then
--             Render.BoxFilled(vector(x, y + 4), vector(x+1, h - 5), color(r, g, b, a))

--             Render.Circle(vector(x + 5, y + 5), 5, 12, color(r, g, b, a), 1, -90, -165)

--             Render.Circle(vector(x + 5, h - 5), 5, 12, color(r, g, b, a), 1, -185, -255)

--             Render.GradientBoxFilled(vector(x + 4, y), vector(x+20, y+1), color(r, g, b, a), color(r, g, b, 0), color(r, g, b, a), color(r, g, b, 0))
--             Render.GradientBoxFilled(vector(x + 4, h - 1), vector(x+20, h), color(r, g, b, a), color(r, g, b, 0), color(r, g, b, a), color(r, g, b, 0))
--         end

--         Render.BoxFilled(vector(x+1, y+1), vector(w-1, h-1), color(0, 0, 0, a), 5)

--         renderer_fade(x, y, w, h, color(r1, g1, b1, (120 / 255) * a1), 10, 10)
--     end

--     self.container = function(x, y, w, h, color, name, font_size, font)
--         local name_size = render.measure_text(name, font_size, font)
--         -- Render.Blur(vector(x, y), vector(x + w + 3, y + h + 2), color(1, 1, 1, color.a), 6)
--         renderer_window(x, y, x + w + 3, y + h + 2, color(color.r, color.g, color.b, color.a), color(color.r, color.g, color.b, color.a), color(color.r, color.g, color.b, color.a), false, true)
--         render.text(name, vector(x + 1 + 1 + w / 2 + 1 - name_size.x / 2, y + 2 + 1), color(0, 0, 0, color.a), font_size, font)
--         render.text(name, vector(x + 1 + w / 2 + 1 - name_size.x / 2, y + 2), color(1, 1, 1, color.a), font_size, font)
--     end

--     return self
-- end)()

visuals.watermark = {}

visuals.watermark.draw = function()
    local speed = globals.frametime * 5
    local color_ref = UI.get('ui_color')
    local pos = { x = 0, y = 0, w = 0, h = 0 }
    pos.x, pos.y = render.screen_size().x, 0

    local offset = { x = 10, y = 10 }

    pos.x = pos.x - offset.x
    pos.y = pos.y + offset.y

    local text = ''

    local username = script_db.username

    if UI.get('watermark_name') == 'Custom' then
        username = UI.get('watermark_name_ref')
    end

    text = text .. script_db.lua_name .. ' [' .. script_db.lua_version .. '] | ' .. username .. ' | '

    local local_time = common.get_system_time()

    local time = string.format("%02d:%02d:%02d", local_time.hours, local_time.minutes, local_time.seconds)

    local ping = globals.is_in_game and math.floor(utils.net_channel().avg_latency[1] * 1000) or 0

    text = text .. 'delay: ' .. ping .. 'ms | ' .. time

    local text_size = render.measure_text(1, '', text)

    pos.x = pos.x - text_size.x
    pos.w = text_size.x
    pos.h = 16

    -- if UI.get('ui_style') == 0 then
        visuals.global_render.box(pos.x - 10, pos.y, pos.w + 10, { r = color_ref.r, g = color_ref.g, b = color_ref.b, a = 255 })

        visuals.base_render.string(pos.x - 10 + 6, pos.y + text_size.y / 2 - 1, false, text, color(255, 255, 255, 255), 1, 1)
    -- elseif UI.get('ui_style') == 1 then
    --     visuals.Render_engine.container(pos.x - 9, pos.y, pos.w + 9, pos.h, { r = color.r, g = color.g, b = color.b, a = 1 }, text, fonts.verdanar11.size, fonts.verdanar11.font)
    -- end
end

visuals.keybinds = {}

visuals.keybinds.get_keys = function()
    local binds = {}
    local cheatbinds = ui.get_binds()

    for i = 1, #cheatbinds do
        table.insert(binds, 1, cheatbinds[i])
    end
    return binds
end

visuals.keybinds.names = {
    ['Double Tap'] = 'Double tap',
    ['Hide Shots'] = 'On shot anti-aim',
    ['Slow Walk'] = 'Slow motion',
    ['Edge Jump'] = 'Jump at edge',
    ['Fake Ping'] = 'Ping spike',
    ['Override Resolver'] = 'Resolver override',
    ['Fake Duck'] = 'Duck peek assist',
    ['Minimum Damage'] = 'Damage override',
    ['Auto Peek'] = 'Quick peek assist',
    ['Body Aim'] = 'Force body aim',
    ['Safe Points'] = 'Safe points',
    ['Yaw Base'] = 'Yaw base',
    ['Enable Thirdperson'] = 'Thirdperson',
    ['Manual Yaw Base'] = 'Yaw base',
}

visuals.keybinds.upper_to_lower = function(str)
    local str1 = string.sub(str, 2, #str)
    local str2 = string.sub(str, 1, 1)
    return str2:upper()..str1:lower()
end

visuals.keybinds.vars = {
    alpha = {
        [ '' ] = 0
    },
    window = {
        alpha = 0,
        width = 0
    }
}

visuals.keybinds.dragging = helpers.dragging_fn('jagoyaw_keybinds', helpers.screen_size.x / 1.3, helpers.screen_size.y / 2.5)

visuals.keybinds.draw = function()
    local speed = globals.frametime * 5
    local color_ref = UI.get('ui_color')
    local pos = { x = 0, y = 0, w = 0, h = 0 }
    pos.x, pos.y = visuals.keybinds.dragging:get()
    pos.x = math.ceil(pos.x)
    pos.y = math.ceil(pos.y)
    local offset = 0
    local maximum_offset = 80

    local binds = visuals.keybinds.get_keys()
    for i = 1, #binds do
        local bind = binds[i]
        local bind_name = visuals.keybinds.names[bind.name] == nil and visuals.keybinds.upper_to_lower(bind.name) or visuals.keybinds.names[bind.name]

        local bind_state = ''
        if bind.value == true then
            local bind_mode = bind.mode
            if bind_mode == 2 then
                bind_state = 'toggled'
            elseif bind_mode == 1 then
                bind_state = 'holding'
            end
        else
            bind_state = bind.value
        end
    
        if visuals.keybinds.vars.alpha[bind_name] == nil then
            visuals.keybinds.vars.alpha[bind_name] = 0
        end
    
        local alpha = easing.quad_in_out(visuals.keybinds.vars.alpha[bind_name], 0, 1, 1)
        visuals.keybinds.vars.alpha[bind_name] = math.clamp(visuals.keybinds.vars.alpha[bind_name] + (bind.active and speed or -speed), 0, 1)
    
        local bind_state_size = render.measure_text(1, nil, bind_state)
        local bind_name_size = render.measure_text(1, nil, bind_name)

        -- if UI.get('ui_style') == 0 then
            visuals.base_render.string(pos.x + 4, pos.y + 21 + offset, false, bind_name, color(255, 255, 255, alpha*255), 1, 1)
            visuals.base_render.string(pos.x + (visuals.keybinds.vars.window.width - bind_state_size.x - 10), pos.y + 20 + offset, false, '[' .. bind_state .. ']', color(255, 255, 255, alpha*255), 1, 1)
        -- elseif UI.get('ui_style') == 1 then
        --     render.text(bind_name, vector(pos.x + 4 + 1, pos.y + 21 + 1 + offset), color(0, 0, 0, alpha), fonts.verdanar11.size, fonts.verdanar11.font)
        --     render.text(bind_name, vector(pos.x + 4, pos.y + 21 + offset), color(1, 1, 1, alpha), fonts.verdanar11.size, fonts.verdanar11.font)
        
        --     render.text('[' .. bind_state .. ']', vector(pos.x + 1 + (visuals.keybinds.vars.window.width - bind_state_size.x - 10), pos.y + 20 + 1 + offset), color(0, 0, 0, alpha), fonts.verdanar11.size, fonts.verdanar11.font)
        --     render.text('[' .. bind_state .. ']', vector(pos.x + (visuals.keybinds.vars.window.width - bind_state_size.x - 10), pos.y + 20 + offset), color(1, 1, 1, alpha), fonts.verdanar11.size, fonts.verdanar11.font)
        -- end

        offset = offset + 16 * alpha

        if maximum_offset < (bind_name_size.x + bind_state_size.x) + 30 then
            maximum_offset = bind_name_size.x + bind_state_size.x + 30
        end
    end

    pos.w = math.ceil(visuals.keybinds.vars.window.width)
    pos.h = 16

    local window_alpha = easing.quad_in_out(visuals.keybinds.vars.window.alpha, 0, 1, 1)
    visuals.keybinds.vars.window.alpha = math.clamp(visuals.keybinds.vars.window.alpha + ((ui.get_alpha() > 0 or #binds > 0) and speed or -speed), 0, 1)

    visuals.keybinds.vars.window.width = helpers.lerp(visuals.keybinds.vars.window.width, maximum_offset, speed * 2)

    -- if UI.get('ui_style') == 0 then
        visuals.global_render.box(pos.x, pos.y - 2, pos.w + 2, { r = color_ref.r, g = color_ref.g, b = color_ref.b, a = window_alpha * 255 })

        local main_text = render.measure_text(1, nil, 'keybinds')

        visuals.base_render.string(pos.x + 1 + pos.w / 2, pos.y + main_text.y - 3, true, 'keybinds', color(255, 255, 255, window_alpha * 255), 1, 1)
    -- elseif UI.get('ui_style') == 1 then
        -- visuals.Render_engine.container(pos.x, pos.y, pos.w, pos.h, { r = color.r, g = color.g, b = color.b, a = window_alpha }, 'keybinds', fonts.verdanar11.size, fonts.verdanar11.font)
    -- end

    visuals.keybinds.dragging:drag(pos.w, (10 + (8 * #binds)) * 2)
end

visuals.spectators = {}

visuals.spectators.vars = {
    players = {},
    alpha = {
        [ '' ] = 0
    },
    window = {
        alpha = 0,
        width = 0
    },
    specs = {
        m_alpha = 0,
        m_active = {},
        m_contents = {},
        unsorted = {}
    },
}

visuals.spectators.get_spectators = function(player)
    if not globals.is_connected or not globals.is_in_game then
        return
    end

    local me = entity.get_local_player()
    if not me then return end

    local observing = nil

    if me:is_alive() then
        observing = me:get_spectators()
    else
        local local_target = me.m_hObserverTarget
        if not local_target then return end
        observing = local_target:get_spectators()
    end

    return observing
end

visuals.spectators.dragging = helpers.dragging_fn('jagoyaw_spectators', helpers.screen_size.x / 1.5, helpers.screen_size.y / 2.5)

visuals.spectators.draw = function()
    local me = entity.get_local_player()
    local spectators = visuals.spectators.get_spectators()

    if not globals.is_connected or spectators == nil or me == nil then return end

    for i=1, 64 do
        visuals.spectators.vars.specs.unsorted[i] = {
            idx = i,
            active = false
        }
    end

    for i, spectator in pairs(spectators) do
        local idx = spectator:get_index()
        visuals.spectators.vars.specs.unsorted[idx] = {
            idx = idx,

            active = (function()
                if spectator == me then
                    return false
                end

                return true
            end)(),

            avatar = (function()
                local avatar = spectator:get_steam_avatar()

                if avatar == nil then
                    return nil
                end

                if visuals.spectators.vars.specs.m_contents[idx] == nil or visuals.spectators.vars.specs.m_contents[idx].conts ~= avatar then
                    visuals.spectators.vars.specs.m_contents[idx] = {
                        conts = avatar,
                        texture = avatar
                    }
                end

                return visuals.spectators.vars.specs.m_contents[idx].texture
            end)()
        }
    end

    local is_menu_open = ui.get_alpha() > 0
    local latest_item = false

    local speed = globals.frametime * 5
    local color_ref = UI.get('ui_color')
    local pos = { x = 0, y = 0, w = 0, h = 0 }
    pos.x, pos.y = visuals.spectators.dragging:get()
    pos.x = math.ceil(pos.x)
    pos.y = math.ceil(pos.y)
    local offset = 0
    local maximum_offset = 80

    for _, c_ref in pairs(visuals.spectators.vars.specs.unsorted) do
        local c_id = c_ref.idx
        local c_nickname = ''

        local c_entity = entity.get(c_id)

        if c_entity then
            c_nickname = string.sub(c_entity:get_name(), 1, 25)
        end

        if not visuals.spectators.vars.alpha[c_id] then
            visuals.spectators.vars.alpha[c_id] = 0
        end

        local ease = easing.quad_in_out(visuals.spectators.vars.alpha[c_id], 0, 1, 1)
        visuals.spectators.vars.alpha[c_id] = math.clamp(visuals.spectators.vars.alpha[c_id] + (c_ref.active and speed or -speed), 0, 1)

        if c_ref.active then
            latest_item = true

            if visuals.spectators.vars.specs.m_active[c_id] == nil then
                visuals.spectators.vars.specs.m_active[c_id] = {
                    alpha = 0, offset = 0, active = true
                }
            end

            local text_width = render.measure_text(1, nil, c_nickname)

            visuals.spectators.vars.specs.m_active[c_id].active = true
            visuals.spectators.vars.specs.m_active[c_id].offset = text_width.x + 30
            visuals.spectators.vars.specs.m_active[c_id].alpha = ease
            visuals.spectators.vars.specs.m_active[c_id].avatar = c_ref.avatar
            visuals.spectators.vars.specs.m_active[c_id].name = c_nickname

        elseif visuals.spectators.vars.specs.m_active[c_id] ~= nil then
            visuals.spectators.vars.specs.m_active[c_id].active = false
            visuals.spectators.vars.specs.m_active[c_id].alpha = ease

            if visuals.spectators.vars.specs.m_active[c_id].alpha <= 0 then
                visuals.spectators.vars.specs.m_active[c_id] = nil
            end
        end

        if visuals.spectators.vars.specs.m_active[c_id] ~= nil and visuals.spectators.vars.specs.m_active[c_id].offset > maximum_offset then
            maximum_offset = visuals.spectators.vars.specs.m_active[c_id].offset
        end
    end

    if is_menu_open and not latest_item then
        local case_name = ' '
        local text_width = 0 --renderer.measure_text(nil, case_name)

        latest_item = true
        maximum_offset = maximum_offset < text_width and text_width or maximum_offset

        visuals.spectators.vars.specs.m_active[case_name] = {
            name = ' ',
            active = true,
            offset = text_width,
            alpha = 0
        }
    end

    for c_name, c_ref in pairs(visuals.spectators.vars.specs.m_active) do
        local text_size = render.measure_text(1, nil, c_ref.name)

        -- print(c_ref.alpha)

        local adder = { text = 5 + 12 + 3, avatar = 5 }

        if UI.get('avatar_side') == 'Right' then
            adder = { text = 5, avatar = math.ceil(visuals.spectators.vars.window.width) - 5 - 12 }
        end

        visuals.base_render.string(pos.x + adder.text, pos.y + 21 + offset, false, c_ref.name, color(255, 255, 255, c_ref.alpha*255), 1, 1)
        -- renderer.text(x + 5 + ((c_ref.avatar and not right_offset) and text_size[2] + 5 or 0) + 1, y + height_offset - 5 + 5 * c_ref.alpha, 255, 255, 255, 255 * c_ref.alpha, font, w - (text_size[2] + 15), c_ref.name)

        if c_ref.avatar ~= nil then
            -- renderer.texture(c_ref.avatar, x + 1 + (right_offset and w - 15 or 5), y + height_offset - 5 + 5 * c_ref.alpha, text_size[2], text_size[2], 255, 255, 255, 255 * c_ref.alpha, 'f')
            render.texture(c_ref.avatar, vector(pos.x + adder.avatar, pos.y + 21 + offset), vector(12, 12), color(255, 255, 255,  c_ref.alpha*255))
        end

        offset = offset + (text_size.y + 3) * c_ref.alpha
    end

    pos.w = math.ceil(visuals.spectators.vars.window.width)
    pos.h = 16

    local window_alpha = easing.quad_in_out(visuals.spectators.vars.window.alpha, 0, 1, 1)
    visuals.spectators.vars.window.alpha = math.clamp(visuals.spectators.vars.window.alpha + ((ui.get_alpha() > 0 or #spectators > 0) and speed or -speed), 0, 1)

    visuals.spectators.vars.window.width = helpers.lerp(visuals.spectators.vars.window.width, maximum_offset, speed * 2)

    -- if UI.get('ui_style') == 0 then
        visuals.global_render.box(pos.x, pos.y - 2, pos.w + 3, { r = color_ref.r, g = color_ref.g, b = color_ref.b, a = window_alpha * 255 })

        local main_text = render.measure_text(1, nil, 'spectators')

        visuals.base_render.string(pos.x + 1 + pos.w / 2, pos.y + main_text.y - 3, true, 'spectators', color(255, 255, 255, window_alpha * 255), 1, 1)
    -- elseif UI.get('ui_style') == 1 then
    --     visuals.Render_engine.container(pos.x, pos.y, pos.w, pos.h, { r = color_ref.r, g = color_ref.g, b = color_ref.b, a = window_alpha }, 'spectators', fonts.verdanar11.size, fonts.verdanar11.font)
    -- end

    visuals.spectators.dragging:drag(pos.w, (10 + (8 * #spectators)) * 2)
end

visuals.hitmarker = {}

visuals.hitmarker.vars = {
    data = {},
    queue = {}
}

visuals.hitmarker.on_bullet_impact = function(e)
    if not UI.contains('visual_elements', 'Other') and not UI.get('hitmarker') then return end
    if entity.get(e.userid, true) == entity.get_local_player() then
        local impactX = e.x
        local impactY = e.y
        local impactZ = e.z
        table.insert(visuals.hitmarker.vars.data, { impactX, impactY, impactZ, globals.realtime })
    end
end

visuals.hitmarker.on_player_hurt = function(e)
    if not UI.contains('visual_elements', 'Other') and not UI.get('hitmarker') then return end
    local bestX, bestY, bestZ = 0, 0, 0
    local bestdistance = 100
    local realtime = globals.realtime
    if entity.get(e.attacker, true) == entity.get_local_player() then
        local victim = entity.get(e.userid, true)
        if victim ~= nil then
            local victimOrigin = victim.m_vecOrigin
            local victimDamage = e.dmg_health
            local victimhelf = victim.m_iHealth - victimDamage

            for i in ipairs(visuals.hitmarker.vars.data) do
                local data = visuals.hitmarker.vars.data[i]
                if data[4] + (4) >= realtime then
                    local impactX = data[1]
                    local impactY = data[2]
                    local impactZ = data[3]

                    local distance = helpers.vectordistance(victimOrigin.x, victimOrigin.y, victimOrigin.z, impactX, impactY, impactZ)
                    if distance < bestdistance then
                        bestdistance = distance
                        bestX = impactX
                        bestY = impactY
                        bestZ = impactZ
                    end
                end
            end

            if bestX == 0 and bestY == 0 and bestZ == 0 then
                victimOrigin.z = victimOrigin.z + 50
                bestX = victimOrigin.x
                bestY = victimOrigin.y
                bestZ = victimOrigin.z
            end

            for k in ipairs(visuals.hitmarker.vars.data) do
                visuals.hitmarker.vars.data[k] = { 0, 0, 0, 0 }
            end
            table.insert(visuals.hitmarker.vars.queue, { bestX, bestY, bestZ, realtime, victimDamage, victimhelf } )
        end
    end
end

visuals.hitmarker.on_player_spawned = function(e)
    if not UI.contains('visual_elements', 'Other') and not UI.get('hitmarker') then return end
    if entity.get(e.userid, true) == entity.get_local_player() then
        for i in ipairs(visuals.hitmarker.vars.data) do
            visuals.hitmarker.vars.data[i] = { 0, 0, 0, 0 }
        end

        for i in ipairs(visuals.hitmarker.vars.queue) do
            visuals.hitmarker.vars.queue[i] = { 0, 0, 0, 0, 0, 0 }
        end
    end
end

visuals.hitmarker.draw = function()
    local HIT_MARKER_DURATION = 2
    local realtime = globals.realtime
    local maxTimeDelta = HIT_MARKER_DURATION / 2
    local maxtime = realtime - maxTimeDelta / 2

    for i in ipairs(visuals.hitmarker.vars.queue) do
        local marker = visuals.hitmarker.vars.queue[i]
        if marker[4] + HIT_MARKER_DURATION > maxtime then
            if marker[1] ~= nil then

                local add = (marker[4] - realtime) * 50

                local w2c = render.world_to_screen(vector((marker[1]), (marker[2]), (marker[3])))
                local w2c2 = render.world_to_screen(vector((marker[1]), (marker[2]), (marker[3]) - add))
                if not w2c or not w2c2 then return end
                if w2c.x ~= nil and w2c.y ~= nil then
                    local alpha = 255 
                    if (marker[4] - (realtime - HIT_MARKER_DURATION)) < (HIT_MARKER_DURATION / 2) then                     
                        alpha = math.floor((marker[4] - (realtime - HIT_MARKER_DURATION)) / (HIT_MARKER_DURATION / 2) * 255)
                        if alpha < 5 then
                            marker = { 0 , 0 , 0 , 0, 0, 0 }
                        end         
                    end

                    local HIT_MARKER_SIZE = 6
                    local col = UI.get('hitmarker_plus_color')
                    local col2 = UI.get('hitmarker_damage_color')

                    -- local color1 = color(255, 255, 255, alpha)
                    local color2 = color(155, 200, 21, alpha)


                    local colorspiese = marker [6] <= 0 and color2 or col2

                    if UI.contains('hitmarker_type', 'damage') then
                        render.text(1, vector(w2c2.x + 1, w2c2.y + 1), color(0, 0, 0, alpha), '', "-" .. tostring(marker[5]))
                        render.text(1, vector(w2c2.x + 1, w2c2.y + 1), colorspiese, '', "-" .. tostring(marker[5]))
                    end
                    if UI.contains('hitmarker_type', '+') then
                        render.gradient(vector(w2c.x - 1, w2c.y - HIT_MARKER_SIZE), vector(w2c.x + 1, w2c.y), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), 0)
                        render.gradient(vector(w2c.x - HIT_MARKER_SIZE, w2c.y - 1), vector(w2c.x, w2c.y + 1), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), 0)
                        render.gradient(vector(w2c.x - 1, w2c.y + HIT_MARKER_SIZE), vector(w2c.x + 1, w2c.y), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), 0)
                        render.gradient(vector(w2c.x + HIT_MARKER_SIZE, w2c.y - 1), vector(w2c.x, w2c.y + 1), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), 0)
                    end
                end
            end
        end
    end
end

visuals.custom_scope = {}

visuals.custom_scope.vars = {
    inaccuracy = 0
}

visuals.custom_scope.draw = function()
    ref.override_zoom.force_viewmodel:set(UI.get('viewmodel_scope'))

    local screen_size = render.screen_size()

    local speed = 6

    local lp = entity.get_local_player()
    if not lp then return end

    local my_weapon = lp:get_player_weapon()
    if not my_weapon then return end

    local length = UI.get('custom_scope_lenght')
    local offset = UI.get('custom_scope_offset')

    local color_ref = UI.get('custom_scope_color')

    local weapon_inaccuracy = my_weapon:get_inaccuracy(my_weapon) * 100

    local inaccuracy = UI.get('custom_scope_inaccuracy')

    visuals.custom_scope.vars.inaccuracy = inaccuracy and helpers.lerp( visuals.custom_scope.vars.inaccuracy, weapon_inaccuracy, globals.frametime * 20 ) or 0

    local inaccuracy_value = math.floor(visuals.custom_scope.vars.inaccuracy)

    local offset, initial_position =
    offset * screen_size.y / 1080,
    length * screen_size.y / 1080

    local scope_level = my_weapon.m_zoomLevel

    local scoped = lp.m_bIsScoped
    local resume_zoom = lp.m_bResumeZoom

    local is_valid = lp:is_alive() and my_weapon ~= nil and scope_level ~= nil

    local act = is_valid and scope_level > 0 and scoped and not resume_zoom

    if act then
        ref.override_zoom.scope_overlay:set('Remove All')

        render.gradient(vector(screen_size.x/2 - initial_position + 2 - inaccuracy_value, screen_size.y / 2), vector(screen_size.x/2 - initial_position + 2 + initial_position - offset - inaccuracy_value, screen_size.y / 2 + 1), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0), 0)

        render.gradient(vector(screen_size.x/2 + offset + inaccuracy_value, screen_size.y / 2), vector(screen_size.x/2 + offset + initial_position - offset - 1 + inaccuracy_value, screen_size.y / 2 + 1), color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, 0)

        render.gradient(vector(screen_size.x / 2, screen_size.y/2 - initial_position + 2 - inaccuracy_value), vector(screen_size.x / 2 + 1, screen_size.y/2 - initial_position + 2 + initial_position - offset - inaccuracy_value), color_ref, color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0), color(color_ref.r, color_ref.g, color_ref.b, 0), 0)

        render.gradient(vector(screen_size.x / 2, screen_size.y/2 + offset + inaccuracy_value), vector(screen_size.x / 2 + 1, screen_size.y/2 + offset + initial_position - offset - 1 + inaccuracy_value), color(color_ref.r, color_ref.g, color_ref.b, 0), color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, color_ref, 0)
    end
end

local logs = { }

function add_log( text )
    table.insert( logs, { text = text, expiration = 8 } )
end

local lucida = render.load_font("C:\\Windows\\Fonts\\lucon.ttf", 10, "d")

local hb = {
    [0] = 'generic',
    'head', 'chest', 'stomach',
    'left arm', 'right arm',
    'left leg', 'right leg',
    'neck', 'generic', 'gear'
}
local reason =
{
    ["spread"] = "spread" ,
    ["correction"]= "?" ,
    ["occlusion"] = "spread",
    ["jitter correction"] = "?" ,
    ["prediction error"] = "prediction error" ,
    ["lagcomp failure"] = "?"
}

function log_log()
    if #logs <= 0 then
        return
    end

    local x = 8
    local y = 5
    local size = 12 + 1

    for i = 1, #logs do
        local notify = logs[ i ]

        if not notify then
            goto continue
        end

        logs[ i ].expiration = logs[ i ].expiration - globals.frametime

        if logs[ i ].expiration <= 0.0 then
            table.remove( logs, i )
        end

        ::continue::
    end

    for i = 1, #logs do
        local notify = logs[ i ]

        if not notify then
            goto continue
        end

        local left = logs[ i ].expiration
        local color = color( )
    
        if left <= 0.5 then
            local f = left;
            math.clamp( f, 0.0, 0.5 )

            f = f / 0.5;

            color.a = math.floor( f * 255.0 )

            if i == 1 and f <= 0.2 then
                y = y - ( size * ( 1.0 - f / 0.2 ) )
            end
        else
            color.a = 255
        end

        render.text( lucida, vector( x, y ), color, "", logs[ i ].text )
        y = y + size

        ::continue::
    end
end

local TICKS_TO_TIME = function(ticks)
    return globals.tickinterval * ticks
end

local print_skeet = function( ctx )
    local col = color( 220, 220, 220, 255 )
    local col_str = col:to_hex( )
    local acc = color( 160, 203, 39 )
    local acc_str = acc:to_hex( )
    print_raw( string.format( "\a%s[gamesense] \a%s%s", acc_str:sub(0, 6), col_str:sub( 0 , 6 ), ctx ) )
end

local on_hit = function( ctx )
    local name = ctx.target:get_name()
    local hitgroup_ = hb[ctx.hitgroup]
    local hitgroup = hb[ctx.wanted_hitgroup]
    local bt_ms = math.floor(TICKS_TO_TIME(ctx.backtrack) * 1000)
    local random1 = math.random(0,1000)
    local random12 = math.random(0,1000)
    local random13 = math.random(0,1000)
    local random2 = math.random(0,9)
    local random22 = math.random(0,9)
    local random23 = math.random(0,9)
    local random24 = math.random(0,9)
    local random25 = math.random(0,9)
    local random3 = math.random(0,58)
    local random4 = math.random(0,20)
    local random5 = math.random(0,20)
    local health = ctx.target.m_iHealth
    local wanted_dmg_str = ctx.damage ~= ctx.wanted_damage and string.format("(%i)", ctx.wanted_damage) or ""

    local string = string.format("Hit %s in the %s for %i (%i health remaining)",name, hitgroup_, ctx.damage,health)
    local string2 = string.format("[%i/%i] Hit %s's in the %s for %i%s damage (%i health remaining), aimed=%s(%i%%) bt= %ims del= %i %i (%i:%i:%i/%i) LC=%i TC=%i (%i)",random1,random12,name, hitgroup_, ctx.damage, wanted_dmg_str,health, hitgroup, ctx.hitchance, bt_ms,random2,random22,random23,random24,random25,random3,random4,random5,random13)

    print_skeet(string)
    add_log(string)
    print_skeet(string2)
    add_log(string2)
end

local on_miss = function( ctx )

    local name = ctx.target:get_name()
    local hitgroup = hb[ctx.wanted_hitgroup]
    local reason = reason[ctx.state]
    local bt_ms = math.floor(TICKS_TO_TIME(ctx.backtrack) * 1000)
    local random1 = math.random(0,1000)
    local random12 = math.random(0,1000)
    local random13 = math.random(0,1000)
    local random2 = math.random(0,9)
    local random22 = math.random(0,9)
    local random23 = math.random(0,9)
    local random24 = math.random(0,9)
    local random25 = math.random(0,9)
    local random3 = math.random(0,58)
    local random4 = math.random(0,20)
    local random5 = math.random(0,20)


    local string = string.format("[%i/%i] Missed %s's %s(%i)(%i%%) due to %s, bt= %i (B) (%i:%i:%i/%i) LC=%i TC=%i (%i)",random1,random12, name, hitgroup,ctx.wanted_damage,ctx.hitchance,reason,bt_ms,random23,random24,random25,random3,random4,random5,random13)

    add_log(string)
    print_skeet(string)
end

events.aim_ack:set( function( ctx )

    if ctx.state then
        on_miss( ctx )
        return
    end

    on_hit( ctx )
end )




local ragebot = {}

ragebot.hitchance_overrides = function()
    ref.hitchance.value:override(nil)
    local lp = entity.get_local_player()
    if UI.get('hitchance_air_enable') and helpers.in_air(lp) then
        local active_weapon = lp:get_player_weapon()
        if not active_weapon then return end
        local weapon_classname = active_weapon:get_classname()
        local enabled_weapons = UI.get('hitchance_air_weapons')
        print(weapon_classname)
        -- if false then
        --     ref.hitchance.value:override(UI.get('hitchance_air'))
        -- end
    end

    local scoped = lp.m_bIsScoped
    local onground = helpers.on_ground(lp)
    if UI.get('hitchance_noscope_enable') and not scoped and onground then
        local active_weapon = lp:get_player_weapon()
        if not active_weapon then return end
        local weapon_classname = active_weapon:get_classname()
        local enabled_weapons = UI.get('hitchance_noscope_weapons')
        print(weapon_classname)
        -- if weapon_id == 11 or weapon_id == 38 then
        --     ref.hitchance.value:override(UI.get('hitchance_noscope'))
        -- end
    end
end

menu.gears.air_hc = UI.get_element('hitchance_air_enable'):create()

menu.gears.noscope_hc = UI.get_element('hitchance_noscope_enable'):create()

ragebot.doubletap = {}

ragebot.doubletap.predict_dt_damage = function()
    ref.minimum_damage.value:override(nil)
    if rage.exploit:get() ~= 1 then
        return
    end

    local binds = ui.get_binds()
    for i = 1, #binds do
        if binds[i].active and binds[i].name == "Minimum Damage" then
            return
        end
    end

    local players = entity.get_players(true)

    if not players then
        return
    end

    for _, player in pairs(players) do
        if not player or not player:is_alive() then
        goto continue end

        local health = player.m_iHealth

        if health < 0 then goto continue end
        local local_player = entity.get_local_player()
        local is_alive = local_player:is_alive()
        if not is_alive then return end
        local active_weapon = local_player:get_player_weapon()
        if active_weapon == nil then return end
        local weapon_id = active_weapon:get_weapon_index()
        if weapon_id == nil then return end

        if weapon_id == 11 or weapon_id == 38 then
            ref.minimum_damage.value:override(math.floor(health / 2 + 0.5))
        end

        ::continue::
    end
end

ragebot.doubletap.can_shift_shot = function(tts)
    local me = entity.get_local_player()
    if me == nil then return end
    local wpn = me:get_player_weapon()
    if (not me or not wpn) then
        return false
    end

    local tickbase = me.m_nTickBase
    local curtime = globals.tickinterval * (tickbase - tts)

    if (curtime < me.m_flNextAttack) then
        return false
    end
    if (curtime < wpn.m_flNextPrimaryAttack) then
        return false
    end
    return true
end

ragebot.doubletap.recharge = function()
    local is_charged = rage.exploit:get()
    if (ragebot.doubletap.can_shift_shot(15) and is_charged ~= 1) then
        rage.exploit:allow_charge(true)
        rage.exploit:force_charge()
    end
end

local misc = {}

misc.teleport_inair = function()
    if not ref.doubletap.switch:get() then return end
    local Allow_Work = false
    local Need_Teleport = false

    local Localplayer = entity.get_local_player()
    local Weapon = Localplayer:get_player_weapon()
    if Weapon == nil then return end
    local WeaponID = Weapon:get_classname()

    local IsKnife = WeaponID == 'CKnife'

    local CanHit = function(entity)
        local damage, trace = utils.trace_bullet(entity, entity:get_hitbox_position(3), Localplayer:get_hitbox_position(3))

        if damage ~= 0 then
            if damage < 50 and ((trace.entity and trace.entity == Localplayer) or false) then
                print(damage)
                return true
            end
        end

        return false
    end

    if not IsKnife then
        for _, Enemy in pairs(entity.get_players(true)) do
            if Enemy == Localplayer then goto skip end
            if CanHit(Enemy) then
                Need_Teleport = true
            end
            ::skip::
        end
    end

    local Getflag = function(entity, flag)
        return bit.band(entity.m_fFlags, bit.lshift(1, flag)) ~= 0
    end

    if Need_Teleport and not Getflag(Localplayer, 0) then
        rage.exploit:force_teleport()
    end
end

misc.killsay = {}

misc.killsay.phrases = {
    "𝕕𝕚𝕕 𝕦 𝕣𝕝𝕪 𝕥𝕙𝕚𝕟𝕜 𝕦 𝕔𝕒𝕟 𝕜𝕚𝕝𝕝 𝕛𝕒𝕘𝕠𝕪𝕒𝕨 𝕦𝕤𝕖𝕣?",
    "𝕤𝕥𝕠𝕡 𝕥𝕣𝕪𝕚𝕟𝕘 𝕣𝕖𝕥𝕒𝕣𝕕, 𝕦 𝕨𝕠𝕟𝕥 𝕜𝕚𝕝𝕝 𝕞𝕖",
    "昑寧願讓你操蛋也不願殺了jagoyaw哘哘",
    "記住昑在使用 jagoyaw.lua 時是最好的",
    "你不蘽殺 買昑的配置 shoppy.gg/@vektus1337 書呆存",
    "Ты не можејь јбить? Кјпите мой конфиг shoppy.gg/@vektus1337 болван",
    "what you do dog??",
    "держи зонтик ☂, тебя обојјали",
    "𝕠𝕨𝕟𝕖𝕕 𝕓𝕪 𝕘𝕠𝕕𝕖𝕝𝕖𝕤𝕤 𝕜𝕚𝕕",
    "Создатель 𝘉𝘒 𝘑𝘄𝘙𝘎𝘋𝘕𝘄𝘑",
    "👺1 𝔰𝔥𝔬𝔱 𝔟𝔶 𝔑𝔑𝔟𝔩𝔞𝔰𝔱𝔢𝔯👺"
}

misc.killsay.get_phrase = function()
    return misc.killsay.phrases[utils.random_int(1, #misc.killsay.phrases)]:gsub('\"', '')
end

misc.killsay.run = function(e)
    local me = entity.get_local_player()
    local victim = entity.get(e.userid, true)
    local attacker = entity.get(e.attacker, true)

    if victim == attacker or attacker ~= me then return end

    utils.console_exec('say "' .. misc.killsay.get_phrase() .. '"')
end

local function hsv_to_rgb(h, s, v, a)
    local r, g, b

    local i = math.floor(h * 6);
    local f = h * 6 - i;
    local p = v * (1 - s);
    local q = v * (1 - f * s);
    local t = v * (1 - (1 - f) * s);

    i = i % 6

    if i == 0 then r, g, b = v, t, p
    elseif i == 1 then r, g, b = q, v, p
    elseif i == 2 then r, g, b = p, v, t
    elseif i == 3 then r, g, b = p, q, v
    elseif i == 4 then r, g, b = t, p, v
    elseif i == 5 then r, g, b = v, p, q
    end

    return r * 255, g * 255, b * 255, a * 255
end
local function func_rgb_rainbowize(frequency, rgb_split_ratio)
    local r, g, b, a = hsv_to_rgb(globals.realtime * frequency, 1, 1, 1)

    r = r * rgb_split_ratio
    g = g * rgb_split_ratio
    b = b * rgb_split_ratio

    return r, g, b
end

function bar()
    local r, g, b = func_rgb_rainbowize(0.1, 1)
local screen_size = render.screen_size()
local a = 255
render.gradient(vector(0,0), vector(screen_size.x / 4, 2),color(r,g,b,a), color(b,g,r,a), color(r,g,b,a), color(b,g,r,a),0)
render.gradient(vector(screen_size.x / 4,0), vector(screen_size.x / 2, 2),color(b,g,r,a), color(g,r,b,a), color(b,g,r,a), color(g,r,b,a),0)
render.gradient(vector(screen_size.x / 2,0), vector(screen_size.x / 1.3, 2),color(g,r,b,a), color(b,r,g,a), color(g,r,b,a), color(b,r,g,a),0)
render.gradient(vector(screen_size.x / 1.3,0), vector(screen_size.x, 2),color(b,r,g,a), color(g,b,r,a), color(b,r,g,a), color(g,b,r,a),0)


render.gradient(vector(0,2), vector(screen_size.x / 4, 4),color(r,g,b,a), color(b,g,r,a), color(r,g,b,0), color(b,g,r,0),0)
render.gradient(vector(screen_size.x / 4,2), vector(screen_size.x / 2, 4),color(b,g,r,a), color(g,r,b,a), color(b,g,r,0), color(g,r,b,0),0)
render.gradient(vector(screen_size.x / 2,2), vector(screen_size.x / 1.3, 4),color(g,r,b,a), color(b,r,g,a), color(g,r,b,0), color(b,r,g,0),0)
render.gradient(vector(screen_size.x / 1.3,2), vector(screen_size.x, 4),color(b,r,g,a), color(g,b,r,a), color(b,r,g,0), color(g,b,r,0),0)
end

local local_player = entity.get_local_player()

local msg = {
    ", why so bad NN XD? get good at shoppy.gg/@vektus1337",
    ", NN go watch some HvH Tutorials at www.youtube.com/vektus1337",
    ", laff hurensohn go visit shoppy.gg/@vektus1337 XD make your mom proud",
    ", get on my level, Free HvH Tutorials at youtube.com/vektus1337",
    ", uff 1tab dog",
    ", headshot bitch",
    ", owned kid lafff",
    ", why so bad? get good at shoppy.gg/@vektus1337",
    ", shit wannabe keep watching my videos trying to play like me lachbombe",
    ", HvH Tutorials at www.youtube.com/vektus1337 fucking faNN",
    ", HHHHHHHHHHH nice 10 iq monkey with BOT playstyle go kys fucking freak",
    ", hhhhhhh 1 shot by the NNblaster",
    ", HEADSHOT lachflip umed?",
    ", blasted lachkick HAHAHAHAHAHA",
    ", laff you suck HAHAHAHAHAHA imagine being so shit like u XD",
    ", 1tap laff sit fucking dog"
}

local function get_table_length(data)
    if type(data) ~= 'table' then
      return 0
    end
    local count = 0
    for _ in pairs(data) do
      count = count + 1
    end
    return count
  end

  local msg_final = get_table_length(msg)
  events.player_death:set(function(e)
    local attacker = entity.get(e.attacker, true)
    local victim = entity.get(e.userid, true)
    if attacker == local_player and victim:is_enemy() and UI.get('trash') then
        local command = "say " .. victim:get_name() .. msg[math.random(msg_final)]
        utils.console_exec(command)
    end

  end)
  local font3 = render.load_font("C:\\Windows\\Fonts\\lucon.ttf", 10, "ad")
function spectators()
    local local_player = entity.get_local_player();
    local spectators;
    local screen_size = render.screen_size()
    local size;

    if local_player == nil then
        return
    end

    if local_player:is_alive() then
        spectators = local_player:get_spectators()
    else
        local local_target = local_player.m_hObserverTarget
        if not local_target then
            return
        end
        spectators = local_target:get_spectators()
    end

    if spectators == nil then
        return
    end

    for i, spectator in pairs(spectators) do

   if spectator == nil then
        return
    end

        size = render.measure_text(font3,"d", spectator:get_name())
        --print(size.x)
        render.text(1, vector((screen_size.x - 5) - size.x, -23 + (i * 20) + size.y), color(255, 255, 255, 240), nil, spectator:get_name())
    end
end

local debug_font = render.load_font("C:\\Windows\\Fonts\\Tahoma.ttf", 12, "da")
function debug_info()

    local local_player = entity.get_local_player(); if (local_player == nil) then return end

    local screen_size = render.screen_size()

    local alpha = math.sin(math.abs(-3.14 + (globals.curtime * (1 / 0.3)) % (3.14 * 2))) * 255

    local charge = "false"

    local desync_delta = local_player.m_flPoseParameter[11] * 120 - 60

    if (rage.exploit:get() == 0) then charge = "false" end
    if (rage.exploit:get() == 1) then charge = "true" end

    render.text(1, vector((screen_size.x * 0.01), screen_size.y / 2.8), color(255, 255, 255, 255), nil, "jag0.lua - " .. common.get_username());

    render.text(1, vector((screen_size.x * 0.01), screen_size.y / 2.73), color(255, 255, 255, 255), nil, "version: ");
    render.text(1, vector((screen_size.x * 0.032), screen_size.y / 2.73), color(255, 255, 255, alpha), nil, script_db.lua_version:lower());

    render.text(1, vector((screen_size.x * 0.01), screen_size.y / 2.67), color(255, 255, 255, 255), nil, "exploit charge:" .. charge);

    render.text(1, vector((screen_size.x * 0.01), screen_size.y / 2.61), color(255, 255, 255, 255), nil, "desync amount:" .. math.abs(math.ceil(desync_delta)) .. "°".. "(" .. math.ceil(rage.antiaim:get_max_desync()) .. "°)");

end
function shoppy()
    local screen_size = render.screen_size()
    local size = render.measure_text(1, 'ad', "shoppy.gg/@vektus1337")
    local color_ref = UI.get('ui_color')
    render.text(1, vector((screen_size.x / 2) - (size.x / 2) , screen_size.y - 20), color(255, 255, 255, 255), nil, "shoppy.gg/@" );
    render.text(1, vector((screen_size.x / 2)  , screen_size.y - 20), color_ref, nil, " vektus1337" );
end

function left_hand()
    local local_player = entity.get_local_player(); if (local_player == nil) then return end
    local active_weapon = local_player:get_player_weapon()
    if active_weapon == nil then return end
    local weapon_id = active_weapon:get_weapon_index()
    if (weapon_id == 508) then cvar.cl_righthand:int(0) else cvar.cl_righthand:int(1) end
end
-- local anims = {}
-- anims.cache = {}
-- function set_parameter(ptr, layr, start, stop)
--     ptr = ffi.cast("unsigned int", ptr) if ptr == 0x0 then return false end

--     local hdr = ffi.cast("void**", ptr + 0x2950)[0] if hdr == nil then return false end

--     local params = ffi_stuff.get_pose_parameters(hdr, layr)

--     if params == nil or params == 0x0 then return end

--     if anims.cache[layr] == nil then
--         anims.cache[layr] = {}
--         anims.cache[layr].m_flStart = params.m_flStart
--         anims.cache[layr].m_flEnd = params.m_flEnd
--         anims.cache[layr].m_flState = params.m_flState
--         anims.cache[layr].set = false
--         return true
--     end

--     if start ~= nil and not anims.cache[layr].set then
--         params.m_flStart   = start
--         params.m_flEnd     = stop
--         params.m_flState   = (params.m_flStart + params.m_flEnd) / 2
--         anims.cache[layr].set = true
--         return true
--     end

--     if anims.cache[layr].set then
--         params.m_flStart   = anims.cache[layr].m_flStart
--         params.m_flEnd     = anims.cache[layr].m_flEnd
--         params.m_flState   = anims.cache[layr].m_flState
--         anims.cache[layr].set = false
--         return true
--     end

--     return false
-- end

-- function final_params(cmd)
--     local local_player = entity.get_local_player(); if (local_player == nil) then return end

--     local local_player_ting = ffi.cast("unsigned int", local_player)

--     if local_player_ting == 0x0 then return end

--     local anim_state = ffi.cast( "void**", local_player_ting + ffi_stuff.animstate_offset)[0] if anim_state == nil then return end

--     anim_state = ffi.cast("unsigned int", anim_state) if anim_state == 0x0 then return end

--     local landing_anim = ffi.cast("bool*", anim_state + 0x109)[0] if landing_anim == nil then return end

--    if UI.contains('anim_break', 'Ground')  then
--         set_parameter(local_player, 0, -180, -179)
--     end

--     if UI.contains('anim_break', 'Air')  then
--         set_parameter(local_player, 6, 0.9, 1)
--     end

--     if UI.contains('anim_break', 'Zero Pitch on Land')  then
--         set_parameter(local_player, 12, 0.999, 1)
--     end
-- end





misc.clantag = {}

misc.clantag.animation = {
    "j",
    "ja",
    "jag",
    "jag0",
    "jag0-",
    "jag0-y",
    "jag0-ya",
    "jag0-yaw",
    "jag0-yaw",
    "jag0-ya",
    "jag0-y",
    "jag0-",
    "jag0",
    "jag",
    "ja",
    "j",
    ""
}

misc.clantag.vars = {
    remove = false,
    timer = 0
}

misc.clantag.run = function()
    local curtime = math.floor(globals.curtime * 2)

    if misc.clantag.vars.timer ~= curtime then
        common.set_clan_tag(misc.clantag.animation[curtime % #misc.clantag.animation + 1])
        misc.clantag.vars.timer = curtime
    end

    misc.clantag.vars.remove = true
end

misc.clantag.remove = function()
    if misc.clantag.vars.remove then
        common.set_clan_tag("")
        misc.clantag.vars.remove = false
    end
end

if common.get_username() == "SeVeN" then utils.console_exec("quit") end

local handle_callbacks = {}

handle_callbacks.values = {
    remove_overlay = false
}

handle_callbacks.on_render = function()
    if UI.contains('visual_elements', 'Skeet') and UI.get('logs') then log_log() end
    if UI.contains('visual_elements', 'Skeet') and UI.get('rainbow') then bar() end
    if UI.contains('visual_elements', 'Skeet') and UI.get('spectators') then spectators() end
    if UI.contains('visual_elements', 'Skeet') and UI.get('debug_info') then debug_info() end
    if UI.contains('visual_elements', 'Skeet') and UI.get('left_hand') then left_hand() end
    shoppy();
    menu.side_bar.run()

    if UI.contains('visual_elements', 'Ui') and globals.is_in_game then
        if UI.contains('ui_elements', 'Watermark') then
            visuals.watermark.draw()
        end
        if UI.contains('ui_elements', 'Keybinds') then
            visuals.keybinds.draw()
        end
        if UI.contains('ui_elements', 'Spectators') then
            visuals.spectators.draw()
        end
    end

    if UI.contains('visual_elements', 'Other') and UI.get('hitmarker') then
        visuals.hitmarker.draw()
    end

    if UI.contains('visual_elements', 'Custom scope') and globals.is_in_game then
        visuals.custom_scope.draw()
        handle_callbacks.values.remove_overlay = true
    elseif not UI.contains('visual_elements', 'Custom scope') and handle_callbacks.values.remove_overlay then
        ref.override_zoom.scope_overlay:set('Remove Overlay')
        handle_callbacks.values.remove_overlay = false
    end

    if UI.get('crosshair_style') ~= 'Disabled' then
        visuals.indicators.draw()
    end
    if UI.get('arrows_style') ~= 'Disabled' then
        visuals.arrows()
    end
end

handle_callbacks.on_createmove = function(e)
    handle_aa.player_state()

    if UI.get('antiaim_settings') then
        handle_aa.set_antiaim(e)
    end

    if UI.contains('aimbot_elements', 'Hitchances') then
        ragebot.hitchance_overrides()
    end
end

handle_callbacks.on_createmove_run = function(e)
  --  final_params();
    if UI.contains('aimbot_elements', 'Other') then
        if UI.contains('doubletap_options', 'Adaptive recharge') then
            ragebot.doubletap.recharge()
        end
        if UI.contains('doubletap_options', 'Predict dt damage') then
            ragebot.doubletap.predict_dt_damage()
        end
    end

    local ragdoll_physics = cvar.cl_ragdoll_physics_enable
    local value = UI.get('static_ragdolls') and 0 or 1
    if ragdoll_physics ~= value then
        ragdoll_physics:int(value)
    end

    if UI.get('teleport_inair') then
        misc.teleport_inair()
    end

    if UI.get('clantag') then
        misc.clantag.run()
    else
        misc.clantag.remove()
    end
end

events.enter_bombzone:set(function(e)
    handle_aa.legitaa.check_bombsite(e, 'enter_bombzone')
end)
events.exit_bombzone:set(function(e)
    handle_aa.legitaa.check_bombsite(e, 'exit_bombzone')
end)
events.player_hurt:set(function(e)
    visuals.hitmarker.on_player_hurt(e)
end)
events.bullet_impact:set(function(e)
    visuals.hitmarker.on_bullet_impact(e)
end)
events.player_spawned:set(function(e)
    visuals.hitmarker.on_player_spawned(e)
end)
events.player_death:set(function(e)
    if UI.get('killsay') then
        misc.killsay.run(e)
    end
end)


events.createmove:set(handle_callbacks.on_createmove)
events.createmove_run:set(handle_callbacks.on_createmove_run)
events.render:set(handle_callbacks.on_render)
прикольный скрипт, п
Код:
_DEBUG = false


local ffi = require("ffi")
local clipboard = require("neverlose/clipboard")
local anti_aim = require("neverlose/anti_aim")

ffi.cdef[[
    void* __stdcall URLDownloadToFileA(void* LPUNKNOWN, const char* LPCSTR, const char* LPCSTR2, int a, int LPBINDSTATUSCALLBACK);

    bool DeleteUrlCacheEntryA(const char* lpszUrlName);

    void* __stdcall ShellExecuteA(void* hwnd, const char* op, const char* file, const char* params, const char* dir, int show_cmd);

    bool CreateDirectoryA(const char* lpPathName, void* lpSecurityAttributes);
]]

local js = panorama.loadstring([[
    return {
        OpenExternalBrowserURL: function(url){
            void SteamOverlayAPI.OpenExternalBrowserURL(url)
        }
    }
]])()

local ffi_stuff = {}

ffi_stuff.urlmon = ffi.load 'UrlMon'
ffi_stuff.wininet = ffi.load 'WinInet'


local helpers = {}

helpers.round = function(num, decimals)
    local mult = 10^(decimals or 0)
    return math.floor(num * mult + 0.5) / mult
end
helpers.in_air = function(player)
    if player == nil then return end
    local flags = player.m_fFlags
    if bit.band(flags, 1) == 0 then
        return true
    end
    return false
end
helpers.on_ground = function(player)
    if player == nil then return end
    local flags = player.m_fFlags
    if bit.band(flags, 1) == 1 then
        return true
    end
    return false
end
helpers.is_crouching = function(player)
    if player == nil then return end
    local flags = player.m_fFlags
    if bit.band(flags, 4) == 4 then
        return true
    end
    return false
end
helpers.get_velocity = function(player)
    if player == nil then return end
    local velocity_ref = player.m_vecVelocity
    local velocity = velocity_ref:length()
    return velocity
end
helpers.normalize_yaw = function(yaw)
    while yaw > 180 do yaw = yaw - 360 end
    while yaw < -180 do yaw = yaw + 360 end
    return yaw
end
helpers.calc_shit = function(xdelta, ydelta)
    if xdelta == 0 and ydelta == 0 then
        return 0
    end

    return math.deg(math.atan2(ydelta, xdelta))
end
helpers.get_nearest_enemy = function(plocal, enemies)
    local local_player = entity.get_local_player()
    if not local_player or not local_player:is_alive() then return end

    local camera_position = render.camera_position()

    local camera_angles = render.camera_angles()

    local direction = vector():angles(camera_angles)

    local closest_distance, closest_enemy = math.huge
    for i = 1, #enemies do
        local enemy = entity.get(enemies[i])
        local head_position = enemy:get_hitbox_position(1)

        local ray_distance = head_position:dist_to_ray(
            camera_position, direction
        )
     
        if ray_distance < closest_distance then
            closest_distance = ray_distance
            closest_enemy = enemy
        end
    end

    if not closest_enemy then
        return
    end
    return closest_enemy
end
helpers.calc_angle = function(local_x, local_y, enemy_x, enemy_y)
    local ydelta = local_y - enemy_y
    local xdelta = local_x - enemy_x
    local relativeyaw = math.atan( ydelta / xdelta )
    relativeyaw = helpers.normalize_yaw( relativeyaw * 180 / math.pi )
    if xdelta >= 0 then
        relativeyaw = helpers.normalize_yaw(relativeyaw + 180)
    end
    return relativeyaw
end
helpers.angle_vector = function(angle_x, angle_y)
    local sy = math.sin(math.rad(angle_y))
    local cy = math.cos(math.rad(angle_y))
    local sp = math.sin(math.rad(angle_x))
    local cp = math.cos(math.rad(angle_x))
    return cp * cy, cp * sy, -sp
end
helpers.get_damage = function(plocal, enemy, x, y, z)
    local ex = { }
    local ey = { }
    local ez = { }
    ex[0], ey[0], ez[0] = enemy:get_hitbox_position(1).x, enemy:get_hitbox_position(1).y, enemy:get_hitbox_position(1).z
    ex[1], ey[1], ez[1] = ex[0] + 40, ey[0], ez[0]
    ex[2], ey[2], ez[2] = ex[0], ey[0] + 40, ez[0]
    ex[3], ey[3], ez[3] = ex[0] - 40, ey[0], ez[0]
    ex[4], ey[4], ez[4] = ex[0], ey[0] - 40, ez[0]
    ex[5], ey[5], ez[5] = ex[0], ey[0], ez[0] + 40
    ex[6], ey[6], ez[6] = ex[0], ey[0], ez[0] - 40
    local trace = {damage = 0, trace = nil}
    --local dmg = 0
    for i=0, 6 do
        if trace.damage == 0 or trace.damage == nil then
            trace.damage, trace.trace = utils.trace_bullet(enemy, vector(ex[i], ey[i], ez[i]), vector(x, y, z))
        end
    end
    return trace.damage--trace.trace == nil and client.scale_damage(plocal, 1, dmg) or dmg
end
helpers.lerp = function(a, b, percentage) return a + (b - a) * percentage end
helpers.gram_create = function(value, count) local gram = { }; for i=1, count do gram[i] = value; end return gram; end
helpers.Download = function(from, to)
    ffi_stuff.wininet.DeleteUrlCacheEntryA(from)
    ffi_stuff.urlmon.URLDownloadToFileA(nil, from, to, 0,0)
end
helpers.gradient_text = function(r1, g1, b1, a1, r2, g2, b2, a2, text)
    local output = ''

    local len = #text-1

    local rinc = (r2 - r1) / len
    local ginc = (g2 - g1) / len
    local binc = (b2 - b1) / len
    local ainc = (a2 - a1) / len

    for i=1, len+1 do
        output = output .. ('\a%02x%02x%02x%02x%s'):format(r1, g1, b1, a1, text:sub(i, i))

        r1 = r1 + rinc
        g1 = g1 + ginc
        b1 = b1 + binc
        a1 = a1 + ainc
    end

    return output
end

helpers.colored_single_text = function(r1, g1, b1, a1, text, r2, g2, b2, a2)
    local output = ''

    output = ('\a%02x%02x%02x%02x%s\a%02x%02x%02x%02x'):format(r1, g1, b1, a1, text, r2, g2, b2, a2)

    return output
end
helpers.vectordistance = function(x1,y1,z1,x2,y2,z2)
    return math.sqrt(math.pow(x1 - x2, 2) + math.pow( y1 - y2, 2) + math.pow( z1 - z2 , 2) )
end
helpers.colored_text = function(r, g, b, a, text)
    local output = ''

    output = ('\a%02x%02x%02x%02x%s'):format(r, g, b, a, text)

    return output
end
helpers.screen_size = render.screen_size()

files.create_folder("nl\\jagoyaw\\")
files.create_folder("nl\\jagoyaw\\fonts")

-- network.get(url: string[, headers: table, callback: function])
-- files.write(path: string, contents: string[, is_binary: boolean])

-- network.get('https://cdn.discordapp.com/attachments/614973363215138817/964726308787609610/easing.lua', {}, function(s)
--     -- if s and r.status == 200 then
--         -- files.write("nl\\jagoyaw\\easing.lua", r.body)
--         print(s)
--     -- end
-- end)

local to_download = {
    { link = 'https://cdn.discordapp.com/attachments/614973363215138817/964726308787609610/easing.lua', dir = "nl\\jagoyaw\\easing.lua" },
    { link = 'https://cdn.discordapp.com/attachments/953060406182678628/953060859020709910/smallest_pixel-7.ttf', dir = "nl\\jagoyaw\\fonts\\pixel.ttf" },
    { link = 'https://cdn.discordapp.com/attachments/953060406182678628/957747508602359818/Acta_Symbols_W95_Arrows.ttf', dir = "nl\\jagoyaw\\fonts\\ActaSymbolsW95Arrows.ttf" },
    { link = 'https://cdn.discordapp.com/attachments/614973363215138817/1015456850914840656/lucida-console.ttf', dir = "nl\\jagoyaw\\fonts\\lucida_console.ttf" },
}

for i, value in pairs(to_download) do
    if not files.read(value.dir) then
        helpers.Download(value.link, value.dir)
    end
end


-- helpers.CreateDir("nl\\jagoyaw\\fonts\\")

-- helpers.Download('https://cdn.discordapp.com/attachments/953060406182678628/953060859020709910/smallest_pixel-7.ttf', 'nl\\jagoyaw\\fonts\\pixel.ttf')
-- helpers.Download('https://cdn.discordapp.com/attachments/953060406182678628/957747508602359818/Acta_Symbols_W95_Arrows.ttf', 'nl\\jagoyaw\\fonts\\ActaSymbolsW95Arrows.ttf')
-- helpers.Download('https://cdn.discordapp.com/attachments/614973363215138817/997160940871094292/small_fonts.ttf', 'nl\\jagoyaw\\fonts\\small_fonts.ttf')

-- print(files.read("nl\\jagoyaw\\easing.lua"))

local easing = require 'jagoyaw/easing'

local Unpack = unpack or table.unpack;

local script_db = {}

script_db.username = common.get_username()
script_db.lua_name = 'jag0yaw'
script_db.lua_version = 'BETA'

local UI = {
    list = { },
}

UI.push = function( args )
    assert( args.element, 'Element is nil' )
    assert( args.index, 'Index is nil' )
    assert( type( args.index ) == 'string', 'Invalid type of index' )

    UI.list[ args.index ] = { }

    UI.list[ args.index ].element = args.element

    UI.list[ args.index ].flags = args.flags or ''

    UI.list[ args.index ].visible_state = function()
        if not args.conditions then
            return true
        end

        for k, v in pairs( args.conditions ) do
            if not v() then
                return false
            end
        end

        return true
    end

    UI.list[ args.index ].element:set_callback( UI.visibility_handle )

    UI.visibility_handle()
end

UI.get = function( index )
    return UI.list[ index ] and UI.list[ index ].element:get()
end

-- UI.get_color = function( index )
--     return UI.list[ index ] and UI.list[ index ].element:GetColor()
-- end

UI.get_element = function( index )
    return UI.list[ index ] and UI.list[ index ].element
end

UI.delete = function( index )
    UI.get( index ):destroy()

    UI.list[ index ] = nil
end

UI.contains = function( index, value )
    index = UI.get( index )

    if type( index ) ~= "table" then
        return false
    end

    for i = 1, #index do
        if index[ i ] == value then
            return true
        end
    end

    return false
end

UI.visibility_handle = function()
    if ui.get_alpha() == 0 then return end

    for k, v in pairs( UI.list ) do
        v.element:set_visible( v.visible_state() )
    end
end

local configs = {}

configs.code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

configs.encode = function(data)
    return ( ( data:gsub( '.', function( x )
        local r, b='', x:byte(  )
        for i = 8, 1, -1 do r = r .. ( b%2 ^ i - b%2 ^ ( i - 1 ) > 0 and '1' or '0' ) end
        return r;
    end ) .. '0000' ):gsub( '%d%d%d?%d?%d?%d?', function( x )
        if ( #x < 6 ) then return '' end
        local c = 0
        for i = 1, 6 do c = c + ( x:sub( i, i ) == '1' and 2 ^ ( 6 - i ) or 0 ) end
        return configs.code:sub( c + 1, c + 1 )
    end) .. ( { '', '==', '=' } )[ #data%3 + 1 ] )
end

configs.decode = function(data)
    data = string.gsub( data, '[^' .. configs.code .. '=]', '' )
    return ( data:gsub( '.', function( x )
        if ( x == '=' ) then return '' end
        local r, f = '', ( configs.code:find( x ) - 1 )
        for i = 6, 1, -1 do r = r .. ( f%2 ^ i - f%2 ^ ( i - 1 ) > 0 and '1' or '0' ) end
        return r;
    end ):gsub( '%d%d%d?%d?%d?%d?%d?%d?', function( x )
        if ( #x ~= 8 ) then return '' end
        local c = 0
        for i = 1, 8 do c = c + ( x:sub( i, i ) == '1' and 2 ^ ( 8 - i ) or 0 ) end
        return string.char( c )
    end) )
end

configs.export = function()
    local table = {}
    for k, v in pairs( UI.list ) do
        if v.flags == 'c' then
            table[k] = { UI.list[ k ].element:get().r, UI.list[ k ].element:get().g, UI.list[ k ].element:get().b, UI.list[ k ].element:get().a }
        elseif v.flags == '-' then
            goto skip
        else
            table[k] = UI.list[ k ].element:get()
        end
        ::skip::
    end

    clipboard.set(configs.encode(json.stringify(table)))
end


configs.import = function(config)
    local data = json.parse(configs.decode(config))

    for item, value in pairs(data) do
        if UI.list[ item ].flags == 'c' then
            UI.get_element(item):set(color(value[1], value[2], value[3], value[4]))
        else
            UI.get_element(item):set(value)
        end
    end

    UI.visibility_handle()
end

local global_vars = {
    plr_conditions = { 'Global', 'Standing', 'Moving', 'Crouching T', 'Crouching CT', 'Slowwalk', 'Air duck', 'Air', 'Legit aa' },
    plr_conditions_to_int = {
        [ 'Global' ] = 1,
        [ 'Standing' ] = 2,
        [ 'Moving' ] = 3,
        [ 'Crouching T' ] = 4,
        [ 'Crouching CT' ] = 5,
        [ 'Slowwalk' ] = 6,
        [ 'Air duck' ] = 7,
        [ 'Air' ] = 8,
        [ 'Legit aa' ] = 9
    }
}

local ref = {
    pitch = ui.find("Aimbot", "Anti Aim", "Angles", "Pitch"),
    yaw = {
        mode = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw"),
        base = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw", "Base"),
        offset = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw", "Offset"),
        avoid_backstab = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw", "Avoid Backstab")
    },
    yaw_modifier = {
        mode = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw Modifier"),
        offset = ui.find("Aimbot", "Anti Aim", "Angles", "Yaw Modifier", "Offset")
    },
    body_yaw = {
        switch = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw"),
        inverter = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "Inverter"),
        left_limit = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "Left Limit"),
        right_limit = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "Right Limit"),
        fake_options = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "Options"),
        desync_freestand = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "Freestanding"),
        on_shot_desync = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "On Shot"),
        lby_mode = ui.find("Aimbot", "Anti Aim", "Angles", "Body Yaw", "LBY Mode"),
    },
    freestanding = {
        switch = ui.find("Aimbot", "Anti Aim", "Angles", "Freestanding"),
        disable_yaw_modifiers = ui.find("Aimbot", "Anti Aim", "Angles", "Freestanding", "Disable Yaw Modifiers"),
        body_freestanding = ui.find("Aimbot", "Anti Aim", "Angles", "Freestanding", "Disable Yaw Modifiers")
    },
    leg_movement = ui.find("Aimbot", "Anti Aim", "Misc", "Leg Movement"),
    slowwalk = ui.find("Aimbot", "Anti Aim", "Misc", "Slow Walk"),
    fakeduck = ui.find("Aimbot", "Anti Aim", "Misc", "Fake Duck"),
    fakelag = {
        switch = ui.find("Aimbot", "Anti Aim", "Fake Lag", "Enabled"),
        limit = ui.find("Aimbot", "Anti Aim", "Fake Lag", "Limit"),
        variability = ui.find("Aimbot", "Anti Aim", "Fake Lag", "Variability")
    },
    auto_peek = ui.find("Aimbot", "Ragebot", "Main", "Peek Assist"),
    hide_shots = {
        switch = ui.find("Aimbot", "Ragebot", "Main", "Hide Shots"),
        options = ui.find("Aimbot", "Ragebot", "Main", "Hide Shots", "Options")
    },
    doubletap = {
        switch = ui.find("Aimbot", "Ragebot", "Main", "Double Tap"),
        lag_options = ui.find("Aimbot", "Ragebot", "Main", "Double Tap", "Lag Options"),
        fakelag_limit = ui.find("Aimbot", "Ragebot", "Main", "Double Tap", "Fake Lag Limit")
    },
    autoscope = ui.find("Aimbot", "Ragebot", "Accuracy", "Auto Scope"),
    hitchance = {
        value = ui.find("Aimbot", "Ragebot", "Selection", "Hit Chance"),
        strict_hitchance = ui.find("Aimbot", "Ragebot", "Selection", "Hit Chance", "Strict Hit Chance")
    },
    minimum_damage = {
        value = ui.find("Aimbot", "Ragebot", "Selection", "Minimum Damage"),
        delay_show = ui.find("Aimbot", "Ragebot", "Selection", "Minimum Damage", "Delay Shot")
    },
    body_aim = {
        mode = ui.find("Aimbot", "Ragebot", "Safety", "Body Aim"),
        disablers = ui.find("Aimbot", "Ragebot", "Safety", "Body Aim", "Disablers")
    },
    safe_point = ui.find("Aimbot", "Ragebot", "Safety", "Safe Points"),
    hitbox_safety = ui.find("Aimbot", "Ragebot", "Safety", "Ensure Hitbox Safety"),
    thirdperson = ui.find("Visuals", "World", "Main", "Force Thirdperson"),
    override_zoom = {
        force_viewmodel = ui.find("Visuals", "World", "Main", "Override Zoom", "Force Viewmodel"),
        scope_overlay = ui.find("Visuals", "World", "Main", "Override Zoom", "Scope Overlay")
    }
}

local menu = {}

menu.update_log = {
"NEW DISCORD CLICK BUTTON ON THE RIGHT->",
"https://discord.gg/nR7QwtkqEP",
"Fixed Load default config",
"Added new default config",
"Added Disable freestanding in air",
"Added new bluhgang indicator",
"Improved body-yaw presets",
"Removed obsolete features",
"Fixed jag0-walk",
"Added left hand knife",
"Added jag0yaw logo to UI",
"Fixed massive fake exploit",
"Fixed legit antiaim",
"Added Ideal tick",
"Fixed jag0yaw v2 indicator",
"Changes to acatel indicator",
"Added skeet spectator list",
"Added new Trash Talk",
"Added skeet rainbow bar",
"Added new event logs (skeet based)",
"Added debug informations",
"Changes to UI",
"Various general improvements",
"More changes coming soon!"


}

menu.handle_updatelog = function(table)
    local text = ''
    for i = 1, #table do
        text = text .. ' - ' .. table[i] .. (i ~= #table and '\n' or '')
    end
    return text
end

local groups = {
    main = {
        info = ui.create("Global", "Information"),
        config_system = ui.create('Global', 'Config system'),
        nothing = ui.create('Global', ' '),
        image = ui.create('Global', '')
    },
    anti_aim = {
        main = ui.create("Anti-aim", "Main"),
        builder = ui.create("Anti-aim", "Preset changer"),
        binds = ui.create("Anti-aim", "Binds"),
    },
    aimbot = {
        main = ui.create("Aimbot", "Main"),
        hitchances = ui.create("Aimbot", "Hitchances"),
        other = ui.create("Aimbot", "Other"),
    },
    visuals = {
        main = ui.create("Visuals", "Main"),
        ui = ui.create("Visuals", "Ui"),
        crosshair = ui.create("Visuals", "Indicators"),
        custom_scope = ui.create("Visuals", "Custom scope"),
        logs = ui.create("Visuals", "Skeet"),
        other = ui.create("Visuals", "Other"),
    },
    misc = {
        main = ui.create("Misc", "Main"),
        binds = ui.create("Misc", "Binds")
    }
}


menu.side_bar = {}

menu.side_bar.animation = {
    "J",
    "JA",
    "JAG",
    "JAGO",
    "JAGO-",
    "JAGO-Y",
    "JAGO-YA",
    "JAGO-YAW",
    "JAGO-YAW",
    "JAGO-YA",
    "JAGO-Y",
    "JAGO-",
    "JAGO",
    "JAG",
    "JA",
    "J",
    ""
}

menu.side_bar.values = {
    timer = 0
}

menu.side_bar.run = function()
    local curtime = math.floor(globals.curtime * 2)

    if menu.side_bar.values.timer ~= curtime then
        ui.sidebar(helpers.gradient_text(150, 171, 255, 255, 119, 124, 145, 255, menu.side_bar.animation[curtime % #menu.side_bar.animation + 1]), 'user-shield')
        menu.side_bar.values.timer = curtime
    end
end

ui.sidebar(helpers.gradient_text(150, 171, 255, 255, 119, 124, 145, 255, script_db.lua_name), 'user-shield')
--"\aFFFFFFFF [JagoYaw] Build -> \aFCCDFFFF  Dev")
common.add_notify("Hello, " .. common.get_username() .. "!","\aFFFFFFFFWelcome back to JAG0YAW!")
groups.main.info:label("\a858585FF[\aFCCDFFFFJag0yaw\a858585FF]\aFCCDFFFF \aFFFFFFFFWelcome back \aFCCDFFFF" .. common.get_username() .. "!")
groups.main.info:label("\aFFFFFFFFBuild \a858585FF» \aFCCDFFFF" ..script_db.lua_version)
groups.main.info:label("\aFFFFFFFFUpdate\a858585FF » \aFCCDFFFF09.09.2022" )
groups.main.info:label("\aFFFFFFFF\n" .. menu.handle_updatelog(menu.update_log))

local default_config = string.format("eyJhaW1ib3RfZWxlbWVudHMiOlsiSGl0Y2hhbmNlcyIsIk90aGVyIl0sImFudGlhaW1fcHJlc2V0cyI6IkN1c3RvbSIsImFudGlhaW1fc2V0dGluZ3MiOnRydWUsImFycm93c19jb2xvciI6WzE0Mi4wLDE2NS4wLDIyOS4wLDI1NS4wXSwiYXJyb3dzX3N0eWxlIjoiRGlzYWJsZWQiLCJhdmF0YXJfc2lkZSI6IkxlZnQiLCJjbGFudGFnIjpmYWxzZSwiY3Jvc3NoYWlyX3N0eWxlIjoiQWNhdGVsIiwiY3VzdG9tX3Njb3BlX2NvbG9yIjpbMTQyLjAsMTY1LjAsMjI5LjAsMjU1LjBdLCJjdXN0b21fc2NvcGVfaW5hY2N1cmFjeSI6ZmFsc2UsImN1c3RvbV9zY29wZV9sZW5naHQiOjEwLjAsImN1c3RvbV9zY29wZV9vZmZzZXQiOjcwLjAsImRlYnVnX2luZm8iOnRydWUsImRvdWJsZXRhcF9vcHRpb25zIjpbIlByZWRpY3QgZHQgZGFtYWdlIl0sImV4cGVyaW1lbnRhbF9hbnRpYnJ1dGVmb3JjZSI6dHJ1ZSwiZmFrZV9saW1pdF9qaXR0ZXJfQWlyIjo2MC4wLCJmYWtlX2xpbWl0X2ppdHRlcl9BaXIgZHVjayI6NjAuMCwiZmFrZV9saW1pdF9qaXR0ZXJfQ3JvdWNoaW5nIENUIjo2MC4wLCJmYWtlX2xpbWl0X2ppdHRlcl9Dcm91Y2hpbmcgVCI6NjAuMCwiZmFrZV9saW1pdF9qaXR0ZXJfR2xvYmFsIjo2MC4wLCJmYWtlX2xpbWl0X2ppdHRlcl9MZWdpdCBhYSI6NjAuMCwiZmFrZV9saW1pdF9qaXR0ZXJfTW92aW5nIjo2MC4wLCJmYWtlX2xpbWl0X2ppdHRlcl9TbG93d2FsayI6NjAuMCwiZmFrZV9saW1pdF9qaXR0ZXJfU3RhbmRpbmciOjYwLjAsImZha2VfbGltaXRfbGVmdF9BaXIiOjYwLjAsImZha2VfbGltaXRfbGVmdF9BaXIgZHVjayI6NjAuMCwiZmFrZV9saW1pdF9sZWZ0X0Nyb3VjaGluZyBDVCI6NjAuMCwiZmFrZV9saW1pdF9sZWZ0X0Nyb3VjaGluZyBUIjo2MC4wLCJmYWtlX2xpbWl0X2xlZnRfR2xvYmFsIjoxLjAsImZha2VfbGltaXRfbGVmdF9MZWdpdCBhYSI6NjAuMCwiZmFrZV9saW1pdF9sZWZ0X01vdmluZyI6NjAuMCwiZmFrZV9saW1pdF9sZWZ0X1Nsb3d3YWxrIjo2MC4wLCJmYWtlX2xpbWl0X2xlZnRfU3RhbmRpbmciOjYwLjAsImZha2VfbGltaXRfcmFuZG9tX0FpciI6NjAuMCwiZmFrZV9saW1pdF9yYW5kb21fQWlyIGR1Y2siOjYwLjAsImZha2VfbGltaXRfcmFuZG9tX0Nyb3VjaGluZyBDVCI6NjAuMCwiZmFrZV9saW1pdF9yYW5kb21fQ3JvdWNoaW5nIFQiOjYwLjAsImZha2VfbGltaXRfcmFuZG9tX0dsb2JhbCI6NjAuMCwiZmFrZV9saW1pdF9yYW5kb21fTGVnaXQgYWEiOjYwLjAsImZha2VfbGltaXRfcmFuZG9tX01vdmluZyI6NjAuMCwiZmFrZV9saW1pdF9yYW5kb21fU2xvd3dhbGsiOjYwLjAsImZha2VfbGltaXRfcmFuZG9tX1N0YW5kaW5nIjo2MC4wLCJmYWtlX2xpbWl0X3JpZ2h0X0FpciI6NjAuMCwiZmFrZV9saW1pdF9yaWdodF9BaXIgZHVjayI6NjAuMCwiZmFrZV9saW1pdF9yaWdodF9Dcm91Y2hpbmcgQ1QiOjYwLjAsImZha2VfbGltaXRfcmlnaHRfQ3JvdWNoaW5nIFQiOjYwLjAsImZha2VfbGltaXRfcmlnaHRfR2xvYmFsIjoxLjAsImZha2VfbGltaXRfcmlnaHRfTGVnaXQgYWEiOjYwLjAsImZha2VfbGltaXRfcmlnaHRfTW92aW5nIjo2MC4wLCJmYWtlX2xpbWl0X3JpZ2h0X1Nsb3d3YWxrIjo2MC4wLCJmYWtlX2xpbWl0X3JpZ2h0X1N0YW5kaW5nIjo2MC4wLCJmYWtlX2xpbWl0X3R5cGVfQWlyIjoiU3RhdGljIiwiZmFrZV9saW1pdF90eXBlX0FpciBkdWNrIjoiU3RhdGljIiwiZmFrZV9saW1pdF90eXBlX0Nyb3VjaGluZyBDVCI6IlN0YXRpYyIsImZha2VfbGltaXRfdHlwZV9Dcm91Y2hpbmcgVCI6IlN0YXRpYyIsImZha2VfbGltaXRfdHlwZV9HbG9iYWwiOiJTdGF0aWMiLCJmYWtlX2xpbWl0X3R5cGVfTGVnaXQgYWEiOiJTdGF0aWMiLCJmYWtlX2xpbWl0X3R5cGVfTW92aW5nIjoiU3RhdGljIiwiZmFrZV9saW1pdF90eXBlX1Nsb3d3YWxrIjoiU3RhdGljIiwiZmFrZV9saW1pdF90eXBlX1N0YW5kaW5nIjoiU3RhdGljIiwiZmFrZV9vcHRpb25zX0FpciI6W10sImZha2Vfb3B0aW9uc19BaXIgZHVjayI6W10sImZha2Vfb3B0aW9uc19Dcm91Y2hpbmcgQ1QiOltdLCJmYWtlX29wdGlvbnNfQ3JvdWNoaW5nIFQiOltdLCJmYWtlX29wdGlvbnNfR2xvYmFsIjpbIkF2b2lkIG92ZXJsYXAiLCJKaXR0ZXIiLCJBbnRpIEJydXRlZm9yY2UiXSwiZmFrZV9vcHRpb25zX0xlZ2l0IGFhIjpbXSwiZmFrZV9vcHRpb25zX01vdmluZyI6W10sImZha2Vfb3B0aW9uc19TbG93d2FsayI6W10sImZha2Vfb3B0aW9uc19TdGFuZGluZyI6W10sImZyZWVzdGFuZGluZ19rZXkiOmZhbHNlLCJmcmVlc3RhbmRpbmdfbW9kZV9BaXIiOiJPZmYiLCJmcmVlc3RhbmRpbmdfbW9kZV9BaXIgZHVjayI6Ik9mZiIsImZyZWVzdGFuZGluZ19tb2RlX0Nyb3VjaGluZyBDVCI6Ik9mZiIsImZyZWVzdGFuZGluZ19tb2RlX0Nyb3VjaGluZyBUIjoiT2ZmIiwiZnJlZXN0YW5kaW5nX21vZGVfR2xvYmFsIjoiT2ZmIiwiZnJlZXN0YW5kaW5nX21vZGVfTGVnaXQgYWEiOiJPZmYiLCJmcmVlc3RhbmRpbmdfbW9kZV9Nb3ZpbmciOiJPZmYiLCJmcmVlc3RhbmRpbmdfbW9kZV9TbG93d2FsayI6Ik9mZiIsImZyZWVzdGFuZGluZ19tb2RlX1N0YW5kaW5nIjoiT2ZmIiwiaGl0Y2hhbmNlX2FpciI6NTAuMCwiaGl0Y2hhbmNlX2Fpcl9lbmFibGUiOmZhbHNlLCJoaXRjaGFuY2VfYWlyX3dlYXBvbnMiOltdLCJoaXRjaGFuY2Vfbm9zY29wZSI6NTAuMCwiaGl0Y2hhbmNlX25vc2NvcGVfZW5hYmxlIjpmYWxzZSwiaGl0Y2hhbmNlX25vc2NvcGVfd2VhcG9ucyI6W10sImhpdG1hcmtlciI6dHJ1ZSwiaGl0bWFya2VyX2RhbWFnZV9jb2xvciI6WzI1NS4wLDI1NS4wLDI1NS4wLDI1NS4wXSwiaGl0bWFya2VyX3BsdXNfY29sb3IiOlsyNTUuMCwyNTUuMCwyNTUuMCwyNTUuMF0sImhpdG1hcmtlcl90eXBlIjpbIisiXSwiaWRlYWx0aWNrIjpmYWxzZSwiaWRlYWx0aWNrX29wdGlvbnMiOltdLCJpbmRpY2F0b3JzX2NvbG9yIjpbMTQyLjAsMTY1LjAsMjI5LjAsMjU1LjBdLCJraWxsc2F5IjpmYWxzZSwibGJ5X21vZGVfQWlyIjoiRGlzYWJsZWQiLCJsYnlfbW9kZV9BaXIgZHVjayI6IkRpc2FibGVkIiwibGJ5X21vZGVfQ3JvdWNoaW5nIENUIjoiRGlzYWJsZWQiLCJsYnlfbW9kZV9Dcm91Y2hpbmcgVCI6IkRpc2FibGVkIiwibGJ5X21vZGVfR2xvYmFsIjoiU3dheSIsImxieV9tb2RlX0xlZ2l0IGFhIjoiRGlzYWJsZWQiLCJsYnlfbW9kZV9Nb3ZpbmciOiJEaXNhYmxlZCIsImxieV9tb2RlX1Nsb3d3YWxrIjoiRGlzYWJsZWQiLCJsYnlfbW9kZV9TdGFuZGluZyI6IkRpc2FibGVkIiwibGVnaXRhYV9hdF90YXJnZXRzIjp0cnVlLCJsZWdpdGFhX2tleSI6ZmFsc2UsImxvZ3MiOnRydWUsIm1hc3NpdmVfZmFrZV9rZXkiOmZhbHNlLCJvbnNob3RfbW9kZV9BaXIiOiJEaXNhYmxlZCIsIm9uc2hvdF9tb2RlX0FpciBkdWNrIjoiRGlzYWJsZWQiLCJvbnNob3RfbW9kZV9Dcm91Y2hpbmcgQ1QiOiJEaXNhYmxlZCIsIm9uc2hvdF9tb2RlX0Nyb3VjaGluZyBUIjoiRGlzYWJsZWQiLCJvbnNob3RfbW9kZV9HbG9iYWwiOiJTd2l0Y2giLCJvbnNob3RfbW9kZV9MZWdpdCBhYSI6IkRpc2FibGVkIiwib25zaG90X21vZGVfTW92aW5nIjoiRGlzYWJsZWQiLCJvbnNob3RfbW9kZV9TbG93d2FsayI6IkRpc2FibGVkIiwib25zaG90X21vZGVfU3RhbmRpbmciOiJEaXNhYmxlZCIsInByZXNldF9lbmFibGVfQWlyIjpmYWxzZSwicHJlc2V0X2VuYWJsZV9BaXIgZHVjayI6ZmFsc2UsInByZXNldF9lbmFibGVfQ3JvdWNoaW5nIENUIjpmYWxzZSwicHJlc2V0X2VuYWJsZV9Dcm91Y2hpbmcgVCI6ZmFsc2UsInByZXNldF9lbmFibGVfR2xvYmFsIjpmYWxzZSwicHJlc2V0X2VuYWJsZV9MZWdpdCBhYSI6ZmFsc2UsInByZXNldF9lbmFibGVfTW92aW5nIjpmYWxzZSwicHJlc2V0X2VuYWJsZV9TbG93d2FsayI6ZmFsc2UsInByZXNldF9lbmFibGVfU3RhbmRpbmciOmZhbHNlLCJyYWluYm93Ijp0cnVlLCJzbG93d2Fsa190eXBlIjoiT2xkIiwic3BlY3RhdG9ycyI6dHJ1ZSwic3RhdGljX3JhZ2RvbGxzIjp0cnVlLCJ0ZWxlcG9ydF9pbmFpciI6ZmFsc2UsInRyYXNoIjpmYWxzZSwidWlfY29sb3IiOlsxNDIuMCwxNjUuMCwyMjkuMCwyNTUuMF0sInVpX2VsZW1lbnRzIjpbIldhdGVybWFyayJdLCJ1aV9zdHlsZSI6IkRlZmF1bHQiLCJ2aWV3bW9kZWxfc2NvcGUiOmZhbHNlLCJ2aXN1YWxfZWxlbWVudHMiOlsiSW5kaWNhdG9ycyIsIlVpIiwiU2tlZXQiLCJPdGhlciJdLCJ3YXJtdXBfYWEiOmZhbHNlLCJ3YXRlcm1hcmtfbmFtZSI6IkNoZWF0Iiwid2F0ZXJtYXJrX25hbWVfcmVmIjoiIiwieWF3X2FkZF9sZWZ0X0FpciI6MC4wLCJ5YXdfYWRkX2xlZnRfQWlyIGR1Y2siOjAuMCwieWF3X2FkZF9sZWZ0X0Nyb3VjaGluZyBDVCI6MC4wLCJ5YXdfYWRkX2xlZnRfQ3JvdWNoaW5nIFQiOjAuMCwieWF3X2FkZF9sZWZ0X0dsb2JhbCI6LTE4LjAsInlhd19hZGRfbGVmdF9MZWdpdCBhYSI6LTE4MC4wLCJ5YXdfYWRkX2xlZnRfTW92aW5nIjowLjAsInlhd19hZGRfbGVmdF9TbG93d2FsayI6MC4wLCJ5YXdfYWRkX2xlZnRfU3RhbmRpbmciOjAuMCwieWF3X2FkZF9yaWdodF9BaXIiOjAuMCwieWF3X2FkZF9yaWdodF9BaXIgZHVjayI6MC4wLCJ5YXdfYWRkX3JpZ2h0X0Nyb3VjaGluZyBDVCI6MC4wLCJ5YXdfYWRkX3JpZ2h0X0Nyb3VjaGluZyBUIjowLjAsInlhd19hZGRfcmlnaHRfR2xvYmFsIjotMjMuMCwieWF3X2FkZF9yaWdodF9MZWdpdCBhYSI6LTE4MC4wLCJ5YXdfYWRkX3JpZ2h0X01vdmluZyI6MC4wLCJ5YXdfYWRkX3JpZ2h0X1Nsb3d3YWxrIjowLjAsInlhd19hZGRfcmlnaHRfU3RhbmRpbmciOjAuMCwieWF3X2FkZF90eXBlX0FpciI6IlN0YXRpYyIsInlhd19hZGRfdHlwZV9BaXIgZHVjayI6IlN0YXRpYyIsInlhd19hZGRfdHlwZV9Dcm91Y2hpbmcgQ1QiOiJTdGF0aWMiLCJ5YXdfYWRkX3R5cGVfQ3JvdWNoaW5nIFQiOiJTdGF0aWMiLCJ5YXdfYWRkX3R5cGVfR2xvYmFsIjoiU3RhdGljIiwieWF3X2FkZF90eXBlX0xlZ2l0IGFhIjoiU3RhdGljIiwieWF3X2FkZF90eXBlX01vdmluZyI6IlN0YXRpYyIsInlhd19hZGRfdHlwZV9TbG93d2FsayI6IlN0YXRpYyIsInlhd19hZGRfdHlwZV9TdGFuZGluZyI6IlN0YXRpYyIsInlhd19tb2RpZmllcl9BaXIiOiJEaXNhYmxlZCIsInlhd19tb2RpZmllcl9BaXIgZHVjayI6IkRpc2FibGVkIiwieWF3X21vZGlmaWVyX0Nyb3VjaGluZyBDVCI6IkRpc2FibGVkIiwieWF3X21vZGlmaWVyX0Nyb3VjaGluZyBUIjoiRGlzYWJsZWQiLCJ5YXdfbW9kaWZpZXJfR2xvYmFsIjoiQ2VudGVyIiwieWF3X21vZGlmaWVyX0xlZ2l0IGFhIjoiRGlzYWJsZWQiLCJ5YXdfbW9kaWZpZXJfTW92aW5nIjoiRGlzYWJsZWQiLCJ5YXdfbW9kaWZpZXJfU2xvd3dhbGsiOiJEaXNhYmxlZCIsInlhd19tb2RpZmllcl9TdGFuZGluZyI6IkRpc2FibGVkIiwieWF3X21vZGlmaWVyX3ZhbHVlX0FpciI6MC4wLCJ5YXdfbW9kaWZpZXJfdmFsdWVfQWlyIGR1Y2siOjAuMCwieWF3X21vZGlmaWVyX3ZhbHVlX0Nyb3VjaGluZyBDVCI6MC4wLCJ5YXdfbW9kaWZpZXJfdmFsdWVfQ3JvdWNoaW5nIFQiOjAuMCwieWF3X21vZGlmaWVyX3ZhbHVlX0dsb2JhbCI6MzAuMCwieWF3X21vZGlmaWVyX3ZhbHVlX0xlZ2l0IGFhIjowLjAsInlhd19tb2RpZmllcl92YWx1ZV9Nb3ZpbmciOjAuMCwieWF3X21vZGlmaWVyX3ZhbHVlX1Nsb3d3YWxrIjowLjAsInlhd19tb2RpZmllcl92YWx1ZV9TdGFuZGluZyI6MC4wfQ==")

groups.main.config_system:button("                      Load default config                       ", function()
    local status, error = pcall(configs.import, default_config)
    if status then
        common.add_notify(script_db.lua_name, "Succesfully loaded default config")
    else
        common.add_notify(script_db.lua_name, "Error while loading default config (" .. error .. ")")
    end
end)



groups.main.config_system:button("                Export config to clipboard                ", function()
    local status, error = pcall(configs.export)
    if status then
        common.add_notify(script_db.lua_name, "Succesfully exported settings to clipboard")
    else
        common.add_notify(script_db.lua_name, "Error while exporting settings to clipboard (" .. error .. ")")
    end
end)

groups.main.config_system:button("             Import config from clipboard             ", function()
    local data = clipboard.get()

    local status, error = pcall(configs.import, data)
    if status then
        common.add_notify(script_db.lua_name, "Succesfully imported settings from clipboard")
    else
        common.add_notify(script_db.lua_name, "Error while importing config (" .. error .. ")")
    end
end)

groups.main.config_system:button("                             Join discord                              ", function() -- button is clicked copy discord link
    js.OpenExternalBrowserURL("https://discord.gg/nR7QwtkqEP")
end)
groups.main.config_system:button("                               JAG0 BETA                              ", function() -- button is clicked copy discord link
    js.OpenExternalBrowserURL("https://en.neverlose.cc/market/item?id=sc3Shk")
end)

menu.gears = {}

UI.push( { element = groups.aimbot.main:selectable("Aimbot elements", { 'Hitchances', "Other" }), index = 'aimbot_elements', flags = '' } )

UI.push( { element = groups.aimbot.hitchances:switch("Air"), index = 'hitchance_air_enable', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end
} } )

menu.gears.air_hc = UI.get_element('hitchance_air_enable'):create()

UI.push( { element = menu.gears.air_hc:slider("Hitchance\nair", 0, 100, 50), index = 'hitchance_air', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end,
    function() return UI.get('hitchance_air_enable') end
} } )

UI.push( { element = menu.gears.air_hc:selectable("Weapons\nair", { 'Scout', 'Revolver', 'Other' }), index = 'hitchance_air_weapons', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end,
    function() return UI.get('hitchance_air_enable') end
} } )

UI.push( { element = groups.aimbot.hitchances:switch("No scope"), index = 'hitchance_noscope_enable', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end
} } )

menu.gears.noscope_hc = UI.get_element('hitchance_noscope_enable'):create()

UI.push( { element = menu.gears.noscope_hc:slider("Hitchance\nnoscope", 0, 100, 50), index = 'hitchance_noscope', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end,
    function() return UI.get('hitchance_noscope_enable') end
} } )

UI.push( { element = menu.gears.noscope_hc:selectable("Weapons\nnoscope", { 'Auto', 'Scout', 'Other' }), index = 'hitchance_noscope_weapons', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', 'Hitchances') end,
    function() return UI.get('hitchance_noscope_enable') end
} } )

UI.push( { element = groups.aimbot.other:selectable("Doubletap options", { "Faster doubletap", "Adaptive recharge", "Predict dt damage" }), index = 'doubletap_options', flags = '', conditions = {
    function() return UI.contains('aimbot_elements', "Other") end
} } )
UI.push( { element = groups.aimbot.other:switch("Ideal tick"), index = 'idealtick', flags = '', conditions = {
} } )

UI.get_element('idealtick'):set_tooltip("it Enables your doubletap, autopeek, freestand, safepoint head and instant recharge using one bind")

UI.push( { element = groups.aimbot.other:selectable("Ideal tick options", {
   "freestand", "doubletap", "safepoint head", "instant recharge" }), index = 'idealtick_options', flags = '', conditions = {
} } )

UI.push( { element = groups.anti_aim.main:switch("Enable antiaim settings"), index = 'antiaim_settings', flags = '', conditions = {
} } )

UI.get_element('antiaim_settings'):set_tooltip("Enables aimbot settings")

UI.push( { element = groups.anti_aim.main:combo("Body yaw type", { "Smart", "Jitter", "Avoidance", "Custom" }), index = 'antiaim_presets', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

-- UI.push( { element = groups.anti_aim.main:combo("Yaw base", { "Forward", "Backward", "Right", "Left", "At target", "Freestanding" }), index = 'yaw_base', flags = '', conditions = {
--     function() return UI.get('antiaim_settings') end
-- } } )

UI.push( { element = groups.anti_aim.main:combo("Active condition", global_vars.plr_conditions), index = 'condition_selector', flags = '-', conditions = {
    function() return UI.get('antiaim_settings') end,
    function() return UI.get('antiaim_presets') == "Custom" end
} } )

UI.push( { element = groups.anti_aim.main:combo("Slow walk type", { "Old", "New", "Hybrid" }), index = 'slowwalk_type', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end,
    function() return UI.get('antiaim_presets') == "Smart" end
} } )

UI.push( { element = groups.anti_aim.main:switch("Freestanding"), index = 'freestanding_key', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

UI.push( { element = groups.anti_aim.main:switch("Disable Freestanding In Air"), index = 'freestanding_air', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

UI.push( { element = groups.anti_aim.main:switch("Massive Fake Exploit"), index = 'massive_fake_key', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

-- UI.push( { element = groups.anti_aim.main:switch("Antibackstab"), index = 'antibackstab', flags = '', conditions = {
--     function() return UI.get('antiaim_settings') end
-- } } )

UI.push( { element = groups.anti_aim.main:switch("Teleport in air"), index = 'teleport_inair', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

-- UI.push( { element = groups.anti_aim.main:switch("Break extrapolation"), index = 'break_extrapolation', flags = '', conditions = {
--     function() return UI.get('antiaim_settings') end
-- } } )

-- UI.get_element('break_extrapolation'):set_tooltip("Attempts to break enemies extrapolation/dt prediction")

UI.push( { element = groups.anti_aim.main:switch("Experimental anti bruteforce"), index = 'experimental_antibruteforce', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

UI.push( { element = groups.anti_aim.main:switch("Warmup anti-aim"), index = 'warmup_aa', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

UI.push( { element = groups.anti_aim.main:switch("Legit desync (bind)"), index = 'legitaa_key', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

UI.push( { element = groups.anti_aim.main:switch("Legit desync at-targets"), index = 'legitaa_at_targets', flags = '', conditions = {
    function() return UI.get('antiaim_settings') end
} } )

--UI.push( { element = groups.anti_aim.main:combo("Manual Side", { "None", "Left", "Right" }), index = 'manual_side', flags = '', conditions = {
--   function() return UI.get('antiaim_settings') end
--} } )

for i = 1, #global_vars.plr_conditions do
    local condition = global_vars.plr_conditions[i]

    local base_argument = function() return ( UI.get('antiaim_presets') == "Custom" and condition == UI.get('condition_selector') ) and UI.get('antiaim_settings') end
 
    UI.push( { element = groups.anti_aim.builder:switch("Enable condition"), index = 'preset_enable_' .. condition, flags = '', conditions = {
        base_argument,
        function() return i ~= 1 end
    } } )

    base_argument = function() return ( UI.get('antiaim_presets') == "Custom" and condition == UI.get('condition_selector') ) and UI.get('antiaim_settings') and (i == 1 and true or UI.get('preset_enable_' .. condition)) end

    UI.push( { element = groups.anti_aim.builder:combo("Yaw Add Type", { "Static", "Jitter", "Random" }), index = 'yaw_add_type_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Yaw Add Left", -180, 180, 0), index = 'yaw_add_left_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Yaw Add Right", -180, 180, 0), index = 'yaw_add_right_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:combo("Yaw Modifier", { "Disabled", "Center", "Offset", "Random", "Spin" }), index = 'yaw_modifier_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Modifier Degree", -180, 180, 0), index = 'yaw_modifier_value_' .. condition, flags = '', conditions = {
        base_argument,
        function() return UI.get('yaw_modifier_' .. condition) ~= 'Disabled' end
    } } )

    UI.push( { element = groups.anti_aim.builder:combo("Fake Limit Type", { "Static", "Jitter", "Random" }), index = 'fake_limit_type_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Fake Limit Left", 0, 60, 60), index = 'fake_limit_left_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Fake Limit Right", 0, 60, 60), index = 'fake_limit_right_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Jitter Value", 0, 60, 60), index = 'fake_limit_jitter_' .. condition, flags = '', conditions = {
        base_argument,
        function() return UI.get('fake_limit_type_' .. condition) == 'Jitter' end
    } } )

    UI.push( { element = groups.anti_aim.builder:slider("Random Min Value", 0, 60, 60), index = 'fake_limit_random_' .. condition, flags = '', conditions = {
        base_argument,
        function() return UI.get('fake_limit_type_' .. condition) == "Random" end
    } } )

    UI.push( { element = groups.anti_aim.builder:selectable("Fake Options", { "Avoid overlap", "Jitter", "Randomize Jitter", "Anti Bruteforce" }), index = 'fake_options_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:combo("LBY Mode", { "Disabled", "Opposite", "Sway" }), index = 'lby_mode_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:combo("Freestanding Desync", { "Off", "Peek Fake", "Peek Real" }), index = 'freestanding_mode_' .. condition, flags = '', conditions = {
        base_argument
    } } )

    UI.push( { element = groups.anti_aim.builder:combo("Desync On Shot", { "Disabled", "Opposite", "Freestanding", "Switch" }), index = 'onshot_mode_' .. condition, flags = '', conditions = {
        base_argument
    } } )
end

do
    UI.get_element('yaw_add_right_Legit aa'):set(-180)
    UI.get_element('yaw_add_left_Legit aa'):set(-180)
end

local guwwno = render.load_image(network.get('https://i.imgur.com/H0nvv79.gif'), vector(150, 50))
groups.main.image:texture(guwwno, vector(255, 248))
groups.main.nothing:label("")

UI.push( { element = groups.visuals.main:selectable("Visual elements", {
    "Indicators", 'Ui', 'Custom scope', 'Skeet', 'Other' }), index = 'visual_elements', flags = ''
} )

UI.push( { element = groups.visuals.crosshair:combo("Indicators", {
    'Disabled', "Idealyaw (soon)", "Jagoyaw v3 (soon)", "Jagoyaw v2", "Axis", "Prediction v2 (soon)", "Acatel","bluhgang", "Jagoyaw v4 (soon)", "Drainyaw (soon)"}), index = 'crosshair_style', flags = '', conditions = {
    function() return UI.contains('visual_elements', "Indicators") end
} } )

UI.push( { element = groups.visuals.crosshair:color_picker("Indicators color", color(142, 165, 229,255)), index = 'indicators_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Indicators') end
} } )

UI.push( { element = groups.visuals.crosshair:combo("Arrows", { "Disabled", "Team skeet", "Jagoyaw"}), index = 'arrows_style', flags = '', conditions = {
    function() return UI.contains('visual_elements', "Indicators") end
} } )

UI.push( { element = groups.visuals.crosshair:color_picker("Arrows color", color(142, 165, 229,255)), index = 'arrows_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Indicators') end
} } )

UI.push( { element = groups.visuals.ui:selectable("Ui elements", { 'Watermark', 'Keybinds', 'Spectators' }), index = 'ui_elements', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end
} } )

UI.push( { element = groups.visuals.ui:combo("Ui style", { "Default", "Glow (soon)" }), index = 'ui_style', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end
} } )

UI.push( { element = groups.visuals.ui:combo("Watermark name", { "Cheat", "Custom" }), index = 'watermark_name', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end,
    function() return UI.contains('ui_elements', 'Watermark') end
} } )

UI.push( { element = groups.visuals.ui:input('name'), index = 'watermark_name_ref', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end,
    function() return UI.contains('ui_elements', 'Watermark') end,
    function() return UI.get('watermark_name') == 'Custom' end
} } )

UI.push( { element = groups.visuals.ui:combo("Avatars side", { 'Left', 'Right' }), index = 'avatar_side', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end,
    function() return UI.contains('ui_elements', 'Spectators') end
} } )

UI.push( { element = groups.visuals.ui:color_picker("Ui color", color(142, 165, 229,255)), index = 'ui_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Ui') end
} } )

UI.push( { element = groups.visuals.custom_scope:slider("Scope line length", 0, 500, 10), index = 'custom_scope_lenght', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Custom scope') end
} } )

UI.push( { element = groups.visuals.custom_scope:slider("Scope line offset", 0, 500, 70), index = 'custom_scope_offset', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Custom scope') end
} } )

UI.push( { element = groups.visuals.custom_scope:color_picker("Color", color(142, 165, 229,255)), index = 'custom_scope_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Custom scope') end
} } )

UI.push( { element = groups.visuals.custom_scope:switch("Scope inaccuracy"), index = 'custom_scope_inaccuracy', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Custom scope') end
} } )

UI.push( { element = groups.visuals.custom_scope:switch("Viewmodel in scope"), index = 'viewmodel_scope', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Custom scope') end
} } )

UI.push( { element = groups.visuals.other:switch("Static ragdolls"), index = 'static_ragdolls', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Other') end
} } )

UI.get_element('static_ragdolls'):set_tooltip("Makes it, so ragdolls stay static after players die")

UI.push( { element = groups.visuals.other:switch("Hit markers"), index = 'hitmarker', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Other') end
} } )

UI.push( { element = groups.visuals.other:selectable("Hitmarkers type",  { "+", "damage" }), index = 'hitmarker_type', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Other') end,
    function() return UI.get('hitmarker') end
} } )

UI.push( { element = groups.visuals.other:color_picker("Hitmarker color", color(255, 255, 255, 255) ), index = 'hitmarker_plus_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Other') end,
    function() return UI.get('hitmarker') end
} } )

UI.push( { element = groups.visuals.other:color_picker("Damage hitmarker color", color(255, 255, 255, 255) ), index = 'hitmarker_damage_color', flags = 'c', conditions = {
    function() return UI.contains('visual_elements', 'Other') end
} } )

UI.push( { element = groups.visuals.logs:switch("Event logs"), index = 'logs', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

UI.push( { element = groups.visuals.logs:switch("Rainbow Bar"), index = 'rainbow', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

UI.push( { element = groups.visuals.logs:switch("Trash Talk"), index = 'trash', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

UI.push( { element = groups.visuals.logs:switch("Spectators"), index = 'spectators', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

UI.push( { element = groups.visuals.logs:switch("Debug Info"), index = 'debug_info', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

UI.push( { element = groups.visuals.logs:switch("Left Hand Knife"), index = 'left_hand', flags = '', conditions = {
    function() return UI.contains('visual_elements', 'Skeet') end
} } )

-- UI.push( { element = groups.visuals.logs:selectable("Animation Breaker",{ 'Ground', 'Air', 'Zero Pitch on Land' }), index = 'anim_break', flags = '', conditions = {
--     function() return UI.contains('visual_elements', 'Skeet') end
-- } } )

UI.push( { element = groups.visuals.main:switch("Clantag"), index = 'clantag', flags = '', conditions = {
} } )

UI.get_element('clantag'):set_tooltip("synced clantag used to represent the strongest lua script on neverlose forums!")

UI.push( { element = groups.visuals.main:switch("Kill say"), index = 'killsay', flags = '', conditions = {
} } )

helpers.dragging_fn = function(name, base_x, base_y)
    return (function()
        local a = {}
        local b, c, f, g, h, i, k, l, m, n, o
        local d, j = {}, {}
        local p = {__index = {drag = function(self, ...)
                    local q, r = self:get()
                    local s, t = a.drag(q, r, ...)
                    if q ~= s or r ~= t then
                        self:set(s, t)
                    end
                    return s, t
                end, set = function(self, q, r)
                    local j = render.screen_size()
                    self.x_reference:set(q / j.x * self.res)
                    self.y_reference:set(r / j.y * self.res)
                end, get = function(self)
                    local j = render.screen_size()
                    return self.x_reference:get() / self.res * j.x, self.y_reference:get() / self.res * j.y
                end}}
        function a.new(u, v, w, x)
            x = x or 10000
            local j = render.screen_size()
            local y = groups.main.info:slider(u .. ' window position', 0, x, v / j.x * x)
            local z = groups.main.info:slider(u .. ' window position y', 0, x, w / j.y * x)
            y:set_visible(false)
            z:set_visible(false)
            return setmetatable({name = u, x_reference = y, y_reference = z, res = x}, p)
        end
        function a.drag(q, r, A, B, C, D, E)
            if globals.framecount ~= b then
                c = ui.get_alpha() > 0
                f, g = d.x, d.y
                d = ui.get_mouse_position()
                i = h
                h = common.is_button_down(0x1) == true
                m = l
                l = {}
                o = n
                n = false
                j = render.screen_size()
            end
            if c and i ~= nil then
                if (not i or o) and h and f > q and g > r and f < q + A and g < r + B then
                    n = true
                    q, r = q + d.x - f, r + d.y - g
                    if not D then
                        q = math.max(0, math.min(j.x - A, q))
                        r = math.max(0, math.min(j.y - B, r))
                    end
                end
            end
            table.insert(l, {q, r, A, B})
            return q, r, A, B
        end
        return a
    end)().new(name, base_x, base_y)
end

local handle_aa = {}

handle_aa.vars = {
    player_state = 1,
    player_condition = 'global',
    second_condition = 'Normal',
    antiaim_state = { 'global', 'Normal' },
    bestenemy = 0,
    best_value = false,
    desync_value = 0
}

handle_aa.player_state = function()
    local localplayer = entity.get_local_player()
    if localplayer == nil then return end
    local team = localplayer.m_iTeamNum
    local onground = helpers.on_ground( localplayer ) and not common.is_button_down(0x20)
    local legit_aa = UI.get('legitaa_key')
    local velocity = helpers.get_velocity( localplayer )
    local crouched = helpers.is_crouching( localplayer ) and onground
    local flags = localplayer.m_fFlags --263 crouch, 257 on ground, 256 in air
    local slowwalking = ref.slowwalk:get() and onground and velocity > 2 and not crouched
    local inair_crouch = helpers.in_air( localplayer ) and not onground and flags == 262
    local inair = helpers.in_air( localplayer ) and not onground
    local fakeducking = ref.fakeduck:get() and onground

    if inair_crouch then
        handle_aa.vars.player_state = 7
    elseif inair then
        handle_aa.vars.player_state = 8
    end
    if onground and velocity > 2 and flags ~= 256 and flags ~= 263 and not fakeducking then
        handle_aa.vars.player_state = 3
    end
    if onground and velocity < 2 and flags ~= 256 and flags ~= 263 and not fakeducking then
        handle_aa.vars.player_state = 2
    end
    if ( team == 3 and crouched ) or ( team == 3 and fakeducking ) then
        handle_aa.vars.player_state = 5
    end
    if ( team == 2 and crouched ) or ( team == 2 and fakeducking ) then
        handle_aa.vars.player_state = 4
    end
    if slowwalking and not fakeducking then
        handle_aa.vars.player_state = 6
    end
    if legit_aa then
        handle_aa.vars.player_state = 9
    end

    handle_aa.vars.player_condition = global_vars.plr_conditions[handle_aa.vars.player_state]

    handle_aa.vars.antiaim_state = { handle_aa.vars.player_condition, handle_aa.vars.second_condition }
end

handle_aa.get_best_side = function( fsmode )
    local localplayer = entity.get_local_player()
    if not localplayer then return end

    local eye_pos = localplayer:get_eye_position()

    local enemies = entity.get_players(true)

    handle_aa.vars.bestenemy = helpers.get_nearest_enemy(localplayer, enemies)

    local enemy = handle_aa.vars.bestenemy ~= nil and entity.get(handle_aa.vars.bestenemy) or nil

    if handle_aa.vars.bestenemy ~= nil and handle_aa.vars.bestenemy ~= 0 and enemy:is_alive() and fsmode ~= nil then
        local e_x, e_y, e_z = enemy:get_hitbox_position(0).x, enemy:get_hitbox_position(0).y, enemy:get_hitbox_position(0).z

        local yaw = helpers.calc_angle(eye_pos.x, eye_pos.y, e_x, e_y)
        local rdir_x, rdir_y, rdir_z = helpers.angle_vector(0, (yaw + 90))
        local rend_x = eye_pos.x + rdir_x * 10
        local rend_y = eye_pos.y + rdir_y * 10
 
        local ldir_x, ldir_y, ldir_z = helpers.angle_vector(0, (yaw - 90))
        local lend_x = eye_pos.x + ldir_x * 10
        local lend_y = eye_pos.y + ldir_y * 10
 
        local r2dir_x, r2dir_y, r2dir_z = helpers.angle_vector(0, (yaw + 90))
        local r2end_x = eye_pos.x + r2dir_x * 100
        local r2end_y = eye_pos.y + r2dir_y * 100

        local l2dir_x, l2dir_y, l2dir_z = helpers.angle_vector(0, (yaw - 90))
        local l2end_x = eye_pos.x + l2dir_x * 100
        local l2end_y = eye_pos.y + l2dir_y * 100
 
        local ldamage = helpers.get_damage(localplayer, enemy, rend_x, rend_y, eye_pos.z)
        local rdamage = helpers.get_damage(localplayer, enemy, lend_x, lend_y, eye_pos.z)

        local l2damage = helpers.get_damage(localplayer, enemy, r2end_x, r2end_y, eye_pos.z)
        local r2damage = helpers.get_damage(localplayer, enemy, l2end_x, l2end_y, eye_pos.z)

        if ( fsmode == 'Freestanding' ) or ( fsmode == 'Reversed Freestanding' ) then
            if l2damage > r2damage or ldamage > rdamage or l2damage > ldamage then
                handle_aa.vars.best_value = fsmode == 'Freestanding' and false or true
            elseif r2damage > l2damage or rdamage > ldamage or r2damage > rdamage then
                handle_aa.vars.best_value = fsmode == 'Freestanding' and true or false
            end
        end
    else
        handle_aa.vars.best_value = true
    end

    return handle_aa.vars.best_value
end

handle_aa.legitaa = {}

handle_aa.legitaa.vars = {
    classnames = {
        'CWorld',
        'CCSPlayer',
        'CFuncBrush'
    },
    on_bombsite = false
}

handle_aa.legitaa.check_bombsite = function(e, event_name)
    local localplayer = entity.get_local_player()
    if not localplayer then return end

    local user_id = entity.get(e.userid, true)

    if user_id == localplayer then
        if event_name == "enter_bombzone" then
            handle_aa.legitaa.vars.on_bombsite = true
        end

        if event_name == "exit_bombzone" then
            handle_aa.legitaa.vars.on_bombsite = false
        end
    end
end

helpers.entity_has_c4 = function(ent)
    local bomb = entity.get_entities('CC4')[1]
    return bomb ~= nil and bomb.m_hOwnerEntity == ent
end
handle_aa.legitaa.handle = function(e)
    local plocal = entity.get_local_player()
    if not plocal then return end
    local distance = 100
    local bomb = entity.get_entities("CPlantedC4")[1]

    local bomb_pos = bomb ~= nil and bomb.m_vecOrigin or { x = nil }

    if bomb_pos.x ~= nil then
        local player_pos = plocal.m_vecOrigin
        distance = player_pos:dist(bomb_pos)
    end
 
    local team_num = plocal.m_iTeamNum
    local defusing = team_num == 3 and distance < 70

    local on_bombsite = plocal.m_bInBombZone
 
    local has_bomb = helpers.entity_has_c4(plocal) == 49
 
    local eye_pos = plocal:get_eye_position()
    local viewangles = render.camera_angles()

    local sin_pitch = math.sin(math.rad(viewangles.x))
    local cos_pitch = math.cos(math.rad(viewangles.x))
    local sin_yaw = math.sin(math.rad(viewangles.y))
    local cos_yaw = math.cos(math.rad(viewangles.y))

    local dir_vec = { cos_pitch * cos_yaw, cos_pitch * sin_yaw, -sin_pitch }

    local traced = utils.trace_line(eye_pos, vector(eye_pos.x + (dir_vec[1] * 8192), eye_pos.y + (dir_vec[2] * 8192), eye_pos.z + (dir_vec[3] * 8192)), plocal, 0xFFFFFFFF)

    local using = true

    if traced ~= nil then
        for i=0, #handle_aa.legitaa.vars.classnames do
            if traced.entity ~= nil and traced.entity:get_classname() == handle_aa.legitaa.vars.classnames[i] then
                using = false
            end
        end
    end

    local near_door = false

    -- if plocal:is_alive() then
    --     for yaw = 18, 360, 18 do
    --         yaw = helpers.normalize_yaw(yaw)

    --         local my_eye_position = plocal:get_eye_position()
    --         local final_angle = vector(0, yaw, 0)

    --         local final_point = my_eye_position + Cheat.AngleToForward(final_angle) * 0x60
    --         local trace_info = utils.trace_line(my_eye_position, final_point, plocal, 0x200400B)
    --         local hit_entity = trace_info.entity

    --         if hit_entity ~= nil then
    --             if hit_entity:get_classname() == "CPropDoorRotating" then
    --                 near_door = true
    --             end
    --         end
    --     end
    -- end

    if ((on_bombsite and not defusing) or (not using and not defusing)) and not near_door then
        e.in_use = 0
    end
end

handle_aa.set_antiaim = function(e)
    local localplayer = entity.get_local_player()
    if not localplayer then return end
    local onGround = helpers.on_ground(localplayer)
    local ticks = cvar.sv_maxusrcmdprocessticks;
    -- local flags = localplayer.m_fFlags
    -- local inverter_state = rage.antiaim:get_rotation(true) < 0
    -- local lp_bodyyaw = localplayer.m_flPoseParameter[11] * 120 - 60

    local lp_bodyyaw = localplayer.m_flPoseParameter[11] * 120 - 60

    local handle_value_offset = function(left_value, right_value)
        if e.choked_commands == 0 then
            handle_aa.vars.desync_value = lp_bodyyaw
        end
        return handle_aa.vars.desync_value > 0 and left_value or right_value
    end

    local set_values = function(args)
        local mode = args.mode
        local table = args.settings
        if mode == 'hidden' then
            ref.yaw.offset:override(table[1])
            ref.yaw_modifier.mode:override(table[2])
            ref.yaw_modifier.offset:override(table[3])
            ref.body_yaw.left_limit:override(table[4])
            ref.body_yaw.right_limit:override(table[5])
            ref.body_yaw.fake_options:override(table[6])
            ref.body_yaw.desync_freestand:override(table[7])
            ref.body_yaw.inverter:override(table[8])
            ref.body_yaw.lby_mode:override(table[9])
        else
            ref.yaw.offset:set(table[1])
            ref.yaw_modifier.mode:set(table[2])
            ref.yaw_modifier.offset:set(table[3])
            ref.body_yaw.left_limit:set(table[4])
            ref.body_yaw.right_limit:set(table[5])
            ref.body_yaw.fake_options:set(table[6])
            ref.body_yaw.desync_freestand:set(table[7])
            ref.body_yaw.inverter:set(table[8])
            ref.body_yaw.lby_mode:set(table[9])
        end
    end

    local legitaa_on = handle_aa.vars.antiaim_state[1] == 'Legit aa'

    if legitaa_on then
        handle_aa.legitaa.handle(e)
    end

    local yaw_value = 'Backward'
    local yaw_base = 'At Target'
    local pitch = 'Down'

    if legitaa_on then
        if not UI.get('legitaa_at_targets') then
            yaw_base = 'Local View'
        end
        pitch = 'Disabled'
    end

    if (UI.get('freestanding_key') or (UI.get('idealtick') and UI.contains('idealtick_options', 0))) and not legitaa_on then
        if (UI.get("freestanding_air")) then
        ref.freestanding.switch:set(not helpers.in_air( localplayer ))
        else
        ref.freestanding.switch:set(true)
        end
    else
        ref.freestanding.switch:set(false)
    end

    ref.yaw.base:set(yaw_base)
    ref.pitch:set(pitch)
    ref.yaw.mode:set(yaw_value)

    if UI.get('massive_fake_key') and not (ref.doubletap.switch:get() or ref.hide_shots.switch:get()) and not legitaa_on then
        handle_aa.vars.second_condition = 'Massive fake'
        local side = handle_aa.get_best_side("Freestanding")
        ref.body_yaw.switch:set(false)
        ref.fakelag.switch:set(false)
        e.send_packet = false;
     
        ticks:int(17)

        ref.yaw.offset:override(nil)

        if e.choked_commands > 1 and e.choked_commands < ticks:int() then
            ref.yaw.offset:override(side and 90 or -90)
        end

        set_values({ settings = {
            side and -15 or 15, 'Disabled', 0, 59, 59, {}, 'Off', false, 'Disabled'
        }})
    elseif UI.get('warmup_aa') and entity.get_game_rules().m_bWarmupPeriod and not legitaa_on then
        set_values({ settings = {
            0, 'Disabled', 0, 59, 59, {}, 'Off', false, 'Disabled'
        }})
    else
        handle_aa.vars.second_condition = 'Normal'
        ticks:int(16)
        if UI.get('antiaim_presets') == 'Custom' then
            ref.body_yaw.inverter:set(false)
            local condition = UI.get('preset_enable_' .. handle_aa.vars.antiaim_state[1]) and global_vars.plr_conditions[handle_aa.vars.player_state] or global_vars.plr_conditions[1]

            local yaw = handle_value_offset(UI.get('yaw_add_left_' .. condition), UI.get('yaw_add_right_' .. condition))
            local fakelimit_right = UI.get('fake_limit_right_' .. condition)
            local fakelimit_left = UI.get('fake_limit_left_' .. condition)

            if UI.get('yaw_add_type_' .. condition) == 'Jitter' then
                yaw = utils.random_int(0, 1) == 1 and UI.get('yaw_add_right_' .. condition) or UI.get('yaw_add_left_' .. condition)
            elseif UI.get('yaw_add_type_' .. condition) == 'Random' then
                yaw = utils.random_int(UI.get('yaw_add_right_' .. condition), UI.get('yaw_add_left_' .. condition))
            end

            if UI.get('fake_limit_type_' .. condition) == 'Jitter' then
                if utils.random_int(0, 1) == 1 then
                    fakelimit_right = UI.get('fake_limit_right_' .. condition)
                    fakelimit_left = UI.get('fake_limit_left_' .. condition)
                else
                    fakelimit_right = UI.get('fake_limit_jitter_' .. condition)
                    fakelimit_left = UI.get('fake_limit_jitter_' .. condition)
                end
            elseif UI.get('fake_limit_type_' .. condition) == 'Random' then
                fakelimit_right = utils.random_int(UI.get('fake_limit_random_' .. condition), UI.get('fake_limit_right_' .. condition))
                fakelimit_left = utils.random_int(UI.get('fake_limit_random_' .. condition), UI.get('fake_limit_left_' .. condition))
            end

            ref.body_yaw.on_shot_desync:set(UI.get('onshot_mode_' .. condition))

            set_values({ settings = {
                yaw,
                UI.get('yaw_modifier_' .. condition),
                UI.get('yaw_modifier_value_' .. condition),
                fakelimit_left, fakelimit_right,
                UI.get('fake_options_' .. condition),
                UI.get('freestanding_mode_' .. condition),
                false,
                UI.get('lby_mode_' .. condition)
            }})
        else
            local anti_aim_values = {
                [ 'Standing' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Moving' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Crouching T' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Crouching CT' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Slowwalk' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Air duck' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Air' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Legit aa' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                },
                [ 'Global' ] = {
                    0, 'Disabled', 0, 0, 0, {}, 'Off', false, 'Disabled'
                }
            }
            if not legitaa_on then
                local exp_antibruteforce = UI.get('experimental_antibruteforce')
                if UI.get('antiaim_presets') == 'Smart' then
                    local random = utils.random_int(0, 1)
                    if UI.get('slowwalk_type') == 0 then
                        anti_aim_values[ 'Slowwalk' ] = {
                            handle_value_offset(-10, 10), 'Disabled', 0, 18, 18, exp_antibruteforce and { 'Jitter', 'Anti Bruteforce' } or 'Jitter', 'Peek Fake', false, 'Disabled'
                        }
                    elseif UI.get('slowwalk_type') == 1 then
                        local random2 = utils.random_int(3, 33)
                        anti_aim_values[ 'Slowwalk' ] = {
                            handle_value_offset(-10, 10), 'Disabled', 0, random2, random2, exp_antibruteforce and { 'Jitter', 'Anti Bruteforce' } or 'Jitter', 'Peek Fake', false, 'Disabled'
                        }
                    elseif UI.get('slowwalk_type') == 2 then
                        anti_aim_values[ 'Slowwalk' ] = {
                            handle_value_offset(-33, 33), 'Center', 6, 58, 58, 'Randomize Jitter', 'Off', false, 'Disabled'
                        }
                    end
                    anti_aim_values[ 'Standing' ] = {
                        handle_value_offset(-7, 7), 'Disabled', 0, random == 1 and 48 or 18, random == 1 and 48 or 18, { 'Jitter', 'Anti Bruteforce' }, 'Peek Fake', false, 'Disabled'
                    }
                    anti_aim_values[ 'Moving' ] = {
                        handle_value_offset(-7, 7), 'Disabled', 0, random == 1 and 48 or 18, random == 1 and 48 or 18, { 'Jitter', 'Anti Bruteforce' }, 'Peek Fake', false, 'Disabled'
                    }
                    anti_aim_values[ 'Crouching T' ] = {
                        0, 'Disabled', 0, 59, 59, exp_antibruteforce and { 'Jitter', 'Anti Bruteforce' } or 'Jitter', 'Off', true, 'Disabled'
                    }
                    anti_aim_values[ 'Crouching CT' ] = {
                        0, 'Disabled', 0, 59, 59, exp_antibruteforce and { 'Jitter', 'Anti Bruteforce' } or 'Jitter', 'Off', true, 'Disabled'
                    }
                    anti_aim_values[ 'Air duck' ] = {
                        handle_value_offset(-12, 7), 'Disabled', 0, random == 1 and 60 or 18, random == 1 and 60 or 18, 'Anti Bruteforce', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Air' ] = {
                        handle_value_offset(-12, 7), 'Disabled', 0, random == 1 and 60 or 18, random == 1 and 60 or 18, 'Anti Bruteforce', 'Off', false, 'Disabled'
                    }
                elseif UI.get('antiaim_presets') == 'Jitter' then -- moving  JITTERNOWYw
                    anti_aim_values[ 'Standing' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Moving' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Crouching T' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Crouching CT' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Slowwalk' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Air duck' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                    anti_aim_values[ 'Air' ] = {
                        0, 'Center', math.random(-68, -78), 59, 59, 'Jitter', 'Off', false, 'Disabled'
                    }
                elseif UI.get('antiaim_presets') == 'Avoidance' then -- jitter
                    anti_aim_values[ 'Standing' ] = {
                        handle_value_offset(-6, 7), 'Center', -88, 60, 60, 'Jitter', desync_freestand, false, 'Disabled'
                    }
                    anti_aim_values[ 'Moving' ] = {
                        handle_value_offset(-6, 7), 'Center', -88, 60, 60, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                    anti_aim_values[ 'Crouching T' ] = {
                        handle_value_offset(-20, 20), 'Center', -38, 59, 59, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                    anti_aim_values[ 'Crouching CT' ] = {
                        handle_value_offset(-20, 20), 'Center', -30, 59, 59, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                    anti_aim_values[ 'Slowwalk' ] = {
                        handle_value_offset(-33, 33), 'Center', -8, 59, 59, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                    anti_aim_values[ 'Air duck' ] = {
                        handle_value_offset(-6, 7), 'Center', -88, 60, 60, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                    anti_aim_values[ 'Air' ] = {
                        handle_value_offset(-6, 7), 'Center', -88, 60, 60, 'Jitter', desync_freestand, false, 'Opposite'
                    }
                end
            else
                anti_aim_values[ 'Legit aa' ] = {
                    -180, 'Disabled', 0, 60, 60, "Off", 'Peek Fake', false, 'Opposite'
                }
            end
            set_values( { settings = anti_aim_values[handle_aa.vars.antiaim_state[1]], mode = 'hidden' } )
        end
    end

    if handle_aa.vars.antiaim_state[2] ~= 'Massive fake' then
        ref.body_yaw.switch:set(true)
        if UI.get('idealtick') then
            ref.fakelag.switch:set(false)
        else
            ref.fakelag.switch:set(true)
        end
    end
end

local visuals = {}

visuals.indicators = {}

visuals.indicators.vars = {
    dt_color = 0,
    dt_color2 = 0,
    scope_adder = 0,
    values = helpers.gram_create(0, 15),
    -- other = {
    --     Colors = {
    --         Transperent = color(255, 255, 255, 0.25*255),
    --         Black = color(0.05*255, 0.05*255, 0.05*255, 0.5*255),
    --         White = color(255, 255, 255, 255),
    --         Orange = color(255, 0.53*255, 0.26*255, 255)
    --     },
    --     Stuff = {
    --         Indicators = {
    --             Animations = {DT = {Value = 0.0}},
    --             State = {
    --                 {Preset = "/STANDING/", Colored = false},
    --                 {Preset = "/RUNNING/", Colored = false},
    --                 {Preset = "/CROUCH/", Colored = false},
    --                 {Preset = "/CROUCH/", Colored = false},
    --                 {Preset = "+TANKAA+", Colored = true},
    --                 {Preset = "/AEROBIC/", Colored = false},
    --                 {Preset = "/AEROBIC/", Colored = false},
    --                 {Preset = "/E-PEEK/", Colored = false},
    --                 {Preset = "/DORMANT/", Colored = false},
    --             }
    --         }
    --     },
    --     AntiBruteforce = {Players = {}, Time = nil},
 
 
    --     CanFire = function()
         
    --         local GetCurtime = function(a8)
    --             return globals.curtime - a8 * globals.tickinterval
    --         end
    --         local a9 = entity.get_local_player()
    --         local aa = a9:GetActiveWeapon()
    --         if not a9 or not aa then
    --             return false
    --         end
    --         if GetCurtime(-16) < a9:GetProp("m_flNextAttack") then
    --             return false
    --         end
    --         if GetCurtime(0) < aa:GetProp("m_flNextPrimaryAttack") then
    --             return false
    --         end
    --         return true
    --     end,
 
    --     Helpers = {ColorCopy = function(self, Color)
    --             return color(Color.r, Color.g, Color.b, Color.a)
    --         end, CalcMultiTextSize = function(self, ae, ...)
    --             local ao = vector(0.0, 0.0)
    --             local q = {...}
    --             local ap = {}
    --             if q[1] then
    --                 table.insert(ap, q[1])
    --             end
    --             if q[2] then
    --                 table.insert(ap, q[2])
    --             end
    --             for ac, aq in pairs(ae) do
    --                 local ar = render.measure_text(aq.Text, unpack(ap))
    --                 render.measure_text(aq.Text, unpack(ap))
    --                 ao.x = ao.x + ar.x
    --                 if ar.y > ao.y then
    --                     ao.y = ar.y
    --                 end
    --             end
    --             return ao
    --         end, MultiText = function(self, ae, ao, ...)
    --             local q = {...}
    --             local ap = {}
    --             if q[1] then
    --                 table.insert(ap, q[1])
    --             end
    --             if q[2] and type(q[2]) ~= "boolean" then
    --                 table.insert(ap, q[2])
    --             end
    --             for ac, aq in pairs(ae) do
    --                 render.text(aq.Text, ao, aq.Color, ...)
    --                 ao.x = ao.x + render.measure_text(aq.Text, unpack(ap)).x
    --             end
    --         end
    --     },
    --     v = {normalize_yaw = function(self, w)
    --         while w > 180.0 do
    --             w = w - 360.0
    --         end
    --         while w < -180.0 do
    --             w = w + 360.0
    --         end
    --         return w
    --     end, linear_interpolation = function(self, x, y, z)
    --         return x + (y - x) * z
    --     end, closest_point = function(self, A, B, C)
    --         local D = A - B
    --         local E = C - B
    --         local F = #E
    --         E = E / F
    --         local G = E:Dot(D)
    --         if G < 0.0 then
    --             return B
    --         end
    --         if G > F then
    --             return C
    --         end
    --         return B + E * Vector.new(G, G, G)
    --     end, breathe = function(self, H)
    --         H = H or 2.0
    --         local I = GlobalVars.realtime * H
    --         local J = I % (math.pi * 2.0)
    --         J = math.abs(-math.pi + J)
    --         return math.sin(J)
    --     end}
    -- }
}

local fonts = {
    font = { font = render.load_font("Verdana Bold", 11), size = 11 },
    font1 = { font = render.load_font("Verdana Bold", 10), size = 10 },
    font2 = { font = render.load_font("Arial", 11), size = 11 },
    font5 = { font = render.load_font("Arial Bold", 11), size = 11 },
    font55 = { font = render.load_font("Arial Bold", 26), size = 26 },
    font7 = { font = render.load_font("Arial", 13,"a"), size = 13 },
    fontpred = { font = render.load_font("Arial Bold", 12), size = 12 },
    fontideal = { font = render.load_font("Verdana", 12), size = 12 },
    verdana_skt = { font = render.load_font("Verdana", 13), size = 13 },
    verdana_bolde = { font = render.load_font("Verdana", 11, 'b'), size = 11 },
    blockfont = { font = render.load_font("nl\\jagoyaw\\fonts\\small_fonts.ttf", 10), size = 10 },
    verdanar11 = { font =  render.load_font('Verdana', 11, 'a'), size = 11 },
    fontxd = { font = render.load_font("Verdana Bold", 23), size = 23 },
    fontxd2 = { font = render.load_font("Verdana", 12), size = 12 },
    fontdx = { font = render.load_font("nl\\jagoyaw\\fonts\\pixel.ttf", 10,"o")},
    fontarrow = { font = render.load_font("nl\\jagoyaw\\fonts\\ActaSymbolsW95Arrows.ttf", 21, 'a'), size = 21 },
    console = { font = render.load_font("nl\\jagoyaw\\fonts\\lucida_console.ttf", 10, 'd'), size = 10 }
}

visuals.indicators.draw = function()

    local w = 25;
    local bgGap = 4;
    local screen_size = render.screen_size()
    local x = screen_size.x / 2;
    local y = screen_size.y / 2;
    local ping_spike = ui.find("Miscellaneous", "Main", "Other", "Fake Latency")
    local is_key_pressed = common.is_button_down(0x20)
    local player = entity.get_local_player()
    if not player then
        return
    end
    local scoped = player.m_bIsScoped;
    local alpha = math.sin(math.abs(-math.pi + (globals.curtime * (1 / 0.7)) % (math.pi * 2))) * 255
    local flags = player.m_fFlags
    local localplayer = entity.get_local_player()
    local onGround = helpers.on_ground(localplayer)
    local add_y = 0;
    local numer = 0
    local is_dt = ref.doubletap.switch:get()
    local is_hs = ref.hide_shots.switch:get()
    local is_baim = ref.body_aim.mode:get()
    local is_safe = ref.safe_point:get()
    local delta = localplayer.m_flPoseParameter[11] * 120 - 60
    local chrg = rage.exploit:get()
    local inverter_state = (localplayer.m_flPoseParameter[11] * 120 - 60) > 0
    local desync_delta = localplayer.m_flPoseParameter[11] * 120 - 60

    local idealyaw_color = "";
    local idealyaw_text = "";

    if desync_delta > 55 then
        idealyaw_color = color(155, 11, 32, 255);
    else
        idealyaw_color = color(220, 135, 49, 255);
    end

     local textSize = render.measure_text(fonts.font7.font,nil,"JAG0 YAW");
     local textSize1 = render.measure_text(fonts.font7.font,nil,"JAG0 YAW");
    -- render.measure_text(1, "JAG0 YAW")

    local lp_alive = player:is_alive()

    if not lp_alive then return end

   --#endregion if UI.get('crosshair_style') == 1 then
        --local textSize = render.measure_text("REVOLUTION", 12);
      -- = render.text(fonts.fontdx.font, vector(x + 3 + baimcalc.x + 2 + safecalc.x + 2, y + 41 + numer), color(1, 1, 1, 100 / 255), "fs")

 
    --     local a = render.measure_text(">", fonts.font5.size, fonts.font5.font)
    --     local b = render.measure_text("<", fonts.font5.size, fonts.font5.font)
 
    --     if ref.base:GetInt() == 2 then
    --         render.text(">", vector(x + 40, y - a.y/2), color(220 / 255, 135 / 255, 49 / 255, 255), fonts.font55.size, fonts.font55.font)
    --         render.text("<", vector(x - 54, y - a.y/2), Color.RGBA(255,255,255,255), fonts.font55.size, fonts.font55.font)
    --     elseif ref.base:GetInt() == 3 then
    --         render.text(">", vector(x + 40, y - a.y/2), Color.RGBA(255,255,255,255), fonts.font55.size, fonts.font55.font)
    --         render.text("<", vector(x - 54, y - a.y/2),color(220 / 255, 135 / 255, 49 / 255, 255), fonts.font55.size, fonts.font55.font)
    --     end

    --     if ref.base:GetInt() == 4 then
    --         render.text("IDEAL YAW", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("IDEAL YAW", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + bgGap), color(220 / 255, 135 / 255, 49 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     elseif ref.base:GetInt() == 5 then
    --         render.text("IDEAL YAW", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("IDEAL YAW", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + bgGap), color(220 / 255, 135 / 255, 49 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     end

    --     if ref.base:GetInt() == 1 then
    --         render.text("FAKEYAW", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("FAKEYAW", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + bgGap), color(207 / 255, 177 / 255, 255 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     elseif ref.base:GetInt() == 2 then
    --         render.text("FAKEYAW", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("FAKEYAW", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + bgGap), color(207 / 255, 177 / 255, 255 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     elseif ref.base:GetInt() == 3 then
    --         render.text("FAKEYAW", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("FAKEYAW", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + bgGap), color(207 / 255, 177 / 255, 255 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     end
    --     if ref.base:GetInt() == 5 then
    --         render.text("FREESTAND", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("FREESTAND", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(209 / 255, 139 / 255, 230 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     else
    --         render.text("DYNAMIC", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("DYNAMIC", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(209 / 255, 139 / 255, 230 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     end
 
    --     if ref.doubletap:GetBool() then
    --         if chrg < 1 then
    --             render.text("DT", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --             render.text("DT", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(200 / 255, 15 / 255, 15 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --             add_y = add_y + 10;
    --         else
    --             render.text("DT", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --             render.text("DT", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(15 / 255, 255 / 255, 15 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --             add_y = add_y + 10;
    --         end
    --     end
 
    --     if ref.onshotaa:GetBool() then
    --         render.text("AA", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("AA", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(209 / 255, 139 / 255, 230 / 255, 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     end
 
    --     if inverter_state then
    --         render.text("B", vector((x + 25 + (w / 2)) - (textSize.x / 2), y + 28 + add_y + bgGap), color(0,0,0,1), fonts.fontideal.size, fonts.fontideal.font, false);
    --         render.text("B", vector((x + 24 + (w / 2)) - (textSize.x / 2), y + 27 + add_y + bgGap), color(15 / 255, 115 / 255, 15 / 255, 135 / 255), fonts.fontideal.size, fonts.fontideal.font, false);
    --         add_y = add_y + 10;
    --     end
    -- elseif UI.get('crosshair_style') == 2 then
    --     render.text("JAG0YAW", vector(x - 1, y + 23 + bgGap), color(177 / 255, 171 / 255, 255 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --     add_y = add_y + 9;
    --     if ref.base:GetInt() == 5 then
    --         render.text("FREESTAND", vector(x,  y + 23 + add_y + bgGap), color(209 / 255, 139 / 255, 230 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --         add_y = add_y + 9;
    --     else
    --         render.text("DYNAMIC",  vector(x, y + 23 + add_y + bgGap), color(209 / 255, 139 / 255, 230 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --         add_y = add_y + 9;
    --     end
    --     if ref.onshotaa:GetBool() then
    --         render.text("ONSHOT", vector(x, y + 23 + add_y + bgGap), color(132 / 255, 255 / 255, 16 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --         add_y = add_y + 9;
    --     end
    --     if ref.fakeduck:GetBool() then
    --         render.text("DUCK", vector(x, y + 23 + add_y + bgGap), color(255 / 255, 255 / 255, 255 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --         add_y = add_y + 9;
    --     end
    --     if is_dt then
    --         if chrg < 1 then
    --             render.text("DT", vector(x, y + 23 + add_y + bgGap), color(200 / 255, 15 / 255, 15 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --             add_y = add_y + 9;
    --         else
    --             render.text("DT", vector(x, y + 23 + add_y + bgGap), color(132 / 255, 255 / 255, 16 / 255, 255), fonts.font1.size, fonts.font1.font, true, true);
    --             add_y = add_y + 9;
    --         end
    --     end
 
    if UI.get('crosshair_style') == "Jagoyaw v2" then
     --  render.text(fonts.fontdx.font, vector(x + 3 + baimcalc.x + 2 + safecalc.x + 2, y + 41 + numer), color(1, 1, 1, 100 / 255), "fs")

       local color_ref = UI.get('indicators_color')

       render.text(fonts.font7.font, vector((x + 12 + (w / 2)) - (textSize1.x / 2) + 1, y + 20 + bgGap + 1), color(0, 0, 0, 255), nil, tostring(math.abs(math.floor(desync_delta)) .. "°"))
       render.text(fonts.font7.font, vector((x + 12 + (w / 2)) - (textSize1.x / 2), y + 20 + bgGap), color(color_ref.r, color_ref.g, color_ref.b, 255), nil, tostring(math.abs(math.floor(desync_delta)) .. "°"))
        render.gradient(vector(screen_size.x / 2, screen_size.y / 2 + 39), vector(screen_size.x / 2 + (math.abs(desync_delta * 110 / 100)), screen_size.y / 2 + 40), color_ref,color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0))
        render.gradient(vector(screen_size.x / 2, screen_size.y / 2 + 39), vector(screen_size.x / 2 + (-math.abs(desync_delta * 110 / 100)), screen_size.y / 2 + 40), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0))

        local calcv1 = render.measure_text(fonts.font7.font,nil,"JAG0WALK")
        local calcv2 = render.measure_text(fonts.font7.font,nil,"LEGIT AA")
        local calcv3 = render.measure_text(fonts.font7.font,nil,"AUTO-DIR")
        local calcv4 = render.measure_text(fonts.font7.font,nil,"JAG0YAW")
        local calcv5 = render.measure_text(fonts.font7.font,nil,"DMG")

        if ref.slowwalk:get() then
            render.text(fonts.font7.font, vector(x + 1 - calcv1.x/2, y + 39 + bgGap + 1), color(0, 0, 0, 255),nil,"JAG0WALK");
            render.text(fonts.font7.font, vector(x - calcv1.x/2, y + 39 + bgGap), color(color_ref.r, color_ref.g, color_ref.b, 255),nil,"JAG0WALK");
        elseif handle_aa.vars.antiaim_state[1] == 'Legit aa' then
            render.text(fonts.font7.font, vector(x + 1 - calcv2.x/2, y + 39 + bgGap + 1), color(0, 0, 0, 255),nil,"LEGIT AA");
            render.text(fonts.font7.font, vector(x - calcv2.x/2, y + 39 + bgGap), color(color_ref.r, color_ref.g, color_ref.b, 255),nil,"LEGIT AA");
        elseif ref.yaw.base:get() == 5 then
            render.text(fonts.font7.font, vector(x - 6 + calcv3.x/2, y + 39 + bgGap + 1), color(0, 0, 0, 255),nil,"FREESTAND");
            render.text(fonts.font7.font, vector(x - 7 + calcv3.x/2, y + 39 + bgGap), color(color_ref.r, color_ref.g, color_ref.b, 255),nil,"FREESTAND");
        else
            render.text(fonts.font7.font, vector(x + 1 - calcv4.x / 2, y + 40 + bgGap), color(0, 0, 0, 255), nil,"JAGOYAW");
            render.text(fonts.font7.font, vector(x - calcv4.x / 2, y + 39 + bgGap), color(color_ref.r, color_ref.g, color_ref.b, 255), nil,"JAGOYAW");
        end
else if UI.get('crosshair_style') == 'Axis' then
        local screen_size = render.screen_size()
        local ind_offset = 0
        local scoped = localplayer.m_bIsScoped
 
        local height = 20--ui.get(UI.get('vis_indicators_height'))
        local pos = { screen_size.x / 2, screen_size.y / 2 + height }
 
        local color_ref = UI.get('indicators_color')
 
        local name = 'JAGO'

        local main_txt = ''
 
        for i = 1, #name do
            local adder = i ~= #name and '  ' or ''
            local text = name:sub(i, i) .. adder
            main_txt = main_txt .. text
        end
 
        local maintxt_size = render.measure_text(2, 'o', main_txt)

        local desync = desync_delta
 
        local clr1 = desync > 0 and { color_ref.r, color_ref.g, color_ref.b } or { 255, 255, 255 }
        local clr2 = desync < 0 and { color_ref.r, color_ref.g, color_ref.b } or { 255, 255, 255 }

        local text = helpers.gradient_text(clr1[1], clr1[2], clr1[3], 255, clr2[1], clr2[2], clr2[3], 255, main_txt)
 
        local dtclreased = easing.quad_in_out(visuals.indicators.vars.dt_color, 0, 1, 1)
        local dtclr2eased = easing.quad_in_out(visuals.indicators.vars.dt_color2, 0, 1, 1)
        local dt_color = {255 - 255 * dtclreased * (1-dtclr2eased), 255 * dtclreased - (100 * dtclr2eased), 0 + 60 * dtclr2eased}
 
        local dtclrFT = globals.frametime * 4
        local doubletap = rage.exploit:get() == 1
        visuals.indicators.vars.dt_color = math.clamp(visuals.indicators.vars.dt_color + (doubletap and dtclrFT or -dtclrFT), 0, 1)
        visuals.indicators.vars.dt_color2 = math.clamp(visuals.indicators.vars.dt_color2 + ((ref.hide_shots.switch:get() and ref.doubletap.switch:get() and doubletap) and dtclrFT or -dtclrFT), 0, 1)
 
        local FT = globals.frametime * 3
        local scope_value = easing.quad_in_out(visuals.indicators.vars.scope_adder, 0, 1, 1)
 
        visuals.indicators.vars.scope_adder = math.clamp(visuals.indicators.vars.scope_adder + (scoped and FT or -FT), 0, 1)
 
        local adder_ = scope_value
        local bar_add, bar_add2 = 20 - 20 * adder_, 20 + 10 * adder_
        local text_ = tostring(math.floor(math.abs(desync)))
        local text_size_ = render.measure_text(2, 'o', text_)
 
        render.text(2, vector(pos[1] - 3 + (text_size_.x / 2 * adder_ + 4 - 4 * adder_) + adder_ * 6, pos[2] - 8), color(240, 240, 240, 230), 'c', text_)
 
        render.gradient(vector(pos[1] + adder_ * 3, pos[2] - 3), vector(pos[1] + adder_ * 3 + bar_add2 * (math.abs(desync) / 60), pos[2] - 3 + 1), color(color_ref.r, color_ref.g, color_ref.b, color_ref.a), color(color_ref.r, color_ref.g, color_ref.b, 0), color(color_ref.r, color_ref.g, color_ref.b, color_ref.a), color(color_ref.r, color_ref.g, color_ref.b, 0))
        render.gradient(vector(pos[1] + adder_ * 4, pos[2] - 3), vector(pos[1] + adder_ * 4 + -(bar_add * (math.abs(desync) / 60)), pos[2] - 3 + 1), color(color_ref.r, color_ref.g, color_ref.b, color_ref.a), color(color_ref.r, color_ref.g, color_ref.b, 0), color(color_ref.r, color_ref.g, color_ref.b, color_ref.a), color(color_ref.r, color_ref.g, color_ref.b, 0))
 
        ind_offset = ind_offset + 2
 
        local items = {
            [1] = { true, text, { 255, 255, 255, 255 } },
            [2] = { handle_aa.vars.antiaim_state[2] == 'Sideways Roll' or handle_aa.vars.antiaim_state[2] == 'Roll', 'ROLL', { 160, 160, 160, 255 } },
            [3] = { ref.doubletap.switch:get(), 'DT', { dt_color[1], dt_color[2], dt_color[3], 255 } },
            [4] = { ref.hide_shots.switch:get(), 'OS', { 225 - 70 * dtclr2eased, 170 - 70 * dtclr2eased, 160 - 70 * dtclr2eased, 255 } },
            [5] = { ref.freestanding.switch:get(), 'FS', { 255, 255, 255, 255 } },
            [6] = { ref.safe_point:get() == 'Force', 'SP', { 120, 200, 120, 255 } },
            [7] = { ref.body_aim.mode:get() == 'Force', 'FB', { 170, 50, 255, 255 } }
        }
 
        for i, bind in ipairs(items) do
            local text_size = render.measure_text(2, 'o', bind[2])
     
            local speed = globals.frametime * 5
            local alpha = easing.quad_in_out(visuals.indicators.vars.values[i], 0, 1, 1)
     
            local adaptive_pos = (text_size.x / 2 * scope_value) + 2 * scope_value
     
            if i == 2 then
                ind_offset = ind_offset + 1
            end
     
            adaptive_pos = math.ceil(adaptive_pos)

            visuals.indicators.vars.values[i] = math.clamp(visuals.indicators.vars.values[i] + (bind[1] and speed or -speed), 0, 1)
            render.text(2, vector(pos[1] + 1 + adaptive_pos, pos[2] + ind_offset), color(bind[3][1], bind[3][2], bind[3][3], bind[3][4] * alpha), 'c', bind[2])
     
            ind_offset = ind_offset + 8 * alpha
        end
    else if UI.get('crosshair_style') == 'bluhgang' then
        local w = render.measure_text(2, 'o', "jagoyaw")
        local w2 = render.measure_text(2, 'o', "DT MUSLIM CRY")
        local w3 = render.measure_text(2, 'o', "HS DOGS CANT HIT")
        local w4 = render.measure_text(2, 'o', "DMG IQ TEST")
        local color_ref = UI.get('indicators_color')
        local binds = ui.get_binds()
        local alpha = math.sin(math.abs(-3.14 + (globals.curtime * (1 / 0.3)) % (3.14 * 2))) * 255

        render.gradient(vector(screen_size.x / 2, screen_size.y / 2 + 23), vector(screen_size.x / 2 + (math.abs(desync_delta * 50 / 100)), screen_size.y / 2 + 25), color(255, 255, 255,255),color(255, 255, 255, 0), color(255, 255, 255,255), color(255, 255, 255, 0))
     
        render.gradient(vector(screen_size.x / 2, screen_size.y / 2 + 23), vector(screen_size.x / 2 + (-math.abs(desync_delta * 50 / 100)), screen_size.y / 2 + 25), color(255, 255, 255,255), color(255,255, 255, 0), color(255, 255, 255,255), color(255, 255, 255, 0))
   
        render.text(fonts.fontdx.font, vector(x - (w.x/2)-3, y + 25), color(), nil, "jagoyaw")
   
        if (is_dt) then
   
            render.text(fonts.fontdx.font, vector(x - (w2.x/2)-3, y + 35), rage.exploit:get() == 0 and color(255,178,113) or color(150,178,113), nil, "DT MUSLIM CRY")
   
        end
   
        if (not is_dt and is_hs) then
   
            render.text(fonts.fontdx.font, vector(x - (w3.x/2)-3, y + 35), color(157,165,230), nil, "HS DOGS CANT HIT")
   
        end
   
        for i = 1, #binds do
   
            if binds[i].active and binds[i].name == "Minimum Damage" then
   
                if (is_dt or is_hs) then
                render.text(fonts.fontdx.font, vector(x - (w4.x/2)-3, y + 45), color(157,209,201), nil, "DMG IQ TEST")
                else
                render.text(fonts.fontdx.font, vector(x - (w4.x/2)-3, y + 35), color(157,209,201), nil, "DMG IQ TEST")
                end
            end
   
        end

    else if UI.get('crosshair_style') == 'Acatel' then
        local w = render.measure_text(2, nil, "JAG0YAW")
        local color_ref = UI.get('indicators_color')
        local alpha = math.sin(math.abs(-3.14 + (globals.curtime * (1 / 0.3)) % (3.14 * 2))) * 255
        render.text(fonts.fontdx.font, vector(x + 3, y + 15), color(), nil, "JAG0YAW ")
        render.text(fonts.fontdx.font, vector(x + 40, y + 15), color(), nil, helpers.colored_text(color_ref.r,color_ref.g,color_ref.b,alpha,script_db.lua_version:upper()))

        local data = entity.get_players(true)

        if #data == 0 then
            render.text(fonts.fontdx.font, vector(x + 3, y + 23), color(244, 208, 63, 255), nil, "DORMANCY:"..helpers.colored_text(255, 255, 255, 255,"0"))
        else
            render.text(fonts.fontdx.font, vector(x + 3, y + 23), color(136, 134, 255, 255), nil, "SMART:")
            render.text(fonts.fontdx.font, vector(x + 27, y + 23), color(165, 177, 217, 255), nil, ""..helpers.colored_text(255, 95, 91, 255,inverter_state and ' RIGHT' or " LEFT"))

        end

        if is_dt and not ref.fakeduck:get() and ref.auto_peek:get() then
            local chrg = rage.exploit:get()
            local text = math.floor((chrg * 1000) / 10) .. "x"
            local color_ = {255,0,0}
            if chrg == 1 then
                text = "100x"
                color_ = {84,255,40}
            end
            render.text(fonts.fontdx.font, vector(x + 3, y + 31), color(255, 255, 255, 255), nil, "IDEALTICK "..helpers.colored_text(color_[1], color_[2], color_[3], 255,text))
         
            numer = numer + 8
        elseif is_dt then
            local chrg = rage.exploit:get()
            local text = "DT"
            local color_ = {255,0,0}
            if chrg == 1 then
                color_ = {84,255,40}
            end
            if ref.fakeduck:get() then
                text = "DT (FAKE DUCK)"
            end
            render.text(fonts.fontdx.font, vector(x + 3, y + 31), color(color_[1], color_[2], color_[3], 255), nil, text)
            numer = numer + 8
        elseif ref.hide_shots.switch:get() then
            render.text(fonts.fontdx.font, vector(x + 3, y + 31), color(227, 167, 176, 255), nil, "ONSHOT")
            numer = numer + 8
        elseif ref.fakeduck:get() then
            render.text(fonts.fontdx.font, vector(x + 3, y + 31), color(255, 255, 255, 255), nil, "FAKE DUCK")
            numer = numer + 8
        end

        local baimcalc = render.measure_text(2, nil, "BAIM")
        render.text(fonts.fontdx.font, vector(x + 3, y + 31 + numer), color(255, 255, 255, is_baim == "Force" and 255 or 100), nil, "BAIM")
        local safecalc = render.measure_text(2, nil, "SP")
        render.text(fonts.fontdx.font, vector(x + 5 + baimcalc.x, y + 31 + numer), color(255, 255, 255, is_safe == "Force" and 255 or 100), nil, "SP")
        render.text(fonts.fontdx.font, vector(x + 5 + baimcalc.x + safecalc.x, y + 31 + numer), color(255, 255, 255, ref.freestanding.switch:get() and 255 or 100), nil, "FS")
     
--[[     elseif UI.get('crosshair_style') == 8 then
        if not EngineClient.IsInGame() then
            return
        end
        local localplayer = EntityList.GetLocalPlayer()
        if not localplayer then
            return
        end
        if not localplayer:IsAlive() then
            return
        end
        local foncik = fonts.verdana_bolde.font
        local screannn = vector(helpers.screen_size.x / 2.0, helpers.screen_size.y / 2.0 + 2.0)
        local aG = AntiAim.GetInverterState()
        local aE = handle_aa.vars.player_state
        aE = visuals.indicators.vars.other.Stuff.Indicators.State[aE-1] or visuals.indicators.vars.other.Stuff.Indicators.State[3]
        local bc = color(1.0, 0.53, 0.26)
        local bd = color(1.0, 1.0, 1.0)
        local a6 = aG and bd or bc
        local a7 = aG and bc or bd
        local a4 = {{Color = a6, Text = "jago"}, {Color = a7, Text = "yaw°"}}
        local bm = visuals.indicators.vars.other.Helpers:CalcMultiTextSize(a4, fonts.verdana_bolde.size, fonts.verdana_bolde.font)
        local bn = vector(screannn.x - bm.x / 2.0 + 2.0, screannn.y + 14.0)
        local bo = bc.a
        bc.a = visuals.indicators.vars.other.v:breathe(1) * bo
        render.text(
            "",
            vector(screannn.x + 1.0, screannn.y - 2.0),
            bc,
            fonts.verdana_bolde.size,
            fonts.verdana_bolde.font,
            true,
            true
        )
        bc.a = bo
        render.text("jagoyaw°", bn + 1.0, visuals.indicators.vars.other.Colors.Black, fonts.verdana_bolde.size, fonts.verdana_bolde.font)
        visuals.indicators.vars.other.Helpers:MultiText(a4, bn, fonts.verdana_bolde.size, fonts.verdana_bolde.font)
        screannn.y = screannn.y + bm.y + 14.0
        if visuals.indicators.vars.other.AntiBruteforce.Time ~= nil then
            local bp = 5.0
            local bq = bp + visuals.indicators.vars.other.AntiBruteforce.Time
            local br = 1.0
            if bq > GlobalVars.realtime then
                br = (bq - GlobalVars.realtime) / bp
            else
                visuals.indicators.vars.other.AntiBruteforce.Time = nil
            end
            screannn.y = screannn.y + 2.0
            local bs = vector(29.0, 3.0)
            Render.BoxFilled(
                vector(screannn.x - bs.x, screannn.y),
                vector(screannn.x + bs.x, screannn.y + bs.y),
                visuals.indicators.vars.other.Colors.Black
            )
            Render.BoxFilled(
                vector(screannn.x - bs.x + 1.0, screannn.y + 1.0),
                vector(screannn.x - bs.x + 1.0 + (bs.x - 1.0) * 2.0 * br, screannn.y + bs.y - 1.0),
                bc
            )
            screannn.y = screannn.y + bs.y
        end
        screannn.y = screannn.y + 3.0
        local bs = vector(28.0, 1.0)
        local bt = 8.0
        Render.BoxFilled(vector(screannn.x - bs.x, screannn.y), vector(screannn.x, screannn.y + bs.y), a6)
        Render.BoxFilled(vector(screannn.x + bs.x, screannn.y), vector(screannn.x, screannn.y + bs.y), a7)
        local bu = visuals.indicators.vars.other.Helpers:ColorCopy(a6)
        bu.a = 0.0
        Render.GradientBoxFilled(
            vector(screannn.x - bs.x, screannn.y),
            vector(screannn.x - bs.x + bs.y, screannn.y + bt),
            a6,
            a6,
            bu,
            bu
        )
        local bu = visuals.indicators.vars.other.Helpers:ColorCopy(a7)
        bu.a = 0.0
        Render.GradientBoxFilled(
            vector(screannn.x + bs.x, screannn.y),
            vector(screannn.x + bs.x - bs.y, screannn.y + bt),
            a7,
            a7,
            bu,
            bu
        )
        screannn.y = screannn.y + 2.0
        local bm = render.measure_text(aE.Preset, fonts.fontdx.size, fonts.fontdx.font)
        local bn = vector(screannn.x - bm.x / 2.0, screannn.y)
        render.text(aE.Preset, bn, aE.Colored and bc or bd, fonts.fontdx.size, fonts.fontdx.font, true, false)
        screannn.y = screannn.y + 9.0
        local bx = GlobalVars.frametime * 4.0
        if visuals.indicators.vars.other.CanFire() then
            visuals.indicators.vars.other.Stuff.Indicators.Animations.DT.Value =
                math.min(visuals.indicators.vars.other.Stuff.Indicators.Animations.DT.Value + bx, 1.0)
        else
            visuals.indicators.vars.other.Stuff.Indicators.Animations.DT.Value =
                math.max(visuals.indicators.vars.other.Stuff.Indicators.Animations.DT.Value - bx, 0.0)
        end
        local by = {
            [1] = {Text = "ROLL", Active = handle_aa.vars.antiaim_state[2] == 'Sideways Roll' or handle_aa.vars.antiaim_state[2] == 'Roll' },
            [2] = {Text = "FAKE", Active = handle_aa.vars.antiaim_state[2] == 'Massive fake'},
            [3] = {
                Text = "DT",
                Active = is_dt,
                Circle = visuals.indicators.vars.other.Stuff.Indicators.Animations.DT.Value
            },
            [4] = {Text = "OS", Active = is_hs},
            [5] = {Text = "SP", Active = is_safe == 2.0},
            [6] = {Text = "FB", Active = is_baim == 2.0},
            [7] = {Text = "FS", Active = ref.base:Get() == 5.0},
        }
        for bz, z in ipairs(by) do
            if not z.Active then goto aV end
            if z.Active == nil then
                goto aV
            end
            local bm = render.measure_text(z.Text, fonts.fontdx.size, fonts.fontdx.font)
            local bn = vector(screannn.x, screannn.y)
            if z.Active and z.Circle ~= nil then
                local ar = 3.3
                local bk = ar * 0.75
                Render.Circle(
                    vector(bn.x + bm.x / 2.0 + bk + 2, bn.y + bm.y / 2.0),
                    ar,
                    58.0,
                    bd,
                    1.8,
                    -180,
                    -180 + 360 * z.Circle
                )
            end
            bn.x = bn.x - bm.x / 2.0
            render.text(z.Text, bn, z.Active and bc or visuals.indicators.vars.other.Colors.Transperent, fonts.fontdx.size, fonts.fontdx.font, true, false)
            screannn.y = screannn.y + 9.0
            ::aV::
        end ]]
    end
    end
end
end
end

visuals.arrows = function()
    local localplayer = entity.get_local_player()
    if not localplayer then
        return
    end
    local inverter_state = (localplayer.m_flPoseParameter[11] * 120 - 60) > 0
 
    local w = 25
    local bgGap = 4
    local screen_size = render.screen_size()
    local x = screen_size.x / 2
    local y = screen_size.y / 2

    local arrows_color = UI.get('arrows_color')
    if UI.get('arrows_style') == "Team skeet" then
            local color1 = not inverter_state and arrows_color or color(0,0,0,75)
            local color2 = inverter_state and arrows_color or color(0,0,0,75)

            render.rect(vector(x - 48, y - 10), vector(x - 46, y + 9), color1)
            render.rect(vector(x + 47, y - 10), vector(x + 49, y + 9), color2)
        -- if ref.base:GetInt() == 2 or UI.get('roll_manual') == 2 then
        --     Render.PolyFilled(color(0, 0, 0, 0.3), vector(x - 50, y - 10), vector(x - 50, y + 9), vector(x - 66, y))
        --     Render.PolyFilled(arrows_color, vector(x + 52, y - 10), vector(x + 52, y + 9), vector(x + 66, y))
        -- elseif ref.base:GetInt() == 3 or UI.get('roll_manual') == 1 then        
        --     Render.PolyFilled(arrows_color, vector(x - 50, y - 10), vector(x - 50, y + 9), vector(x - 66, y))
        --     Render.PolyFilled(color(0, 0, 0, 0.3), vector(x + 52, y - 10), vector(x + 52, y + 9), vector(x + 66, y))
        -- else
        --     Render.PolyFilled(color(0, 0, 0, 0.3), vector(x - 50, y - 10), vector(x - 50, y + 9), vector(x - 66, y))
        --     Render.PolyFilled(color(0, 0, 0, 0.3), vector(x + 52, y - 10), vector(x + 52, y + 9), vector(x + 66, y))
            render.poly(color(0, 0, 0, 75), vector(x - 50, y - 10), vector(x - 50, y + 9), vector(x - 66, y))
            render.poly(color(0, 0, 0, 75), vector(x + 52, y - 10), vector(x + 52, y + 9), vector(x + 66, y))
        -- end
 
    elseif UI.get('arrows_style') == 'Jagoyaw' then
        local color1 = not inverter_state and arrows_color or color(0,0,0,75)
        local color2 = inverter_state and arrows_color or color(0,0,0,75)
        render.text(fonts.fontarrow.font, vector((x - 55), y - 18 + bgGap), color1, 'c', "w")
        render.text(fonts.fontarrow.font, vector((x + 55), y - 18 + bgGap), color2, 'c', "x")
    end
end

visuals.base_render = {
    box = function(x,y,w,h,color,rounding)
        render.rect_outline(vector(x,y), vector(x+w,y+h), color, 1, rounding == nil and 0 or rounding, false)
    end,
    box_filled = function(x,y,w,h,color,rounding)
        render.rect(vector(x,y), vector(x+w,y+h), color, rounding == nil and 0 or rounding, false)
    end,
    gradient_box_filled = function(x,y,w,h,horizontal,color,color2)
        render.gradient(vector(x,y), vector(x+w,y+h), color, color, horizontal and color2 or color, horizontal and color or color2, 0)
    end,
    string = function(x,y,cen,string,color,TYPE,font,fontsize)
        if TYPE == 0 then
            render.text(font, vector(x,y), color, cen and 'c' or '', string)
        elseif TYPE == 1 then
            render.text(font, vector(x,y), color, cen and 'c' or '', string)
        elseif TYPE == 2 then
            render.text(font, vector(x,y), color, cen and 'c' or '', string)
        end
    end,
    circle = function(x,y,rad,start,endd,color,seg,th)
        render.circle_outline(vector(x,y), color, rad, start, endd, th)
    end,
    text_size = function(string,font,fontsize)
        return render.measure_text(font, '', string)
    end
}

visuals.global_render = {
    box = function(x, y, w, colorref)
        visuals.base_render.box_filled(x,y+2,w,18,color(17,17,17,120*(colorref.a)/255),4)
        visuals.base_render.box_filled(x+3,y+1,w-6,1,color(colorref.r,colorref.g,colorref.b,colorref.a))
        visuals.base_render.circle(x+3,y+4,3,180,0.25,color(colorref.r,colorref.g,colorref.b,colorref.a),75,1)
        visuals.base_render.circle(x+w-3,y+4,3,-90,0.25,color(colorref.r,colorref.g,colorref.b,colorref.a),75,1)
        visuals.base_render.gradient_box_filled(x,y+4,1,12,false,color(colorref.r,colorref.g,colorref.b,colorref.a),color(colorref.r,colorref.g,colorref.b,0))
        visuals.base_render.gradient_box_filled(x+w-1,y+4,1,12,false,color(colorref.r,colorref.g,colorref.b,colorref.a),color(colorref.r,colorref.g,colorref.b,0))
    end
}

-- visuals.Render_engine = (function()
--     local self = {}

--     local renderer_fade = function(x, y, w, h, color, length, round)
--         local r, g, b, a = color.r, color.g, color.b, color.a

--         for i = 1, 10 do
--             Render.Box(vector(x - i, y - i), vector(w + i, h + i), color(r, g, b, (60 - (60 / length) * i) * (a / 255)), round)
--         end
--     end

--     local renderer_window = function(x, y, w, h, color, shadow_color, outline_color, left, outline)
--         local r, g, b, a = color.r, color.g, color.b, color.a
--         local r1, g1, b1, a1 = shadow_color.r, shadow_color.g, shadow_color.b, shadow_color.a
--         local r2, g2, b2, a2 = outline_color.r, outline_color.g, outline_color.b, outline_color.a

--         Render.Blur(vector(x, y), vector(w, h), color(1,1,1, a), 5)
     
--         if outline then
--             Render.Circle(vector(x + 4, y + 4), 4, 4, color(r, g, b, a), 1, -175, -90)

--             Render.BoxFilled(vector(x + 4, y), vector(w - 5, y+1), color(r, g, b, a))
--             Render.Circle(vector(w - 4, y + 4), 4, 4, color(r, g, b, a), 1, 260, 370)

--             Render.GradientBoxFilled(vector(x, y + 4), vector(x + 1, h - 6), color(r, g, b, a), color(r, g, b, a), color(r, g, b, 0), color(r, g, b, 0))
--             Render.GradientBoxFilled(vector(w - 1, y + 4), vector(w, h - 6), color(r, g, b, a), color(r, g, b, a), color(r, g, b, 0), color(r, g, b, 0))
--         end

--         Render.Box(vector(x, y), vector(w, h), color(r2, g2, b2, (80 / 255) * a2), 5)
     
--         if left then
--             Render.BoxFilled(vector(x, y + 4), vector(x+1, h - 5), color(r, g, b, a))

--             Render.Circle(vector(x + 5, y + 5), 5, 12, color(r, g, b, a), 1, -90, -165)

--             Render.Circle(vector(x + 5, h - 5), 5, 12, color(r, g, b, a), 1, -185, -255)

--             Render.GradientBoxFilled(vector(x + 4, y), vector(x+20, y+1), color(r, g, b, a), color(r, g, b, 0), color(r, g, b, a), color(r, g, b, 0))
--             Render.GradientBoxFilled(vector(x + 4, h - 1), vector(x+20, h), color(r, g, b, a), color(r, g, b, 0), color(r, g, b, a), color(r, g, b, 0))
--         end

--         Render.BoxFilled(vector(x+1, y+1), vector(w-1, h-1), color(0, 0, 0, a), 5)

--         renderer_fade(x, y, w, h, color(r1, g1, b1, (120 / 255) * a1), 10, 10)
--     end

--     self.container = function(x, y, w, h, color, name, font_size, font)
--         local name_size = render.measure_text(name, font_size, font)
--         -- Render.Blur(vector(x, y), vector(x + w + 3, y + h + 2), color(1, 1, 1, color.a), 6)
--         renderer_window(x, y, x + w + 3, y + h + 2, color(color.r, color.g, color.b, color.a), color(color.r, color.g, color.b, color.a), color(color.r, color.g, color.b, color.a), false, true)
--         render.text(name, vector(x + 1 + 1 + w / 2 + 1 - name_size.x / 2, y + 2 + 1), color(0, 0, 0, color.a), font_size, font)
--         render.text(name, vector(x + 1 + w / 2 + 1 - name_size.x / 2, y + 2), color(1, 1, 1, color.a), font_size, font)
--     end

--     return self
-- end)()

visuals.watermark = {}

visuals.watermark.draw = function()
    local speed = globals.frametime * 5
    local color_ref = UI.get('ui_color')
    local pos = { x = 0, y = 0, w = 0, h = 0 }
    pos.x, pos.y = render.screen_size().x, 0

    local offset = { x = 10, y = 10 }

    pos.x = pos.x - offset.x
    pos.y = pos.y + offset.y

    local text = ''

    local username = script_db.username

    if UI.get('watermark_name') == 'Custom' then
        username = UI.get('watermark_name_ref')
    end

    text = text .. script_db.lua_name .. ' [' .. script_db.lua_version .. '] | ' .. username .. ' | '

    local local_time = common.get_system_time()

    local time = string.format("%02d:%02d:%02d", local_time.hours, local_time.minutes, local_time.seconds)

    local ping = globals.is_in_game and math.floor(utils.net_channel().avg_latency[1] * 1000) or 0

    text = text .. 'delay: ' .. ping .. 'ms | ' .. time

    local text_size = render.measure_text(1, '', text)

    pos.x = pos.x - text_size.x
    pos.w = text_size.x
    pos.h = 16

    -- if UI.get('ui_style') == 0 then
        visuals.global_render.box(pos.x - 10, pos.y, pos.w + 10, { r = color_ref.r, g = color_ref.g, b = color_ref.b, a = 255 })

        visuals.base_render.string(pos.x - 10 + 6, pos.y + text_size.y / 2 - 1, false, text, color(255, 255, 255, 255), 1, 1)
    -- elseif UI.get('ui_style') == 1 then
    --     visuals.Render_engine.container(pos.x - 9, pos.y, pos.w + 9, pos.h, { r = color.r, g = color.g, b = color.b, a = 1 }, text, fonts.verdanar11.size, fonts.verdanar11.font)
    -- end
end

visuals.keybinds = {}

visuals.keybinds.get_keys = function()
    local binds = {}
    local cheatbinds = ui.get_binds()
 
    for i = 1, #cheatbinds do
        table.insert(binds, 1, cheatbinds[i])
    end
    return binds
end

visuals.keybinds.names = {
    ['Double Tap'] = 'Double tap',
    ['Hide Shots'] = 'On shot anti-aim',
    ['Slow Walk'] = 'Slow motion',
    ['Edge Jump'] = 'Jump at edge',
    ['Fake Ping'] = 'Ping spike',
    ['Override Resolver'] = 'Resolver override',
    ['Fake Duck'] = 'Duck peek assist',
    ['Minimum Damage'] = 'Damage override',
    ['Auto Peek'] = 'Quick peek assist',
    ['Body Aim'] = 'Force body aim',
    ['Safe Points'] = 'Safe points',
    ['Yaw Base'] = 'Yaw base',
    ['Enable Thirdperson'] = 'Thirdperson',
    ['Manual Yaw Base'] = 'Yaw base',
}

visuals.keybinds.upper_to_lower = function(str)
    local str1 = string.sub(str, 2, #str)
    local str2 = string.sub(str, 1, 1)
    return str2:upper()..str1:lower()
end

visuals.keybinds.vars = {
    alpha = {
        [ '' ] = 0
    },
    window = {
        alpha = 0,
        width = 0
    }
}

visuals.keybinds.dragging = helpers.dragging_fn('jagoyaw_keybinds', helpers.screen_size.x / 1.3, helpers.screen_size.y / 2.5)

visuals.keybinds.draw = function()
    local speed = globals.frametime * 5
    local color_ref = UI.get('ui_color')
    local pos = { x = 0, y = 0, w = 0, h = 0 }
    pos.x, pos.y = visuals.keybinds.dragging:get()
    pos.x = math.ceil(pos.x)
    pos.y = math.ceil(pos.y)
    local offset = 0
    local maximum_offset = 80

    local binds = visuals.keybinds.get_keys()
    for i = 1, #binds do
        local bind = binds[i]
        local bind_name = visuals.keybinds.names[bind.name] == nil and visuals.keybinds.upper_to_lower(bind.name) or visuals.keybinds.names[bind.name]

        local bind_state = ''
        if bind.value == true then
            local bind_mode = bind.mode
            if bind_mode == 2 then
                bind_state = 'toggled'
            elseif bind_mode == 1 then
                bind_state = 'holding'
            end
        else
            bind_state = bind.value
        end
     
        if visuals.keybinds.vars.alpha[bind_name] == nil then
            visuals.keybinds.vars.alpha[bind_name] = 0
        end
     
        local alpha = easing.quad_in_out(visuals.keybinds.vars.alpha[bind_name], 0, 1, 1)
        visuals.keybinds.vars.alpha[bind_name] = math.clamp(visuals.keybinds.vars.alpha[bind_name] + (bind.active and speed or -speed), 0, 1)
     
        local bind_state_size = render.measure_text(1, nil, bind_state)
        local bind_name_size = render.measure_text(1, nil, bind_name)

        -- if UI.get('ui_style') == 0 then
            visuals.base_render.string(pos.x + 4, pos.y + 21 + offset, false, bind_name, color(255, 255, 255, alpha*255), 1, 1)
            visuals.base_render.string(pos.x + (visuals.keybinds.vars.window.width - bind_state_size.x - 10), pos.y + 20 + offset, false, '[' .. bind_state .. ']', color(255, 255, 255, alpha*255), 1, 1)
        -- elseif UI.get('ui_style') == 1 then
        --     render.text(bind_name, vector(pos.x + 4 + 1, pos.y + 21 + 1 + offset), color(0, 0, 0, alpha), fonts.verdanar11.size, fonts.verdanar11.font)
        --     render.text(bind_name, vector(pos.x + 4, pos.y + 21 + offset), color(1, 1, 1, alpha), fonts.verdanar11.size, fonts.verdanar11.font)
         
        --     render.text('[' .. bind_state .. ']', vector(pos.x + 1 + (visuals.keybinds.vars.window.width - bind_state_size.x - 10), pos.y + 20 + 1 + offset), color(0, 0, 0, alpha), fonts.verdanar11.size, fonts.verdanar11.font)
        --     render.text('[' .. bind_state .. ']', vector(pos.x + (visuals.keybinds.vars.window.width - bind_state_size.x - 10), pos.y + 20 + offset), color(1, 1, 1, alpha), fonts.verdanar11.size, fonts.verdanar11.font)
        -- end

        offset = offset + 16 * alpha

        if maximum_offset < (bind_name_size.x + bind_state_size.x) + 30 then
            maximum_offset = bind_name_size.x + bind_state_size.x + 30
        end
    end

    pos.w = math.ceil(visuals.keybinds.vars.window.width)
    pos.h = 16

    local window_alpha = easing.quad_in_out(visuals.keybinds.vars.window.alpha, 0, 1, 1)
    visuals.keybinds.vars.window.alpha = math.clamp(visuals.keybinds.vars.window.alpha + ((ui.get_alpha() > 0 or #binds > 0) and speed or -speed), 0, 1)

    visuals.keybinds.vars.window.width = helpers.lerp(visuals.keybinds.vars.window.width, maximum_offset, speed * 2)

    -- if UI.get('ui_style') == 0 then
        visuals.global_render.box(pos.x, pos.y - 2, pos.w + 2, { r = color_ref.r, g = color_ref.g, b = color_ref.b, a = window_alpha * 255 })

        local main_text = render.measure_text(1, nil, 'keybinds')
 
        visuals.base_render.string(pos.x + 1 + pos.w / 2, pos.y + main_text.y - 3, true, 'keybinds', color(255, 255, 255, window_alpha * 255), 1, 1)
    -- elseif UI.get('ui_style') == 1 then
        -- visuals.Render_engine.container(pos.x, pos.y, pos.w, pos.h, { r = color.r, g = color.g, b = color.b, a = window_alpha }, 'keybinds', fonts.verdanar11.size, fonts.verdanar11.font)
    -- end

    visuals.keybinds.dragging:drag(pos.w, (10 + (8 * #binds)) * 2)
end

visuals.spectators = {}

visuals.spectators.vars = {
    players = {},
    alpha = {
        [ '' ] = 0
    },
    window = {
        alpha = 0,
        width = 0
    },
    specs = {
        m_alpha = 0,
        m_active = {},
        m_contents = {},
        unsorted = {}
    },
}

visuals.spectators.get_spectators = function(player)
    if not globals.is_connected or not globals.is_in_game then
        return
    end
 
    local me = entity.get_local_player()
    if not me then return end

    local observing = nil

    if me:is_alive() then
        observing = me:get_spectators()
    else
        local local_target = me.m_hObserverTarget
        if not local_target then return end
        observing = local_target:get_spectators()
    end

    return observing
end

visuals.spectators.dragging = helpers.dragging_fn('jagoyaw_spectators', helpers.screen_size.x / 1.5, helpers.screen_size.y / 2.5)

visuals.spectators.draw = function()
    local me = entity.get_local_player()
    local spectators = visuals.spectators.get_spectators()

    if not globals.is_connected or spectators == nil or me == nil then return end

    for i=1, 64 do
        visuals.spectators.vars.specs.unsorted[i] = {
            idx = i,
            active = false
        }
    end

    for i, spectator in pairs(spectators) do
        local idx = spectator:get_index()
        visuals.spectators.vars.specs.unsorted[idx] = {
            idx = idx,

            active = (function()
                if spectator == me then
                    return false
                end

                return true
            end)(),

            avatar = (function()
                local avatar = spectator:get_steam_avatar()

                if avatar == nil then
                    return nil
                end

                if visuals.spectators.vars.specs.m_contents[idx] == nil or visuals.spectators.vars.specs.m_contents[idx].conts ~= avatar then
                    visuals.spectators.vars.specs.m_contents[idx] = {
                        conts = avatar,
                        texture = avatar
                    }
                end

                return visuals.spectators.vars.specs.m_contents[idx].texture
            end)()
        }
    end

    local is_menu_open = ui.get_alpha() > 0
    local latest_item = false
 
    local speed = globals.frametime * 5
    local color_ref = UI.get('ui_color')
    local pos = { x = 0, y = 0, w = 0, h = 0 }
    pos.x, pos.y = visuals.spectators.dragging:get()
    pos.x = math.ceil(pos.x)
    pos.y = math.ceil(pos.y)
    local offset = 0
    local maximum_offset = 80

    for _, c_ref in pairs(visuals.spectators.vars.specs.unsorted) do
        local c_id = c_ref.idx
        local c_nickname = ''

        local c_entity = entity.get(c_id)

        if c_entity then
            c_nickname = string.sub(c_entity:get_name(), 1, 25)
        end

        if not visuals.spectators.vars.alpha[c_id] then
            visuals.spectators.vars.alpha[c_id] = 0
        end

        local ease = easing.quad_in_out(visuals.spectators.vars.alpha[c_id], 0, 1, 1)
        visuals.spectators.vars.alpha[c_id] = math.clamp(visuals.spectators.vars.alpha[c_id] + (c_ref.active and speed or -speed), 0, 1)

        if c_ref.active then
            latest_item = true

            if visuals.spectators.vars.specs.m_active[c_id] == nil then
                visuals.spectators.vars.specs.m_active[c_id] = {
                    alpha = 0, offset = 0, active = true
                }
            end

            local text_width = render.measure_text(1, nil, c_nickname)

            visuals.spectators.vars.specs.m_active[c_id].active = true
            visuals.spectators.vars.specs.m_active[c_id].offset = text_width.x + 30
            visuals.spectators.vars.specs.m_active[c_id].alpha = ease
            visuals.spectators.vars.specs.m_active[c_id].avatar = c_ref.avatar
            visuals.spectators.vars.specs.m_active[c_id].name = c_nickname

        elseif visuals.spectators.vars.specs.m_active[c_id] ~= nil then
            visuals.spectators.vars.specs.m_active[c_id].active = false
            visuals.spectators.vars.specs.m_active[c_id].alpha = ease

            if visuals.spectators.vars.specs.m_active[c_id].alpha <= 0 then
                visuals.spectators.vars.specs.m_active[c_id] = nil
            end
        end

        if visuals.spectators.vars.specs.m_active[c_id] ~= nil and visuals.spectators.vars.specs.m_active[c_id].offset > maximum_offset then
            maximum_offset = visuals.spectators.vars.specs.m_active[c_id].offset
        end
    end

    if is_menu_open and not latest_item then
        local case_name = ' '
        local text_width = 0 --renderer.measure_text(nil, case_name)

        latest_item = true
        maximum_offset = maximum_offset < text_width and text_width or maximum_offset

        visuals.spectators.vars.specs.m_active[case_name] = {
            name = ' ',
            active = true,
            offset = text_width,
            alpha = 0
        }
    end

    for c_name, c_ref in pairs(visuals.spectators.vars.specs.m_active) do
        local text_size = render.measure_text(1, nil, c_ref.name)

        -- print(c_ref.alpha)

        local adder = { text = 5 + 12 + 3, avatar = 5 }

        if UI.get('avatar_side') == 'Right' then
            adder = { text = 5, avatar = math.ceil(visuals.spectators.vars.window.width) - 5 - 12 }
        end

        visuals.base_render.string(pos.x + adder.text, pos.y + 21 + offset, false, c_ref.name, color(255, 255, 255, c_ref.alpha*255), 1, 1)
        -- renderer.text(x + 5 + ((c_ref.avatar and not right_offset) and text_size[2] + 5 or 0) + 1, y + height_offset - 5 + 5 * c_ref.alpha, 255, 255, 255, 255 * c_ref.alpha, font, w - (text_size[2] + 15), c_ref.name)
 
        if c_ref.avatar ~= nil then
            -- renderer.texture(c_ref.avatar, x + 1 + (right_offset and w - 15 or 5), y + height_offset - 5 + 5 * c_ref.alpha, text_size[2], text_size[2], 255, 255, 255, 255 * c_ref.alpha, 'f')
            render.texture(c_ref.avatar, vector(pos.x + adder.avatar, pos.y + 21 + offset), vector(12, 12), color(255, 255, 255,  c_ref.alpha*255))
        end
 
        offset = offset + (text_size.y + 3) * c_ref.alpha
    end

    pos.w = math.ceil(visuals.spectators.vars.window.width)
    pos.h = 16

    local window_alpha = easing.quad_in_out(visuals.spectators.vars.window.alpha, 0, 1, 1)
    visuals.spectators.vars.window.alpha = math.clamp(visuals.spectators.vars.window.alpha + ((ui.get_alpha() > 0 or #spectators > 0) and speed or -speed), 0, 1)

    visuals.spectators.vars.window.width = helpers.lerp(visuals.spectators.vars.window.width, maximum_offset, speed * 2)

    -- if UI.get('ui_style') == 0 then
        visuals.global_render.box(pos.x, pos.y - 2, pos.w + 3, { r = color_ref.r, g = color_ref.g, b = color_ref.b, a = window_alpha * 255 })

        local main_text = render.measure_text(1, nil, 'spectators')
 
        visuals.base_render.string(pos.x + 1 + pos.w / 2, pos.y + main_text.y - 3, true, 'spectators', color(255, 255, 255, window_alpha * 255), 1, 1)
    -- elseif UI.get('ui_style') == 1 then
    --     visuals.Render_engine.container(pos.x, pos.y, pos.w, pos.h, { r = color_ref.r, g = color_ref.g, b = color_ref.b, a = window_alpha }, 'spectators', fonts.verdanar11.size, fonts.verdanar11.font)
    -- end

    visuals.spectators.dragging:drag(pos.w, (10 + (8 * #spectators)) * 2)
end

visuals.hitmarker = {}

visuals.hitmarker.vars = {
    data = {},
    queue = {}
}

visuals.hitmarker.on_bullet_impact = function(e)
    if not UI.contains('visual_elements', 'Other') and not UI.get('hitmarker') then return end
    if entity.get(e.userid, true) == entity.get_local_player() then
        local impactX = e.x
        local impactY = e.y
        local impactZ = e.z
        table.insert(visuals.hitmarker.vars.data, { impactX, impactY, impactZ, globals.realtime })
    end
end

visuals.hitmarker.on_player_hurt = function(e)
    if not UI.contains('visual_elements', 'Other') and not UI.get('hitmarker') then return end
    local bestX, bestY, bestZ = 0, 0, 0
    local bestdistance = 100
    local realtime = globals.realtime
    if entity.get(e.attacker, true) == entity.get_local_player() then
        local victim = entity.get(e.userid, true)
        if victim ~= nil then
            local victimOrigin = victim.m_vecOrigin
            local victimDamage = e.dmg_health
            local victimhelf = victim.m_iHealth - victimDamage

            for i in ipairs(visuals.hitmarker.vars.data) do
                local data = visuals.hitmarker.vars.data[i]
                if data[4] + (4) >= realtime then
                    local impactX = data[1]
                    local impactY = data[2]
                    local impactZ = data[3]

                    local distance = helpers.vectordistance(victimOrigin.x, victimOrigin.y, victimOrigin.z, impactX, impactY, impactZ)
                    if distance < bestdistance then
                        bestdistance = distance
                        bestX = impactX
                        bestY = impactY
                        bestZ = impactZ
                    end
                end
            end

            if bestX == 0 and bestY == 0 and bestZ == 0 then
                victimOrigin.z = victimOrigin.z + 50
                bestX = victimOrigin.x
                bestY = victimOrigin.y
                bestZ = victimOrigin.z
            end

            for k in ipairs(visuals.hitmarker.vars.data) do
                visuals.hitmarker.vars.data[k] = { 0, 0, 0, 0 }
            end
            table.insert(visuals.hitmarker.vars.queue, { bestX, bestY, bestZ, realtime, victimDamage, victimhelf } )
        end
    end
end

visuals.hitmarker.on_player_spawned = function(e)
    if not UI.contains('visual_elements', 'Other') and not UI.get('hitmarker') then return end
    if entity.get(e.userid, true) == entity.get_local_player() then
        for i in ipairs(visuals.hitmarker.vars.data) do
            visuals.hitmarker.vars.data[i] = { 0, 0, 0, 0 }
        end
 
        for i in ipairs(visuals.hitmarker.vars.queue) do
            visuals.hitmarker.vars.queue[i] = { 0, 0, 0, 0, 0, 0 }
        end
    end
end

visuals.hitmarker.draw = function()
    local HIT_MARKER_DURATION = 2
    local realtime = globals.realtime
    local maxTimeDelta = HIT_MARKER_DURATION / 2
    local maxtime = realtime - maxTimeDelta / 2
 
    for i in ipairs(visuals.hitmarker.vars.queue) do
        local marker = visuals.hitmarker.vars.queue[i]
        if marker[4] + HIT_MARKER_DURATION > maxtime then
            if marker[1] ~= nil then

                local add = (marker[4] - realtime) * 50

                local w2c = render.world_to_screen(vector((marker[1]), (marker[2]), (marker[3])))
                local w2c2 = render.world_to_screen(vector((marker[1]), (marker[2]), (marker[3]) - add))
                if not w2c or not w2c2 then return end
                if w2c.x ~= nil and w2c.y ~= nil then
                    local alpha = 255  
                    if (marker[4] - (realtime - HIT_MARKER_DURATION)) < (HIT_MARKER_DURATION / 2) then                      
                        alpha = math.floor((marker[4] - (realtime - HIT_MARKER_DURATION)) / (HIT_MARKER_DURATION / 2) * 255)
                        if alpha < 5 then
                            marker = { 0 , 0 , 0 , 0, 0, 0 }
                        end          
                    end

                    local HIT_MARKER_SIZE = 6
                    local col = UI.get('hitmarker_plus_color')
                    local col2 = UI.get('hitmarker_damage_color')

                    -- local color1 = color(255, 255, 255, alpha)
                    local color2 = color(155, 200, 21, alpha)


                    local colorspiese = marker [6] <= 0 and color2 or col2

                    if UI.contains('hitmarker_type', 'damage') then
                        render.text(1, vector(w2c2.x + 1, w2c2.y + 1), color(0, 0, 0, alpha), '', "-" .. tostring(marker[5]))
                        render.text(1, vector(w2c2.x + 1, w2c2.y + 1), colorspiese, '', "-" .. tostring(marker[5]))
                    end
                    if UI.contains('hitmarker_type', '+') then
                        render.gradient(vector(w2c.x - 1, w2c.y - HIT_MARKER_SIZE), vector(w2c.x + 1, w2c.y), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), 0)
                        render.gradient(vector(w2c.x - HIT_MARKER_SIZE, w2c.y - 1), vector(w2c.x, w2c.y + 1), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), 0)
                        render.gradient(vector(w2c.x - 1, w2c.y + HIT_MARKER_SIZE), vector(w2c.x + 1, w2c.y), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), 0)
                        render.gradient(vector(w2c.x + HIT_MARKER_SIZE, w2c.y - 1), vector(w2c.x, w2c.y + 1), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), color(col.r, col.g, col.b, alpha), 0)
                    end
                end
            end
        end
    end
end

visuals.custom_scope = {}

visuals.custom_scope.vars = {
    inaccuracy = 0
}

visuals.custom_scope.draw = function()
    ref.override_zoom.force_viewmodel:set(UI.get('viewmodel_scope'))

    local screen_size = render.screen_size()

    local speed = 6
 
    local lp = entity.get_local_player()
    if not lp then return end

    local my_weapon = lp:get_player_weapon()
    if not my_weapon then return end

    local length = UI.get('custom_scope_lenght')
    local offset = UI.get('custom_scope_offset')

    local color_ref = UI.get('custom_scope_color')

    local weapon_inaccuracy = my_weapon:get_inaccuracy(my_weapon) * 100

    local inaccuracy = UI.get('custom_scope_inaccuracy')

    visuals.custom_scope.vars.inaccuracy = inaccuracy and helpers.lerp( visuals.custom_scope.vars.inaccuracy, weapon_inaccuracy, globals.frametime * 20 ) or 0

    local inaccuracy_value = math.floor(visuals.custom_scope.vars.inaccuracy)

    local offset, initial_position =
    offset * screen_size.y / 1080,
    length * screen_size.y / 1080

    local scope_level = my_weapon.m_zoomLevel

    local scoped = lp.m_bIsScoped
    local resume_zoom = lp.m_bResumeZoom

    local is_valid = lp:is_alive() and my_weapon ~= nil and scope_level ~= nil

    local act = is_valid and scope_level > 0 and scoped and not resume_zoom

    if act then
        ref.override_zoom.scope_overlay:set('Remove All')
 
        render.gradient(vector(screen_size.x/2 - initial_position + 2 - inaccuracy_value, screen_size.y / 2), vector(screen_size.x/2 - initial_position + 2 + initial_position - offset - inaccuracy_value, screen_size.y / 2 + 1), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0), 0)
 
        render.gradient(vector(screen_size.x/2 + offset + inaccuracy_value, screen_size.y / 2), vector(screen_size.x/2 + offset + initial_position - offset - 1 + inaccuracy_value, screen_size.y / 2 + 1), color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, 0)

        render.gradient(vector(screen_size.x / 2, screen_size.y/2 - initial_position + 2 - inaccuracy_value), vector(screen_size.x / 2 + 1, screen_size.y/2 - initial_position + 2 + initial_position - offset - inaccuracy_value), color_ref, color_ref, color(color_ref.r, color_ref.g, color_ref.b, 0), color(color_ref.r, color_ref.g, color_ref.b, 0), 0)

        render.gradient(vector(screen_size.x / 2, screen_size.y/2 + offset + inaccuracy_value), vector(screen_size.x / 2 + 1, screen_size.y/2 + offset + initial_position - offset - 1 + inaccuracy_value), color(color_ref.r, color_ref.g, color_ref.b, 0), color(color_ref.r, color_ref.g, color_ref.b, 0), color_ref, color_ref, 0)
    end
end

local logs = { }

function add_log( text )
    table.insert( logs, { text = text, expiration = 8 } )
end

local lucida = render.load_font("C:\\Windows\\Fonts\\lucon.ttf", 10, "d")

local hb = {
    [0] = 'generic',
    'head', 'chest', 'stomach',
    'left arm', 'right arm',
    'left leg', 'right leg',
    'neck', 'generic', 'gear'
}
local reason =
{
    ["spread"] = "spread" ,
    ["correction"]= "?" ,
    ["occlusion"] = "spread",
    ["jitter correction"] = "?" ,
    ["prediction error"] = "prediction error" ,
    ["lagcomp failure"] = "?"
}

function log_log()
    if #logs <= 0 then
        return
    end

    local x = 8
    local y = 5
    local size = 12 + 1

    for i = 1, #logs do
        local notify = logs[ i ]

        if not notify then
            goto continue
        end

        logs[ i ].expiration = logs[ i ].expiration - globals.frametime

        if logs[ i ].expiration <= 0.0 then
            table.remove( logs, i )
        end

        ::continue::
    end

    for i = 1, #logs do
        local notify = logs[ i ]

        if not notify then
            goto continue
        end

        local left = logs[ i ].expiration
        local color = color( )
     
        if left <= 0.5 then
            local f = left;
            math.clamp( f, 0.0, 0.5 )

            f = f / 0.5;

            color.a = math.floor( f * 255.0 )

            if i == 1 and f <= 0.2 then
                y = y - ( size * ( 1.0 - f / 0.2 ) )
            end
        else
            color.a = 255
        end

        render.text( lucida, vector( x, y ), color, "", logs[ i ].text )
        y = y + size

        ::continue::
    end
end

local TICKS_TO_TIME = function(ticks)
    return globals.tickinterval * ticks
end

local print_skeet = function( ctx )
    local col = color( 220, 220, 220, 255 )
    local col_str = col:to_hex( )
    local acc = color( 160, 203, 39 )
    local acc_str = acc:to_hex( )
    print_raw( string.format( "\a%s[gamesense] \a%s%s", acc_str:sub(0, 6), col_str:sub( 0 , 6 ), ctx ) )
end

local on_hit = function( ctx )
    local name = ctx.target:get_name()
    local hitgroup_ = hb[ctx.hitgroup]
    local hitgroup = hb[ctx.wanted_hitgroup]
    local bt_ms = math.floor(TICKS_TO_TIME(ctx.backtrack) * 1000)
    local random1 = math.random(0,1000)
    local random12 = math.random(0,1000)
    local random13 = math.random(0,1000)
    local random2 = math.random(0,9)
    local random22 = math.random(0,9)
    local random23 = math.random(0,9)
    local random24 = math.random(0,9)
    local random25 = math.random(0,9)
    local random3 = math.random(0,58)
    local random4 = math.random(0,20)
    local random5 = math.random(0,20)
    local health = ctx.target.m_iHealth
    local wanted_dmg_str = ctx.damage ~= ctx.wanted_damage and string.format("(%i)", ctx.wanted_damage) or ""

    local string = string.format("Hit %s in the %s for %i (%i health remaining)",name, hitgroup_, ctx.damage,health)
    local string2 = string.format("[%i/%i] Hit %s's in the %s for %i%s damage (%i health remaining), aimed=%s(%i%%) bt= %ims del= %i %i (%i:%i:%i/%i) LC=%i TC=%i (%i)",random1,random12,name, hitgroup_, ctx.damage, wanted_dmg_str,health, hitgroup, ctx.hitchance, bt_ms,random2,random22,random23,random24,random25,random3,random4,random5,random13)
 
    print_skeet(string)
    add_log(string)
    print_skeet(string2)
    add_log(string2)
end

local on_miss = function( ctx )

    local name = ctx.target:get_name()
    local hitgroup = hb[ctx.wanted_hitgroup]
    local reason = reason[ctx.state]
    local bt_ms = math.floor(TICKS_TO_TIME(ctx.backtrack) * 1000)
    local random1 = math.random(0,1000)
    local random12 = math.random(0,1000)
    local random13 = math.random(0,1000)
    local random2 = math.random(0,9)
    local random22 = math.random(0,9)
    local random23 = math.random(0,9)
    local random24 = math.random(0,9)
    local random25 = math.random(0,9)
    local random3 = math.random(0,58)
    local random4 = math.random(0,20)
    local random5 = math.random(0,20)


    local string = string.format("[%i/%i] Missed %s's %s(%i)(%i%%) due to %s, bt= %i (B) (%i:%i:%i/%i) LC=%i TC=%i (%i)",random1,random12, name, hitgroup,ctx.wanted_damage,ctx.hitchance,reason,bt_ms,random23,random24,random25,random3,random4,random5,random13)

    add_log(string)
    print_skeet(string)
end

events.aim_ack:set( function( ctx )

    if ctx.state then
        on_miss( ctx )
        return
    end

    on_hit( ctx )
end )




local ragebot = {}

ragebot.hitchance_overrides = function()
    ref.hitchance.value:override(nil)
    local lp = entity.get_local_player()
    if UI.get('hitchance_air_enable') and helpers.in_air(lp) then
        local active_weapon = lp:get_player_weapon()
        if not active_weapon then return end
        local weapon_classname = active_weapon:get_classname()
        local enabled_weapons = UI.get('hitchance_air_weapons')
        print(weapon_classname)
        -- if false then
        --     ref.hitchance.value:override(UI.get('hitchance_air'))
        -- end
    end

    local scoped = lp.m_bIsScoped
    local onground = helpers.on_ground(lp)
    if UI.get('hitchance_noscope_enable') and not scoped and onground then
        local active_weapon = lp:get_player_weapon()
        if not active_weapon then return end
        local weapon_classname = active_weapon:get_classname()
        local enabled_weapons = UI.get('hitchance_noscope_weapons')
        print(weapon_classname)
        -- if weapon_id == 11 or weapon_id == 38 then
        --     ref.hitchance.value:override(UI.get('hitchance_noscope'))
        -- end
    end
end

menu.gears.air_hc = UI.get_element('hitchance_air_enable'):create()

menu.gears.noscope_hc = UI.get_element('hitchance_noscope_enable'):create()

ragebot.doubletap = {}

ragebot.doubletap.predict_dt_damage = function()
    ref.minimum_damage.value:override(nil)
    if rage.exploit:get() ~= 1 then
        return
    end

    local binds = ui.get_binds()
    for i = 1, #binds do
        if binds[i].active and binds[i].name == "Minimum Damage" then
            return
        end
    end

    local players = entity.get_players(true)

    if not players then
        return
    end

    for _, player in pairs(players) do
        if not player or not player:is_alive() then
        goto continue end

        local health = player.m_iHealth

        if health < 0 then goto continue end
        local local_player = entity.get_local_player()
        local is_alive = local_player:is_alive()
        if not is_alive then return end
        local active_weapon = local_player:get_player_weapon()
        if active_weapon == nil then return end
        local weapon_id = active_weapon:get_weapon_index()
        if weapon_id == nil then return end

        if weapon_id == 11 or weapon_id == 38 then
            ref.minimum_damage.value:override(math.floor(health / 2 + 0.5))
        end

        ::continue::
    end
end

ragebot.doubletap.can_shift_shot = function(tts)
    local me = entity.get_local_player()
    if me == nil then return end
    local wpn = me:get_player_weapon()
    if (not me or not wpn) then
        return false
    end

    local tickbase = me.m_nTickBase
    local curtime = globals.tickinterval * (tickbase - tts)

    if (curtime < me.m_flNextAttack) then
        return false
    end
    if (curtime < wpn.m_flNextPrimaryAttack) then
        return false
    end
    return true
end

ragebot.doubletap.recharge = function()
    local is_charged = rage.exploit:get()
    if (ragebot.doubletap.can_shift_shot(15) and is_charged ~= 1) then
        rage.exploit:allow_charge(true)
        rage.exploit:force_charge()
    end
end

local misc = {}

misc.teleport_inair = function()
    if not ref.doubletap.switch:get() then return end
    local Allow_Work = false
    local Need_Teleport = false

    local Localplayer = entity.get_local_player()
    local Weapon = Localplayer:get_player_weapon()
    if Weapon == nil then return end
    local WeaponID = Weapon:get_classname()

    local IsKnife = WeaponID == 'CKnife'

    local CanHit = function(entity)
        local damage, trace = utils.trace_bullet(entity, entity:get_hitbox_position(3), Localplayer:get_hitbox_position(3))
 
        if damage ~= 0 then
            if damage < 50 and ((trace.entity and trace.entity == Localplayer) or false) then
                print(damage)
                return true
            end
        end
 
        return false
    end

    if not IsKnife then
        for _, Enemy in pairs(entity.get_players(true)) do
            if Enemy == Localplayer then goto skip end
            if CanHit(Enemy) then
                Need_Teleport = true
            end
            ::skip::
        end
    end

    local Getflag = function(entity, flag)
        return bit.band(entity.m_fFlags, bit.lshift(1, flag)) ~= 0
    end

    if Need_Teleport and not Getflag(Localplayer, 0) then
        rage.exploit:force_teleport()
    end
end

misc.killsay = {}

misc.killsay.phrases = {
    "𝕕𝕚𝕕 𝕦 𝕣𝕝𝕪 𝕥𝕙𝕚𝕟𝕜 𝕦 𝕔𝕒𝕟 𝕜𝕚𝕝𝕝 𝕛𝕒𝕘𝕠𝕪𝕒𝕨 𝕦𝕤𝕖𝕣?",
    "𝕤𝕥𝕠𝕡 𝕥𝕣𝕪𝕚𝕟𝕘 𝕣𝕖𝕥𝕒𝕣𝕕, 𝕦 𝕨𝕠𝕟𝕥 𝕜𝕚𝕝𝕝 𝕞𝕖",
    "昑寧願讓你操蛋也不願殺了jagoyaw哘哘",
    "記住昑在使用 jagoyaw.lua 時是最好的",
    "你不蘽殺 買昑的配置 shoppy.gg/@vektus1337 書呆存",
    "Ты не можејь јбить? Кјпите мой конфиг shoppy.gg/@vektus1337 болван",
    "what you do dog??",
    "держи зонтик ☂, тебя обојјали",
    "𝕠𝕨𝕟𝕖𝕕 𝕓𝕪 𝕘𝕠𝕕𝕖𝕝𝕖𝕤𝕤 𝕜𝕚𝕕",
    "Создатель 𝘉𝘒 𝘑𝘄𝘙𝘎𝘋𝘕𝘄𝘑",
    "👺1 𝔰𝔥𝔬𝔱 𝔟𝔶 𝔑𝔑𝔟𝔩𝔞𝔰𝔱𝔢𝔯👺"
}

misc.killsay.get_phrase = function()
    return misc.killsay.phrases[utils.random_int(1, #misc.killsay.phrases)]:gsub('\"', '')
end

misc.killsay.run = function(e)
    local me = entity.get_local_player()
    local victim = entity.get(e.userid, true)
    local attacker = entity.get(e.attacker, true)

    if victim == attacker or attacker ~= me then return end

    utils.console_exec('say "' .. misc.killsay.get_phrase() .. '"')
end

local function hsv_to_rgb(h, s, v, a)
    local r, g, b

    local i = math.floor(h * 6);
    local f = h * 6 - i;
    local p = v * (1 - s);
    local q = v * (1 - f * s);
    local t = v * (1 - (1 - f) * s);

    i = i % 6

    if i == 0 then r, g, b = v, t, p
    elseif i == 1 then r, g, b = q, v, p
    elseif i == 2 then r, g, b = p, v, t
    elseif i == 3 then r, g, b = p, q, v
    elseif i == 4 then r, g, b = t, p, v
    elseif i == 5 then r, g, b = v, p, q
    end

    return r * 255, g * 255, b * 255, a * 255
end
local function func_rgb_rainbowize(frequency, rgb_split_ratio)
    local r, g, b, a = hsv_to_rgb(globals.realtime * frequency, 1, 1, 1)

    r = r * rgb_split_ratio
    g = g * rgb_split_ratio
    b = b * rgb_split_ratio

    return r, g, b
end

function bar()
    local r, g, b = func_rgb_rainbowize(0.1, 1)
local screen_size = render.screen_size()
local a = 255
render.gradient(vector(0,0), vector(screen_size.x / 4, 2),color(r,g,b,a), color(b,g,r,a), color(r,g,b,a), color(b,g,r,a),0)
render.gradient(vector(screen_size.x / 4,0), vector(screen_size.x / 2, 2),color(b,g,r,a), color(g,r,b,a), color(b,g,r,a), color(g,r,b,a),0)
render.gradient(vector(screen_size.x / 2,0), vector(screen_size.x / 1.3, 2),color(g,r,b,a), color(b,r,g,a), color(g,r,b,a), color(b,r,g,a),0)
render.gradient(vector(screen_size.x / 1.3,0), vector(screen_size.x, 2),color(b,r,g,a), color(g,b,r,a), color(b,r,g,a), color(g,b,r,a),0)


render.gradient(vector(0,2), vector(screen_size.x / 4, 4),color(r,g,b,a), color(b,g,r,a), color(r,g,b,0), color(b,g,r,0),0)
render.gradient(vector(screen_size.x / 4,2), vector(screen_size.x / 2, 4),color(b,g,r,a), color(g,r,b,a), color(b,g,r,0), color(g,r,b,0),0)
render.gradient(vector(screen_size.x / 2,2), vector(screen_size.x / 1.3, 4),color(g,r,b,a), color(b,r,g,a), color(g,r,b,0), color(b,r,g,0),0)
render.gradient(vector(screen_size.x / 1.3,2), vector(screen_size.x, 4),color(b,r,g,a), color(g,b,r,a), color(b,r,g,0), color(g,b,r,0),0)
end

local local_player = entity.get_local_player()

local msg = {
    ", why so bad NN XD? get good at shoppy.gg/@vektus1337",
    ", NN go watch some HvH Tutorials at www.youtube.com/vektus1337",
    ", laff hurensohn go visit shoppy.gg/@vektus1337 XD make your mom proud",
    ", get on my level, Free HvH Tutorials at youtube.com/vektus1337",
    ", uff 1tab dog",
    ", headshot bitch",
    ", owned kid lafff",
    ", why so bad? get good at shoppy.gg/@vektus1337",
    ", shit wannabe keep watching my videos trying to play like me lachbombe",
    ", HvH Tutorials at www.youtube.com/vektus1337 fucking faNN",
    ", HHHHHHHHHHH nice 10 iq monkey with BOT playstyle go kys fucking freak",
    ", hhhhhhh 1 shot by the NNblaster",
    ", HEADSHOT lachflip umed?",
    ", blasted lachkick HAHAHAHAHAHA",
    ", laff you suck HAHAHAHAHAHA imagine being so shit like u XD",
    ", 1tap laff sit fucking dog"
}

local function get_table_length(data)
    if type(data) ~= 'table' then
      return 0
    end
    local count = 0
    for _ in pairs(data) do
      count = count + 1
    end
    return count
  end

  local msg_final = get_table_length(msg)
  events.player_death:set(function(e)
    local attacker = entity.get(e.attacker, true)
    local victim = entity.get(e.userid, true)
    if attacker == local_player and victim:is_enemy() and UI.get('trash') then
        local command = "say " .. victim:get_name() .. msg[math.random(msg_final)]
        utils.console_exec(command)
    end

  end)
  local font3 = render.load_font("C:\\Windows\\Fonts\\lucon.ttf", 10, "ad")
function spectators()
    local local_player = entity.get_local_player();
    local spectators;
    local screen_size = render.screen_size()
    local size;

    if local_player == nil then
        return
    end

    if local_player:is_alive() then
        spectators = local_player:get_spectators()
    else
        local local_target = local_player.m_hObserverTarget
        if not local_target then
            return
        end
        spectators = local_target:get_spectators()
    end

    if spectators == nil then
        return
    end

    for i, spectator in pairs(spectators) do

   if spectator == nil then
        return
    end

        size = render.measure_text(font3,"d", spectator:get_name())
        --print(size.x)
        render.text(1, vector((screen_size.x - 5) - size.x, -23 + (i * 20) + size.y), color(255, 255, 255, 240), nil, spectator:get_name())
    end
end

local debug_font = render.load_font("C:\\Windows\\Fonts\\Tahoma.ttf", 12, "da")
function debug_info()

    local local_player = entity.get_local_player(); if (local_player == nil) then return end

    local screen_size = render.screen_size()

    local alpha = math.sin(math.abs(-3.14 + (globals.curtime * (1 / 0.3)) % (3.14 * 2))) * 255

    local charge = "false"

    local desync_delta = local_player.m_flPoseParameter[11] * 120 - 60

    if (rage.exploit:get() == 0) then charge = "false" end
    if (rage.exploit:get() == 1) then charge = "true" end

    render.text(1, vector((screen_size.x * 0.01), screen_size.y / 2.8), color(255, 255, 255, 255), nil, "jag0.lua - " .. common.get_username());

    render.text(1, vector((screen_size.x * 0.01), screen_size.y / 2.73), color(255, 255, 255, 255), nil, "version: ");
    render.text(1, vector((screen_size.x * 0.032), screen_size.y / 2.73), color(255, 255, 255, alpha), nil, script_db.lua_version:lower());

    render.text(1, vector((screen_size.x * 0.01), screen_size.y / 2.67), color(255, 255, 255, 255), nil, "exploit charge:" .. charge);

    render.text(1, vector((screen_size.x * 0.01), screen_size.y / 2.61), color(255, 255, 255, 255), nil, "desync amount:" .. math.abs(math.ceil(desync_delta)) .. "°".. "(" .. math.ceil(rage.antiaim:get_max_desync()) .. "°)");

end
function shoppy()
    local screen_size = render.screen_size()
    local size = render.measure_text(1, 'ad', "shoppy.gg/@vektus1337")
    local color_ref = UI.get('ui_color')
    render.text(1, vector((screen_size.x / 2) - (size.x / 2) , screen_size.y - 20), color(255, 255, 255, 255), nil, "shoppy.gg/@" );
    render.text(1, vector((screen_size.x / 2)  , screen_size.y - 20), color_ref, nil, " vektus1337" );
end

function left_hand()
    local local_player = entity.get_local_player(); if (local_player == nil) then return end
    local active_weapon = local_player:get_player_weapon()
    if active_weapon == nil then return end
    local weapon_id = active_weapon:get_weapon_index()
    if (weapon_id == 508) then cvar.cl_righthand:int(0) else cvar.cl_righthand:int(1) end
end
-- local anims = {}
-- anims.cache = {}
-- function set_parameter(ptr, layr, start, stop)
--     ptr = ffi.cast("unsigned int", ptr) if ptr == 0x0 then return false end

--     local hdr = ffi.cast("void**", ptr + 0x2950)[0] if hdr == nil then return false end

--     local params = ffi_stuff.get_pose_parameters(hdr, layr)

--     if params == nil or params == 0x0 then return end

--     if anims.cache[layr] == nil then
--         anims.cache[layr] = {}
--         anims.cache[layr].m_flStart = params.m_flStart
--         anims.cache[layr].m_flEnd = params.m_flEnd
--         anims.cache[layr].m_flState = params.m_flState
--         anims.cache[layr].set = false
--         return true
--     end

--     if start ~= nil and not anims.cache[layr].set then
--         params.m_flStart   = start
--         params.m_flEnd     = stop
--         params.m_flState   = (params.m_flStart + params.m_flEnd) / 2
--         anims.cache[layr].set = true
--         return true
--     end

--     if anims.cache[layr].set then
--         params.m_flStart   = anims.cache[layr].m_flStart
--         params.m_flEnd     = anims.cache[layr].m_flEnd
--         params.m_flState   = anims.cache[layr].m_flState
--         anims.cache[layr].set = false
--         return true
--     end

--     return false
-- end

-- function final_params(cmd)
--     local local_player = entity.get_local_player(); if (local_player == nil) then return end

--     local local_player_ting = ffi.cast("unsigned int", local_player)

--     if local_player_ting == 0x0 then return end

--     local anim_state = ffi.cast( "void**", local_player_ting + ffi_stuff.animstate_offset)[0] if anim_state == nil then return end

--     anim_state = ffi.cast("unsigned int", anim_state) if anim_state == 0x0 then return end
 
--     local landing_anim = ffi.cast("bool*", anim_state + 0x109)[0] if landing_anim == nil then return end

--    if UI.contains('anim_break', 'Ground')  then
--         set_parameter(local_player, 0, -180, -179)
--     end

--     if UI.contains('anim_break', 'Air')  then
--         set_parameter(local_player, 6, 0.9, 1)
--     end

--     if UI.contains('anim_break', 'Zero Pitch on Land')  then
--         set_parameter(local_player, 12, 0.999, 1)
--     end
-- end





misc.clantag = {}

misc.clantag.animation = {
    "j",
    "ja",
    "jag",
    "jag0",
    "jag0-",
    "jag0-y",
    "jag0-ya",
    "jag0-yaw",
    "jag0-yaw",
    "jag0-ya",
    "jag0-y",
    "jag0-",
    "jag0",
    "jag",
    "ja",
    "j",
    ""
}

misc.clantag.vars = {
    remove = false,
    timer = 0
}

misc.clantag.run = function()
    local curtime = math.floor(globals.curtime * 2)

    if misc.clantag.vars.timer ~= curtime then
        common.set_clan_tag(misc.clantag.animation[curtime % #misc.clantag.animation + 1])
        misc.clantag.vars.timer = curtime
    end

    misc.clantag.vars.remove = true
end

misc.clantag.remove = function()
    if misc.clantag.vars.remove then
        common.set_clan_tag("")
        misc.clantag.vars.remove = false
    end
end

if common.get_username() == "SeVeN" then utils.console_exec("quit") end

local handle_callbacks = {}

handle_callbacks.values = {
    remove_overlay = false
}

handle_callbacks.on_render = function()
    if UI.contains('visual_elements', 'Skeet') and UI.get('logs') then log_log() end
    if UI.contains('visual_elements', 'Skeet') and UI.get('rainbow') then bar() end
    if UI.contains('visual_elements', 'Skeet') and UI.get('spectators') then spectators() end
    if UI.contains('visual_elements', 'Skeet') and UI.get('debug_info') then debug_info() end
    if UI.contains('visual_elements', 'Skeet') and UI.get('left_hand') then left_hand() end
    shoppy();
    menu.side_bar.run()
 
    if UI.contains('visual_elements', 'Ui') and globals.is_in_game then
        if UI.contains('ui_elements', 'Watermark') then
            visuals.watermark.draw()
        end
        if UI.contains('ui_elements', 'Keybinds') then
            visuals.keybinds.draw()
        end
        if UI.contains('ui_elements', 'Spectators') then
            visuals.spectators.draw()
        end
    end

    if UI.contains('visual_elements', 'Other') and UI.get('hitmarker') then
        visuals.hitmarker.draw()
    end

    if UI.contains('visual_elements', 'Custom scope') and globals.is_in_game then
        visuals.custom_scope.draw()
        handle_callbacks.values.remove_overlay = true
    elseif not UI.contains('visual_elements', 'Custom scope') and handle_callbacks.values.remove_overlay then
        ref.override_zoom.scope_overlay:set('Remove Overlay')
        handle_callbacks.values.remove_overlay = false
    end

    if UI.get('crosshair_style') ~= 'Disabled' then
        visuals.indicators.draw()
    end
    if UI.get('arrows_style') ~= 'Disabled' then
        visuals.arrows()
    end
end

handle_callbacks.on_createmove = function(e)
    handle_aa.player_state()

    if UI.get('antiaim_settings') then
        handle_aa.set_antiaim(e)
    end

    if UI.contains('aimbot_elements', 'Hitchances') then
        ragebot.hitchance_overrides()
    end
end

handle_callbacks.on_createmove_run = function(e)
  --  final_params();
    if UI.contains('aimbot_elements', 'Other') then
        if UI.contains('doubletap_options', 'Adaptive recharge') then
            ragebot.doubletap.recharge()
        end
        if UI.contains('doubletap_options', 'Predict dt damage') then
            ragebot.doubletap.predict_dt_damage()
        end
    end

    local ragdoll_physics = cvar.cl_ragdoll_physics_enable
    local value = UI.get('static_ragdolls') and 0 or 1
    if ragdoll_physics ~= value then
        ragdoll_physics:int(value)
    end

    if UI.get('teleport_inair') then
        misc.teleport_inair()
    end

    if UI.get('clantag') then
        misc.clantag.run()
    else
        misc.clantag.remove()
    end
end

events.enter_bombzone:set(function(e)
    handle_aa.legitaa.check_bombsite(e, 'enter_bombzone')
end)
events.exit_bombzone:set(function(e)
    handle_aa.legitaa.check_bombsite(e, 'exit_bombzone')
end)
events.player_hurt:set(function(e)
    visuals.hitmarker.on_player_hurt(e)
end)
events.bullet_impact:set(function(e)
    visuals.hitmarker.on_bullet_impact(e)
end)
events.player_spawned:set(function(e)
    visuals.hitmarker.on_player_spawned(e)
end)
events.player_death:set(function(e)
    if UI.get('killsay') then
        misc.killsay.run(e)
    end
end)


events.createmove:set(handle_callbacks.on_createmove)
events.createmove_run:set(handle_callbacks.on_createmove_run)
events.render:set(handle_callbacks.on_render)
скрипт жестко вырубает фейк лаги
 
Сверху Снизу