{
    "name": "Adolfjon Lua API",
    "version": "1.0",
    "lua": "5.4",
    "docs": "https://dev.adolfjon.uz/docs/lua",
    "callbacks": [
        {
            "signature": "on_frame()",
            "description": "Every overlay frame. The only place drawing works."
        },
        {
            "signature": "on_tick()",
            "description": "64 times a second, at most 4 times per frame. Good for logic that should not depend on FPS."
        },
        {
            "signature": "on_menu()",
            "description": "Every frame while the script's tab is open. `menu.*` widgets work only here."
        },
        {
            "signature": "on_unload()",
            "description": "Right before the script is turned off, reloaded or deleted."
        },
        {
            "signature": "on_notepad_save(id, text)",
            "description": "The user pressed Save in a notepad this script opened."
        },
        {
            "signature": "on_kill(e)",
            "description": "You killed someone."
        },
        {
            "signature": "on_death(e)",
            "description": "You died."
        },
        {
            "signature": "on_round_start()",
            "description": "A new round began."
        },
        {
            "signature": "on_round_end(e)",
            "description": "The round ended."
        }
    ],
    "events": {
        "kill": {
            "description": "You got a kill. Also calls `on_kill(e)`.",
            "fields": [
                {
                    "name": "victim",
                    "type": "string",
                    "description": "Name of the player you killed, or empty when not seen."
                },
                {
                    "name": "weapon",
                    "type": "string",
                    "description": "Your weapon: `AK`, `AWP`, `M4A1S`, `DEAGLE`, `KNIFE`, `HE`, …"
                },
                {
                    "name": "headshot",
                    "type": "boolean",
                    "description": ""
                },
                {
                    "name": "knife",
                    "type": "boolean",
                    "description": "A knife kill."
                },
                {
                    "name": "round_kills",
                    "type": "integer",
                    "description": "Your kills this round, this one included."
                }
            ]
        },
        "death": {
            "description": "You died. Also calls `on_death(e)`. The table is empty.",
            "fields": []
        },
        "round_start": {
            "description": "A round began. Also calls `on_round_start()` (no argument). The table is empty.",
            "fields": []
        },
        "round_end": {
            "description": "A round ended. Also calls `on_round_end(e)`.",
            "fields": [
                {
                    "name": "won",
                    "type": "boolean",
                    "description": "Your team won."
                },
                {
                    "name": "winner",
                    "type": "integer",
                    "description": "2 = T won, 3 = CT won, other values for a draw."
                }
            ]
        },
        "player_hurt": {
            "description": "Any player lost health since the last frame.",
            "fields": [
                {
                    "name": "slot",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                },
                {
                    "name": "damage",
                    "type": "integer",
                    "description": "Health lost."
                },
                {
                    "name": "health",
                    "type": "integer",
                    "description": "Health left."
                },
                {
                    "name": "enemy",
                    "type": "boolean",
                    "description": ""
                },
                {
                    "name": "is_local",
                    "type": "boolean",
                    "description": "It was you."
                }
            ]
        },
        "player_death": {
            "description": "A player's health reached 0. Same fields as player_hurt.",
            "fields": [
                {
                    "name": "slot",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                },
                {
                    "name": "damage",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "health",
                    "type": "integer",
                    "description": "Always 0."
                },
                {
                    "name": "enemy",
                    "type": "boolean",
                    "description": ""
                },
                {
                    "name": "is_local",
                    "type": "boolean",
                    "description": ""
                }
            ]
        },
        "bomb_planted": {
            "description": "The bomb was planted.",
            "fields": [
                {
                    "name": "site",
                    "type": "string",
                    "description": "`A`, `B` or empty."
                }
            ]
        },
        "bomb_defused": {
            "description": "The bomb was defused. The table is empty.",
            "fields": []
        },
        "bomb_exploded": {
            "description": "The bomb exploded. The table is empty.",
            "fields": []
        },
        "spectator_join": {
            "description": "Someone started watching you.",
            "fields": [
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                }
            ]
        },
        "spectator_leave": {
            "description": "Someone stopped watching you.",
            "fields": [
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                }
            ]
        },
        "shot_fired": {
            "description": "Any player fired.",
            "fields": [
                {
                    "name": "slot",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                },
                {
                    "name": "enemy",
                    "type": "boolean",
                    "description": ""
                },
                {
                    "name": "is_local",
                    "type": "boolean",
                    "description": ""
                },
                {
                    "name": "shots",
                    "type": "integer",
                    "description": "Shots in the current spray."
                },
                {
                    "name": "weapon",
                    "type": "string",
                    "description": ""
                }
            ]
        },
        "flashed": {
            "description": "A player got flashed.",
            "fields": [
                {
                    "name": "slot",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                },
                {
                    "name": "enemy",
                    "type": "boolean",
                    "description": ""
                },
                {
                    "name": "is_local",
                    "type": "boolean",
                    "description": ""
                },
                {
                    "name": "duration",
                    "type": "number",
                    "description": "Seconds."
                }
            ]
        },
        "spotted": {
            "description": "A player became spotted by you.",
            "fields": [
                {
                    "name": "slot",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                },
                {
                    "name": "enemy",
                    "type": "boolean",
                    "description": ""
                }
            ]
        },
        "unspotted": {
            "description": "A player is no longer spotted by you.",
            "fields": [
                {
                    "name": "slot",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                },
                {
                    "name": "enemy",
                    "type": "boolean",
                    "description": ""
                }
            ]
        },
        "bomb_defusing": {
            "description": "Someone started defusing.",
            "fields": [
                {
                    "name": "slot",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                },
                {
                    "name": "enemy",
                    "type": "boolean",
                    "description": ""
                }
            ]
        },
        "purchase": {
            "description": "A player spent money.",
            "fields": [
                {
                    "name": "slot",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                },
                {
                    "name": "enemy",
                    "type": "boolean",
                    "description": ""
                },
                {
                    "name": "is_local",
                    "type": "boolean",
                    "description": ""
                },
                {
                    "name": "spent",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "money",
                    "type": "integer",
                    "description": "Money left."
                }
            ]
        },
        "sound": {
            "description": "A game sound was heard (needs Sound ESP on).",
            "fields": [
                {
                    "name": "type",
                    "type": "string",
                    "description": "`footstep`, `shot`, `jump`, `reload`, `scope`, `land`."
                },
                {
                    "name": "slot",
                    "type": "integer",
                    "description": "-1 when unknown."
                },
                {
                    "name": "enemy",
                    "type": "boolean",
                    "description": ""
                },
                {
                    "name": "pos",
                    "type": "vector",
                    "description": ""
                }
            ]
        },
        "footstep": {
            "description": "Only footsteps from `sound`. Same fields.",
            "fields": [
                {
                    "name": "slot",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "enemy",
                    "type": "boolean",
                    "description": ""
                },
                {
                    "name": "pos",
                    "type": "vector",
                    "description": ""
                }
            ]
        },
        "weapon_switch": {
            "description": "You changed weapons.",
            "fields": [
                {
                    "name": "from",
                    "type": "string",
                    "description": ""
                },
                {
                    "name": "to",
                    "type": "string",
                    "description": ""
                }
            ]
        },
        "jump": {
            "description": "You left the ground.",
            "fields": [
                {
                    "name": "speed",
                    "type": "number",
                    "description": "Upward speed."
                }
            ]
        },
        "land": {
            "description": "You landed.",
            "fields": [
                {
                    "name": "speed",
                    "type": "number",
                    "description": "Fall speed."
                }
            ]
        },
        "scope": {
            "description": "You scoped in.",
            "fields": [
                {
                    "name": "weapon",
                    "type": "string",
                    "description": ""
                }
            ]
        },
        "unscope": {
            "description": "You scoped out.",
            "fields": [
                {
                    "name": "weapon",
                    "type": "string",
                    "description": ""
                }
            ]
        },
        "reload": {
            "description": "You started reloading.",
            "fields": [
                {
                    "name": "weapon",
                    "type": "string",
                    "description": ""
                }
            ]
        },
        "reload_end": {
            "description": "Your reload finished or was cancelled.",
            "fields": [
                {
                    "name": "weapon",
                    "type": "string",
                    "description": ""
                }
            ]
        },
        "zone_enter": {
            "description": "You walked into one of this script's `world.zone`s. Only that script gets it.",
            "fields": [
                {
                    "name": "id",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                }
            ]
        },
        "zone_leave": {
            "description": "You walked out of one of this script's zones.",
            "fields": [
                {
                    "name": "id",
                    "type": "integer",
                    "description": ""
                },
                {
                    "name": "name",
                    "type": "string",
                    "description": ""
                }
            ]
        }
    },
    "permissions": {
        "settings": {
            "title": "Change settings",
            "description": "Lets the script change the real program settings: config.set, aim.enabled(on), trigger.enabled(on), players.flag(id, flag) and players.color(id, c)."
        },
        "chat": {
            "title": "Write in chat",
            "description": "Lets the script send chat messages with chat.say and chat.team."
        },
        "network": {
            "title": "Use the internet",
            "description": "Lets the script call http.get. Only https://adolfjon.uz/ addresses are allowed."
        }
    },
    "limits": [
        {
            "what": "Time per callback",
            "limit": "8 ms or 1 000 000 Lua instructions, whichever comes first. Then the script stops with an error."
        },
        {
            "what": "Memory",
            "limit": "64 MB per script."
        },
        {
            "what": "config.set",
            "limit": "64 changes per frame across all scripts. Only existing keys, same type and shape. misc.menuToggleKey and misc.obsBypass are locked."
        },
        {
            "what": "files",
            "limit": "Only the script's own data/<script>/ folder. Names use A-Z a-z 0-9 _ . - (up to 64 characters). 1 MB per file, 64 files."
        },
        {
            "what": "db",
            "limit": "256 KB per script."
        },
        {
            "what": "http.get",
            "limit": "https://adolfjon.uz/ only. 4 requests at a time per script (shared with vpk.read). Replies are cut at about 512 KB."
        },
        {
            "what": "vpk.read",
            "limit": "16 MB per entry. Shares the 4-at-a-time limit with http.get."
        },
        {
            "what": "Images",
            "limit": "16 per script. PNG or JPG, up to 2048 x 2048 and 8 MB."
        },
        {
            "what": "Fonts",
            "limit": "8 in total across all scripts, 6 to 96 px."
        },
        {
            "what": "chat",
            "limit": "One message every 3.5 seconds across all scripts, up to 120 bytes."
        },
        {
            "what": "esp.add_text",
            "limit": "4 lines per player per frame, 64 characters each."
        },
        {
            "what": "notify.push",
            "limit": "64 characters."
        },
        {
            "what": "menu.input",
            "limit": "255 bytes."
        },
        {
            "what": "Polygons",
            "limit": "128 points."
        }
    ],
    "namespaces": {
        "color": {
            "title": "color",
            "group": "Core",
            "summary": "Make and change colours. Every colour in the API is one packed integer.",
            "url": "https://dev.adolfjon.uz/docs/lua/color",
            "functions": [
                {
                    "name": "color",
                    "signature": "color(r, g, b[, a])",
                    "description": "Packs four channels into one colour. Values outside 0 to 255 are clamped.",
                    "args": [
                        {
                            "name": "r",
                            "type": "integer",
                            "description": "Red, 0 to 255.",
                            "optional": false
                        },
                        {
                            "name": "g",
                            "type": "integer",
                            "description": "Green, 0 to 255.",
                            "optional": false
                        },
                        {
                            "name": "b",
                            "type": "integer",
                            "description": "Blue, 0 to 255.",
                            "optional": false
                        },
                        {
                            "name": "a",
                            "type": "integer",
                            "description": "Alpha, 0 to 255. Default 255 (solid).",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "The packed colour."
                        }
                    ],
                    "example": "local red = color(255, 70, 70)\nlocal glass = color(12, 14, 18, 200)"
                },
                {
                    "name": "color.rgba",
                    "signature": "color.rgba(r, g, b[, a])",
                    "description": "Same as `color(r, g, b, a)`.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "The packed colour."
                        }
                    ]
                },
                {
                    "name": "color.unpack",
                    "signature": "color.unpack(c)",
                    "description": "Splits a colour back into its channels.",
                    "args": [
                        {
                            "name": "c",
                            "type": "integer",
                            "description": "A packed colour.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "r"
                        },
                        {
                            "type": "integer",
                            "description": "g"
                        },
                        {
                            "type": "integer",
                            "description": "b"
                        },
                        {
                            "type": "integer",
                            "description": "a"
                        }
                    ],
                    "example": "local r, g, b, a = color.unpack(ui.get(\"col\"))"
                },
                {
                    "name": "color.alpha",
                    "signature": "color.alpha(c, a)",
                    "description": "Returns the same colour with a new alpha. The best way to fade something in or out.",
                    "args": [
                        {
                            "name": "c",
                            "type": "integer",
                            "description": "A packed colour.",
                            "optional": false
                        },
                        {
                            "name": "a",
                            "type": "number",
                            "description": "New alpha, 0 to 255. Decimals are rounded down.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "The new colour."
                        }
                    ],
                    "example": "draw.text(20, 20, \"Hi\", color.alpha(white, 255 * fade))"
                },
                {
                    "name": "color.lerp",
                    "signature": "color.lerp(a, b, t)",
                    "description": "Mixes two colours. t = 0 gives a, t = 1 gives b. Keep t between 0 and 1.",
                    "args": [
                        {
                            "name": "a",
                            "type": "integer",
                            "description": "Start colour.",
                            "optional": false
                        },
                        {
                            "name": "b",
                            "type": "integer",
                            "description": "End colour.",
                            "optional": false
                        },
                        {
                            "name": "t",
                            "type": "number",
                            "description": "Mix amount, 0 to 1.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "The mixed colour."
                        }
                    ],
                    "example": "local hp_col = color.lerp(color(255, 60, 60), color(80, 230, 120), p.health / 100)"
                },
                {
                    "name": "color.hsv",
                    "signature": "color.hsv(h, s, v[, a])",
                    "description": "Makes a colour from hue, saturation and value. Handy for rainbow effects.",
                    "args": [
                        {
                            "name": "h",
                            "type": "number",
                            "description": "Hue in degrees, any value (wraps at 360).",
                            "optional": false
                        },
                        {
                            "name": "s",
                            "type": "number",
                            "description": "Saturation, 0 to 1.",
                            "optional": false
                        },
                        {
                            "name": "v",
                            "type": "number",
                            "description": "Brightness, 0 to 1.",
                            "optional": false
                        },
                        {
                            "name": "a",
                            "type": "integer",
                            "description": "Alpha, 0 to 255. Default 255.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "The packed colour."
                        }
                    ],
                    "example": "local rainbow = color.hsv(globals.time() * 90, 0.7, 1)"
                }
            ],
            "tables": []
        },
        "util": {
            "title": "util and print",
            "group": "Core",
            "summary": "Console output, the clock and random numbers.",
            "url": "https://dev.adolfjon.uz/docs/lua/util",
            "functions": [
                {
                    "name": "print",
                    "signature": "print(...)",
                    "description": "Writes all arguments to the console, separated by two spaces. Tables print as their address; use `json.encode` to see what is inside.",
                    "args": [
                        {
                            "name": "...",
                            "type": "any",
                            "description": "Values to print.",
                            "optional": false
                        }
                    ],
                    "example": "print(\"hp\", p.health, p.name)\nprint(json.encode(bomb.state()))"
                },
                {
                    "name": "util.print",
                    "signature": "util.print(...)",
                    "description": "Same as `print`."
                },
                {
                    "name": "util.time",
                    "signature": "util.time()",
                    "description": "Seconds since the program started, with decimals. Use it for timers and animation.",
                    "returns": [
                        {
                            "type": "number",
                            "description": "Seconds."
                        }
                    ],
                    "example": "local started = util.time()\nif util.time() - started > 3 then hide() end"
                },
                {
                    "name": "util.random",
                    "signature": "util.random(a, b)",
                    "description": "A random whole number from a to b, both included. The order does not matter.",
                    "args": [
                        {
                            "name": "a",
                            "type": "integer",
                            "description": "Lowest value.",
                            "optional": false
                        },
                        {
                            "name": "b",
                            "type": "integer",
                            "description": "Highest value.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "The random number."
                        }
                    ],
                    "example": "local roll = util.random(1, 6)"
                }
            ],
            "tables": []
        },
        "input": {
            "title": "input",
            "group": "Core",
            "summary": "Keyboard and mouse state, read once a frame.",
            "url": "https://dev.adolfjon.uz/docs/lua/input",
            "functions": [
                {
                    "name": "input.key_down",
                    "signature": "input.key_down(vk)",
                    "description": "True while the key is held.",
                    "args": [
                        {
                            "name": "vk",
                            "type": "integer",
                            "description": "Virtual-key code, 1 to 255.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "true while held."
                        }
                    ],
                    "example": "if input.key_down(0x10) then speed = speed * 2 end"
                },
                {
                    "name": "input.key_pressed",
                    "signature": "input.key_pressed(vk)",
                    "description": "True only on the frame the key went down. Use it for toggles.",
                    "args": [
                        {
                            "name": "vk",
                            "type": "integer",
                            "description": "Virtual-key code, 1 to 255.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "true on the first frame of a press."
                        }
                    ],
                    "example": "if input.key_pressed(ui.get(\"toggle\")) then shown = not shown end"
                },
                {
                    "name": "input.mouse",
                    "signature": "input.mouse()",
                    "description": "The Windows cursor position in screen pixels.",
                    "returns": [
                        {
                            "type": "number",
                            "description": "x"
                        },
                        {
                            "type": "number",
                            "description": "y"
                        }
                    ],
                    "notes": [
                        "In-game the cursor is locked to the centre; this is most useful while the menu is open."
                    ]
                },
                {
                    "name": "input.mouse_down",
                    "signature": "input.mouse_down([button])",
                    "description": "True while a mouse button is held.",
                    "args": [
                        {
                            "name": "button",
                            "type": "integer",
                            "description": "1 left (default), 2 right, 3 middle.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "true while held."
                        }
                    ]
                }
            ],
            "tables": []
        },
        "game": {
            "title": "game",
            "group": "Game state",
            "summary": "The match and a quick list of players.",
            "url": "https://dev.adolfjon.uz/docs/lua/game",
            "functions": [
                {
                    "name": "game.local_player",
                    "signature": "game.local_player()",
                    "description": "You, as a player table. nil when you are dead or not in a match.",
                    "returns": [
                        {
                            "type": "player | nil",
                            "description": "See the player table below."
                        }
                    ],
                    "example": "local me = game.local_player()\nif me then print(me.health, me.weapon) end"
                },
                {
                    "name": "game.players",
                    "signature": "game.players()",
                    "description": "All living players, you included.",
                    "returns": [
                        {
                            "type": "player[]",
                            "description": "An array of player tables."
                        }
                    ],
                    "example": "for _, p in ipairs(game.players()) do\n    if p.enemy then print(p.name, p.health) end\nend"
                },
                {
                    "name": "game.map",
                    "signature": "game.map()",
                    "description": "The map name, for example `de_mirage`. Empty until it is known.",
                    "returns": [
                        {
                            "type": "string",
                            "description": "Map name."
                        }
                    ]
                },
                {
                    "name": "game.mode",
                    "signature": "game.mode()",
                    "description": "The game mode: `Competitive`, `Premier`, `Casual`, `Wingman`, `Deathmatch`, `Arms Race`, or `Community - …` on community servers. Empty until known.",
                    "returns": [
                        {
                            "type": "string",
                            "description": "Mode name."
                        }
                    ]
                },
                {
                    "name": "game.in_match",
                    "signature": "game.in_match()",
                    "description": "True while you are in a match (not in the main menu or loading).",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "game.time",
                    "signature": "game.time()",
                    "description": "Seconds since the current round started. 0 until the first round start is seen.",
                    "returns": [
                        {
                            "type": "number",
                            "description": "Seconds."
                        }
                    ]
                },
                {
                    "name": "game.round",
                    "signature": "game.round()",
                    "description": "The current round number, starting at 1.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Round."
                        }
                    ]
                }
            ],
            "tables": [
                {
                    "title": "Player table",
                    "fields": [
                        {
                            "name": "slot",
                            "type": "integer",
                            "description": "Player slot. Use it with `entity.get` and `esp.add_text`."
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "description": "Nickname."
                        },
                        {
                            "name": "team",
                            "type": "integer",
                            "description": "2 = T, 3 = CT."
                        },
                        {
                            "name": "health",
                            "type": "integer",
                            "description": "1 to 100."
                        },
                        {
                            "name": "alive",
                            "type": "boolean",
                            "description": "Always true in these lists (only living players are listed)."
                        },
                        {
                            "name": "enemy",
                            "type": "boolean",
                            "description": "On the other team. With Deathmatch mode on in Misc, everyone but you."
                        },
                        {
                            "name": "is_local",
                            "type": "boolean",
                            "description": "This is you."
                        },
                        {
                            "name": "weapon",
                            "type": "string",
                            "description": "Held weapon without the prefix: `ak47`, `awp`, `knife`, `hegrenade`. `NULL` when nothing is held."
                        },
                        {
                            "name": "pos",
                            "type": "vector",
                            "description": "Feet position in game units."
                        },
                        {
                            "name": "head",
                            "type": "vector",
                            "description": "About head height (pos + 64 units). `entity.*` gives the real head bone."
                        },
                        {
                            "name": "armor",
                            "type": "integer",
                            "description": "Armour, 0 to 100. 0 until the scoreboard data arrives."
                        },
                        {
                            "name": "money",
                            "type": "integer",
                            "description": "Money. 0 until the scoreboard data arrives."
                        },
                        {
                            "name": "steamid",
                            "type": "string",
                            "description": "SteamID64 as text. Empty until known; bots show `0`."
                        }
                    ]
                }
            ]
        },
        "entity": {
            "title": "entity",
            "group": "Game state",
            "summary": "Detailed, read-only data about players, grenades, the bomb, dropped weapons and hostages.",
            "url": "https://dev.adolfjon.uz/docs/lua/entity",
            "functions": [
                {
                    "name": "entity.players",
                    "signature": "entity.players()",
                    "description": "All living players with full detail.",
                    "returns": [
                        {
                            "type": "player[]",
                            "description": "Player tables with the extra fields below."
                        }
                    ]
                },
                {
                    "name": "entity.get",
                    "signature": "entity.get(slot)",
                    "description": "One player by slot, or nil.",
                    "args": [
                        {
                            "name": "slot",
                            "type": "integer",
                            "description": "Player slot.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "player | nil",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "entity.local_player",
                    "signature": "entity.local_player()",
                    "description": "You with full detail, plus `view_angles`. nil when dead.",
                    "returns": [
                        {
                            "type": "player | nil",
                            "description": ""
                        }
                    ],
                    "example": "local me = entity.local_player()\nif me and me.velocity then\n    print(math.floor(vec.length(me.velocity)))\nend"
                },
                {
                    "name": "entity.grenades",
                    "signature": "entity.grenades()",
                    "description": "Grenades in the world and fires on the ground. Same as `nade.list()`.",
                    "returns": [
                        {
                            "type": "grenade[]",
                            "description": "See [nade](/docs/lua/nade)."
                        }
                    ]
                },
                {
                    "name": "entity.c4",
                    "signature": "entity.c4()",
                    "description": "The bomb. Same as `bomb.state()`.",
                    "returns": [
                        {
                            "type": "bomb",
                            "description": "See [bomb](/docs/lua/bomb)."
                        }
                    ]
                },
                {
                    "name": "entity.weapons",
                    "signature": "entity.weapons()",
                    "description": "Weapons and items lying on the ground.",
                    "returns": [
                        {
                            "type": "table[]",
                            "description": "`name` (string) and `pos` (vector) each."
                        }
                    ]
                },
                {
                    "name": "entity.hostages",
                    "signature": "entity.hostages()",
                    "description": "Hostages on hostage maps.",
                    "returns": [
                        {
                            "type": "table[]",
                            "description": "`pos`, `health`, `alive`, `state` (text), `distance` (from you)."
                        }
                    ]
                }
            ],
            "tables": [
                {
                    "title": "Extra player fields",
                    "fields": [
                        {
                            "name": "scoped",
                            "type": "boolean",
                            "description": "Looking through a scope."
                        },
                        {
                            "name": "defusing",
                            "type": "boolean",
                            "description": "Defusing the bomb."
                        },
                        {
                            "name": "shots_fired",
                            "type": "integer",
                            "description": "Shots in the current spray."
                        },
                        {
                            "name": "flash",
                            "type": "number",
                            "description": "Length of the last flash in seconds. Above 0 means they were flashed."
                        },
                        {
                            "name": "velocity",
                            "type": "vector",
                            "description": "Speed in units per second on each axis."
                        },
                        {
                            "name": "on_ground",
                            "type": "boolean",
                            "description": "Standing on the ground."
                        },
                        {
                            "name": "eye_angles",
                            "type": "table",
                            "description": "`pitch` and `yaw` in degrees."
                        },
                        {
                            "name": "visible",
                            "type": "boolean",
                            "description": "Spotted by you (the game's own spotted flag)."
                        },
                        {
                            "name": "bones",
                            "type": "table",
                            "description": "Vectors: head, neck, chest, pelvis, shoulder_l, shoulder_r, elbow_l, elbow_r, hand_l, hand_r, hip_l, hip_r, knee_l, knee_r, ankle_l, ankle_r. `head` is also set to the real head bone."
                        },
                        {
                            "name": "view_angles",
                            "type": "table",
                            "description": "Only on `entity.local_player()`: your camera `pitch` and `yaw`."
                        },
                        {
                            "name": "place",
                            "type": "string",
                            "description": "Callout of the spot they stand in, for example `BombsiteA`."
                        },
                        {
                            "name": "in_buy_zone",
                            "type": "boolean",
                            "description": "Standing in a buy zone."
                        },
                        {
                            "name": "walking",
                            "type": "boolean",
                            "description": "Holding the walk key."
                        },
                        {
                            "name": "ping",
                            "type": "integer",
                            "description": "Latency in ms."
                        },
                        {
                            "name": "score",
                            "type": "integer",
                            "description": "Scoreboard score."
                        },
                        {
                            "name": "mvps",
                            "type": "integer",
                            "description": "MVP stars."
                        },
                        {
                            "name": "has_defuser",
                            "type": "boolean",
                            "description": "Carries a defuse kit."
                        },
                        {
                            "name": "has_helmet",
                            "type": "boolean",
                            "description": "Wears a helmet."
                        },
                        {
                            "name": "clan",
                            "type": "string",
                            "description": "Clan tag."
                        }
                    ]
                }
            ]
        },
        "globals": {
            "title": "globals",
            "group": "Game state",
            "summary": "Time, frame, round, screen and score in one place.",
            "url": "https://dev.adolfjon.uz/docs/lua/globals",
            "functions": [
                {
                    "name": "globals.time",
                    "signature": "globals.time()",
                    "description": "Seconds since the program started. Same as `util.time()`.",
                    "returns": [
                        {
                            "type": "number",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "globals.frametime",
                    "signature": "globals.frametime()",
                    "description": "Seconds the last frame took. Multiply speeds by it so animation is the same at any FPS.",
                    "returns": [
                        {
                            "type": "number",
                            "description": ""
                        }
                    ],
                    "example": "x = x + 120 * globals.frametime()"
                },
                {
                    "name": "globals.frame",
                    "signature": "globals.frame()",
                    "description": "A frame counter that goes up by one every frame.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "globals.map",
                    "signature": "globals.map()",
                    "description": "Map name. Same as `game.map()`.",
                    "returns": [
                        {
                            "type": "string",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "globals.round",
                    "signature": "globals.round()",
                    "description": "Round number. Same as `game.round()`.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "globals.round_time",
                    "signature": "globals.round_time()",
                    "description": "Seconds since the round started. Same as `game.time()`.",
                    "returns": [
                        {
                            "type": "number",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "globals.in_match",
                    "signature": "globals.in_match()",
                    "description": "True in a match.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "globals.menu_open",
                    "signature": "globals.menu_open()",
                    "description": "True while the Adolfjon menu is open.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "globals.screen",
                    "signature": "globals.screen()",
                    "description": "Screen size in pixels. Same as `draw.screen()`.",
                    "returns": [
                        {
                            "type": "number",
                            "description": "width"
                        },
                        {
                            "type": "number",
                            "description": "height"
                        }
                    ]
                },
                {
                    "name": "globals.score",
                    "signature": "globals.score()",
                    "description": "Team scores. -1 until known. The first call starts reading; values arrive within a second and refresh twice a second while you keep asking.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "T score"
                        },
                        {
                            "type": "integer",
                            "description": "CT score"
                        }
                    ],
                    "example": "local t, ct = globals.score()\nif t >= 0 then draw.text(20, 20, t .. \" : \" .. ct, white) end"
                }
            ],
            "tables": []
        },
        "server": {
            "title": "server",
            "group": "Game state",
            "summary": "Where you are playing.",
            "url": "https://dev.adolfjon.uz/docs/lua/server",
            "functions": [
                {
                    "name": "server.address",
                    "signature": "server.address()",
                    "description": "The server address as text, or empty.",
                    "returns": [
                        {
                            "type": "string",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "server.kind",
                    "signature": "server.kind()",
                    "description": "What kind of server: 0 none, 1 local (offline or listen server), 2 direct IP, 3 Valve relay (matchmaking).",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "0 to 3."
                        }
                    ]
                },
                {
                    "name": "server.mode",
                    "signature": "server.mode()",
                    "description": "Game mode text. Same as `game.mode()`.",
                    "returns": [
                        {
                            "type": "string",
                            "description": ""
                        }
                    ]
                }
            ],
            "tables": []
        },
        "draw": {
            "title": "draw",
            "group": "Drawing",
            "summary": "Draw on the overlay: shapes, text, 3D lines, images and fonts.",
            "url": "https://dev.adolfjon.uz/docs/lua/draw",
            "functions": [
                {
                    "name": "draw.screen",
                    "signature": "draw.screen()",
                    "description": "Screen size in pixels.",
                    "returns": [
                        {
                            "type": "number",
                            "description": "width"
                        },
                        {
                            "type": "number",
                            "description": "height"
                        }
                    ],
                    "example": "local w, h = draw.screen()\ndraw.text(w / 2, h / 2, \"centre\", white)"
                },
                {
                    "name": "draw.line",
                    "signature": "draw.line(x1, y1, x2, y2, col[, thickness])",
                    "description": "A straight line.",
                    "args": [
                        {
                            "name": "x1, y1",
                            "type": "number",
                            "description": "Start.",
                            "optional": false
                        },
                        {
                            "name": "x2, y2",
                            "type": "number",
                            "description": "End.",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "Colour.",
                            "optional": false
                        },
                        {
                            "name": "thickness",
                            "type": "number",
                            "description": "Default 1.",
                            "optional": true
                        }
                    ]
                },
                {
                    "name": "draw.rect",
                    "signature": "draw.rect(x, y, w, h, col[, rounding][, thickness])",
                    "description": "A rectangle outline.",
                    "args": [
                        {
                            "name": "x, y",
                            "type": "number",
                            "description": "Top-left corner.",
                            "optional": false
                        },
                        {
                            "name": "w, h",
                            "type": "number",
                            "description": "Size.",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "rounding",
                            "type": "number",
                            "description": "Corner radius. Default 0.",
                            "optional": true
                        },
                        {
                            "name": "thickness",
                            "type": "number",
                            "description": "Default 1.",
                            "optional": true
                        }
                    ]
                },
                {
                    "name": "draw.rect_filled",
                    "signature": "draw.rect_filled(x, y, w, h, col[, rounding])",
                    "description": "A filled rectangle.",
                    "args": [
                        {
                            "name": "x, y",
                            "type": "number",
                            "description": "Top-left corner.",
                            "optional": false
                        },
                        {
                            "name": "w, h",
                            "type": "number",
                            "description": "Size.",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "rounding",
                            "type": "number",
                            "description": "Corner radius. Default 0.",
                            "optional": true
                        }
                    ],
                    "example": "draw.rect_filled(20, 20, 180, 60, color(12, 14, 18, 210), 8)"
                },
                {
                    "name": "draw.circle",
                    "signature": "draw.circle(x, y, radius, col[, thickness])",
                    "description": "A circle outline.",
                    "args": [
                        {
                            "name": "x, y",
                            "type": "number",
                            "description": "Centre.",
                            "optional": false
                        },
                        {
                            "name": "radius",
                            "type": "number",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "thickness",
                            "type": "number",
                            "description": "Default 1.",
                            "optional": true
                        }
                    ]
                },
                {
                    "name": "draw.circle_filled",
                    "signature": "draw.circle_filled(x, y, radius, col)",
                    "description": "A filled circle.",
                    "args": [
                        {
                            "name": "x, y",
                            "type": "number",
                            "description": "Centre.",
                            "optional": false
                        },
                        {
                            "name": "radius",
                            "type": "number",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "",
                            "optional": false
                        }
                    ]
                },
                {
                    "name": "draw.text",
                    "signature": "draw.text(x, y, text, col[, size])",
                    "description": "Text in the menu font. (x, y) is the top-left corner of the text.",
                    "args": [
                        {
                            "name": "x, y",
                            "type": "number",
                            "description": "Top-left.",
                            "optional": false
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "size",
                            "type": "number",
                            "description": "Pixel size. Default 14.",
                            "optional": true
                        }
                    ]
                },
                {
                    "name": "draw.text_size",
                    "signature": "draw.text_size(text[, size])",
                    "description": "How big the text will be. Use it to centre or right-align.",
                    "args": [
                        {
                            "name": "text",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "size",
                            "type": "number",
                            "description": "Default 14.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "number",
                            "description": "width"
                        },
                        {
                            "type": "number",
                            "description": "height"
                        }
                    ],
                    "example": "local tw, th = draw.text_size(label, 16)\ndraw.text(x - tw / 2, y, label, white, 16)"
                },
                {
                    "name": "draw.text_outline",
                    "signature": "draw.text_outline(x, y, text, col[, size])",
                    "description": "Text with a thin black outline, readable on any background.",
                    "args": [
                        {
                            "name": "x, y",
                            "type": "number",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "The outline uses 75% of this alpha.",
                            "optional": false
                        },
                        {
                            "name": "size",
                            "type": "number",
                            "description": "Default 14.",
                            "optional": true
                        }
                    ]
                },
                {
                    "name": "draw.gradient",
                    "signature": "draw.gradient(x, y, w, h, col1, col2[, horizontal])",
                    "description": "A rectangle that fades from one colour to another.",
                    "args": [
                        {
                            "name": "x, y, w, h",
                            "type": "number",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "col1",
                            "type": "color",
                            "description": "Left (or top) colour.",
                            "optional": false
                        },
                        {
                            "name": "col2",
                            "type": "color",
                            "description": "Right (or bottom) colour.",
                            "optional": false
                        },
                        {
                            "name": "horizontal",
                            "type": "boolean",
                            "description": "true (default) left to right, false top to bottom.",
                            "optional": true
                        }
                    ]
                },
                {
                    "name": "draw.polygon",
                    "signature": "draw.polygon(points, col)",
                    "description": "A filled convex shape (triangle, arrow, diamond). Concave shapes draw wrong.",
                    "args": [
                        {
                            "name": "points",
                            "type": "number[]",
                            "description": "Flat list `{x1, y1, x2, y2, ...}`, at least 3 points, up to 128.",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "",
                            "optional": false
                        }
                    ],
                    "example": "draw.polygon({ 100, 100, 120, 140, 80, 140 }, color(255, 200, 0))"
                },
                {
                    "name": "draw.polyline",
                    "signature": "draw.polyline(points, col[, thickness][, closed])",
                    "description": "Connected lines through the points.",
                    "args": [
                        {
                            "name": "points",
                            "type": "number[]",
                            "description": "Flat list, at least 2 points.",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "thickness",
                            "type": "number",
                            "description": "Default 1.",
                            "optional": true
                        },
                        {
                            "name": "closed",
                            "type": "boolean",
                            "description": "Join the last point to the first. Default false.",
                            "optional": true
                        }
                    ]
                },
                {
                    "name": "draw.world_to_screen",
                    "signature": "draw.world_to_screen(x, y, z)",
                    "description": "Turns a world position into screen pixels. Takes three numbers, not a vector.",
                    "args": [
                        {
                            "name": "x, y, z",
                            "type": "number",
                            "description": "World position.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "number",
                            "description": "screen x"
                        },
                        {
                            "type": "number",
                            "description": "screen y"
                        },
                        {
                            "type": "boolean",
                            "description": "visible: true when the point is in front of the camera. It can still be off the edge of the screen."
                        }
                    ],
                    "example": "local sx, sy, ok = draw.world_to_screen(p.head.x, p.head.y, p.head.z + 10)\nif ok then draw.text(sx, sy, p.name, white) end"
                },
                {
                    "name": "draw.line3d",
                    "signature": "draw.line3d(a, b, col[, thickness])",
                    "description": "A line between two world points. Drawn only when both ends are in front of the camera.",
                    "args": [
                        {
                            "name": "a, b",
                            "type": "vector",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "thickness",
                            "type": "number",
                            "description": "Default 1.",
                            "optional": true
                        }
                    ]
                },
                {
                    "name": "draw.circle3d",
                    "signature": "draw.circle3d(center, radius, col[, thickness])",
                    "description": "A flat circle on the ground around a world point (32 segments).",
                    "args": [
                        {
                            "name": "center",
                            "type": "vector",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "radius",
                            "type": "number",
                            "description": "Game units.",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "thickness",
                            "type": "number",
                            "description": "Default 1.",
                            "optional": true
                        }
                    ],
                    "example": "draw.circle3d(me.pos, 60, color(120, 200, 255), 2)"
                },
                {
                    "name": "draw.box3d",
                    "signature": "draw.box3d(min, max, col[, thickness])",
                    "description": "A 3D box outline between two corners.",
                    "args": [
                        {
                            "name": "min, max",
                            "type": "vector",
                            "description": "Opposite corners.",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "thickness",
                            "type": "number",
                            "description": "Default 1.",
                            "optional": true
                        }
                    ]
                },
                {
                    "name": "draw.load_image",
                    "signature": "draw.load_image(file)",
                    "description": "Loads a PNG or JPG from the script's data folder. Do it once, outside `on_frame`.",
                    "args": [
                        {
                            "name": "file",
                            "type": "string",
                            "description": "File name in `scripts/data/<script>/`.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer | nil",
                            "description": "Image handle, or nil when missing or invalid."
                        }
                    ],
                    "notes": [
                        "Up to 16 images per script, 2048 x 2048, 8 MB. Images are freed when the script unloads or reloads."
                    ],
                    "example": "local logo = draw.load_image(\"logo.png\")"
                },
                {
                    "name": "draw.load_image_data",
                    "signature": "draw.load_image_data(bytes)",
                    "description": "Loads an image from bytes in memory, for example the body of an `http.get` reply.",
                    "args": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "description": "PNG or JPG file contents.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer | nil",
                            "description": "Image handle."
                        }
                    ]
                },
                {
                    "name": "draw.image",
                    "signature": "draw.image(handle, x, y, w, h[, tint][, rounding])",
                    "description": "Draws an image.",
                    "args": [
                        {
                            "name": "handle",
                            "type": "integer",
                            "description": "From load_image.",
                            "optional": false
                        },
                        {
                            "name": "x, y, w, h",
                            "type": "number",
                            "description": "Where and how big.",
                            "optional": false
                        },
                        {
                            "name": "tint",
                            "type": "color",
                            "description": "Multiplies the image. Default white (no change). Use `color(255, 255, 255, a)` to fade.",
                            "optional": true
                        },
                        {
                            "name": "rounding",
                            "type": "number",
                            "description": "Corner radius.",
                            "optional": true
                        }
                    ]
                },
                {
                    "name": "draw.image_size",
                    "signature": "draw.image_size(handle)",
                    "description": "Original size of a loaded image. 0, 0 for a bad handle.",
                    "args": [
                        {
                            "name": "handle",
                            "type": "integer",
                            "description": "",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "width"
                        },
                        {
                            "type": "integer",
                            "description": "height"
                        }
                    ]
                },
                {
                    "name": "draw.load_font",
                    "signature": "draw.load_font(file[, size])",
                    "description": "Loads a .ttf, .otf or .ttc font. Looks in the script's data folder first, then in Windows\\Fonts.",
                    "args": [
                        {
                            "name": "file",
                            "type": "string",
                            "description": "For example `arial.ttf` or `segoeuib.ttf`.",
                            "optional": false
                        },
                        {
                            "name": "size",
                            "type": "number",
                            "description": "Pixel size, 6 to 96. Default 16.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer | nil",
                            "description": "Font handle. The font is ready after the next font rebuild, usually one frame."
                        }
                    ],
                    "notes": [
                        "8 fonts in total across all scripts. Loading the same file and size again returns the same handle. Covers Latin, Latin Extended and Cyrillic."
                    ],
                    "example": "local big = draw.load_font(\"segoeuib.ttf\", 28)"
                },
                {
                    "name": "draw.font_ready",
                    "signature": "draw.font_ready(handle)",
                    "description": "True once the font can be used.",
                    "args": [
                        {
                            "name": "handle",
                            "type": "integer",
                            "description": "",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "draw.text_font",
                    "signature": "draw.text_font(handle, x, y, text, col[, size])",
                    "description": "Text in a loaded font. Uses the menu font until the font is ready.",
                    "args": [
                        {
                            "name": "handle",
                            "type": "integer",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "x, y",
                            "type": "number",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "size",
                            "type": "number",
                            "description": "Default: the size the font was loaded at.",
                            "optional": true
                        }
                    ]
                },
                {
                    "name": "draw.text_size_font",
                    "signature": "draw.text_size_font(handle, text[, size])",
                    "description": "Text size in a loaded font.",
                    "args": [
                        {
                            "name": "handle",
                            "type": "integer",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "size",
                            "type": "number",
                            "description": "",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "number",
                            "description": "width"
                        },
                        {
                            "type": "number",
                            "description": "height"
                        }
                    ]
                }
            ],
            "tables": []
        },
        "hud": {
            "title": "hud",
            "group": "Drawing",
            "summary": "Real HUD panels: the same style, drag and keep-out as the built-in widgets.",
            "url": "https://dev.adolfjon.uz/docs/lua/hud",
            "functions": [
                {
                    "name": "hud.panel",
                    "signature": "hud.panel(id, title, w, h)",
                    "description": "Draws a panel with a header and returns where its content area starts.",
                    "args": [
                        {
                            "name": "id",
                            "type": "string",
                            "description": "Unique inside this script. The saved position is keyed by it.",
                            "optional": false
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "description": "Header text.",
                            "optional": false
                        },
                        {
                            "name": "w",
                            "type": "number",
                            "description": "Content width.",
                            "optional": false
                        },
                        {
                            "name": "h",
                            "type": "number",
                            "description": "Content height (the header is added on top).",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "number",
                            "description": "x of the content area"
                        },
                        {
                            "type": "number",
                            "description": "y of the content area (below the header)"
                        },
                        {
                            "type": "boolean",
                            "description": "visible: false while hidden or fading out. Skip drawing then."
                        }
                    ],
                    "notes": [
                        "The first time, the panel sits centred near the top of the screen."
                    ],
                    "example": "function on_frame()\n    local x, y, shown = hud.panel(\"main\", \"Kills\", 160, 40)\n    if not shown then return end\n    draw.text(x + 10, y + 10, \"Kills: \" .. kills, white, 15)\nend"
                }
            ],
            "tables": []
        },
        "ui": {
            "title": "ui",
            "group": "Script UI",
            "summary": "Script settings that are saved and shown on the script's page.",
            "url": "https://dev.adolfjon.uz/docs/lua/ui",
            "functions": [
                {
                    "name": "ui.checkbox",
                    "signature": "ui.checkbox(id, label[, default])",
                    "description": "An on/off switch.",
                    "args": [
                        {
                            "name": "id",
                            "type": "string",
                            "description": "Saved name.",
                            "optional": false
                        },
                        {
                            "name": "label",
                            "type": "string",
                            "description": "Text next to it.",
                            "optional": false
                        },
                        {
                            "name": "default",
                            "type": "boolean",
                            "description": "Default false.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "Current value."
                        }
                    ],
                    "example": "ui.checkbox(\"show\", \"Show panel\", true)"
                },
                {
                    "name": "ui.slider",
                    "signature": "ui.slider(id, label, min, max[, default])",
                    "description": "A number slider. Whole numbers when min, max and default are all whole and the range is at least 2; otherwise two decimals.",
                    "args": [
                        {
                            "name": "id",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "label",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "min",
                            "type": "number",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "max",
                            "type": "number",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "default",
                            "type": "number",
                            "description": "Default min.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "number",
                            "description": "Current value, kept inside min to max."
                        }
                    ],
                    "example": "ui.slider(\"size\", \"Text size\", 10, 32, 16)\nui.slider(\"speed\", \"Fade speed\", 0.5, 5, 2.0)"
                },
                {
                    "name": "ui.combo",
                    "signature": "ui.combo(id, label, items[, default])",
                    "description": "A dropdown.",
                    "args": [
                        {
                            "name": "id",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "label",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "items",
                            "type": "string[]",
                            "description": "Choices.",
                            "optional": false
                        },
                        {
                            "name": "default",
                            "type": "integer",
                            "description": "1-based index. Default 1.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "1-based index of the choice."
                        }
                    ],
                    "example": "local styles = { \"Minimal\", \"Boxed\", \"Bar\" }\nui.combo(\"style\", \"Style\", styles, 1)\nlocal chosen = styles[ui.get(\"style\")]"
                },
                {
                    "name": "ui.color",
                    "signature": "ui.color(id, label[, default])",
                    "description": "A colour picker with alpha.",
                    "args": [
                        {
                            "name": "id",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "label",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "default",
                            "type": "color",
                            "description": "Default white.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Packed colour."
                        }
                    ]
                },
                {
                    "name": "ui.keybind",
                    "signature": "ui.keybind(id, label[, default])",
                    "description": "A key picker.",
                    "args": [
                        {
                            "name": "id",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "label",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "default",
                            "type": "integer",
                            "description": "Virtual-key code. Default 0 (none).",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Key code, 0 when none."
                        }
                    ],
                    "example": "ui.keybind(\"toggle\", \"Toggle key\", 0x75)"
                },
                {
                    "name": "ui.get",
                    "signature": "ui.get(id)",
                    "description": "The current value of a control made with the functions above.",
                    "args": [
                        {
                            "name": "id",
                            "type": "string",
                            "description": "",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "any | nil",
                            "description": "nil when no control has this id."
                        }
                    ]
                }
            ],
            "tables": []
        },
        "menu": {
            "title": "menu",
            "group": "Script UI",
            "summary": "Build the script's own page: text, buttons, inputs, lists and images.",
            "url": "https://dev.adolfjon.uz/docs/lua/menu",
            "functions": [
                {
                    "name": "menu.text",
                    "signature": "menu.text(text)",
                    "description": "A line of text."
                },
                {
                    "name": "menu.section",
                    "signature": "menu.section(title)",
                    "description": "A section heading."
                },
                {
                    "name": "menu.separator",
                    "signature": "menu.separator()",
                    "description": "A thin line."
                },
                {
                    "name": "menu.spacing",
                    "signature": "menu.spacing()",
                    "description": "Some empty space."
                },
                {
                    "name": "menu.same_line",
                    "signature": "menu.same_line()",
                    "description": "Puts the next widget to the right of the last button. Works only right after a button."
                },
                {
                    "name": "menu.button",
                    "signature": "menu.button(label)",
                    "description": "A button.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "true on the frame it was clicked."
                        }
                    ],
                    "example": "if menu.button(\"Reset\") then kills = 0 end"
                },
                {
                    "name": "menu.checkbox",
                    "signature": "menu.checkbox(label, value)",
                    "description": "A checkbox.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "New value."
                        }
                    ],
                    "example": "show = menu.checkbox(\"Show\", show)"
                },
                {
                    "name": "menu.slider",
                    "signature": "menu.slider(label, value, min, max[, decimals])",
                    "description": "A slider.",
                    "args": [
                        {
                            "name": "label",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "value",
                            "type": "number",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "min, max",
                            "type": "number",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "decimals",
                            "type": "integer",
                            "description": "Default 0 when all numbers are whole, otherwise 2.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "number",
                            "description": "New value."
                        }
                    ]
                },
                {
                    "name": "menu.combo",
                    "signature": "menu.combo(label, index, items)",
                    "description": "A dropdown.",
                    "args": [
                        {
                            "name": "label",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "index",
                            "type": "integer",
                            "description": "1-based.",
                            "optional": false
                        },
                        {
                            "name": "items",
                            "type": "string[]",
                            "description": "",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "New 1-based index."
                        }
                    ]
                },
                {
                    "name": "menu.color",
                    "signature": "menu.color(label, col)",
                    "description": "A colour picker.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "New colour."
                        }
                    ]
                },
                {
                    "name": "menu.keybind",
                    "signature": "menu.keybind(label, vk)",
                    "description": "A key picker.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "New key code."
                        }
                    ]
                },
                {
                    "name": "menu.input",
                    "signature": "menu.input(label, text)",
                    "description": "A one-line text field, up to 255 bytes.",
                    "returns": [
                        {
                            "type": "string",
                            "description": "New text."
                        }
                    ],
                    "example": "name = menu.input(\"Name\", name)"
                },
                {
                    "name": "menu.tooltip",
                    "signature": "menu.tooltip(text)",
                    "description": "A hover tooltip on the widget drawn just before it."
                },
                {
                    "name": "menu.progress",
                    "signature": "menu.progress(label, value)",
                    "description": "A progress bar.",
                    "args": [
                        {
                            "name": "label",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "value",
                            "type": "number",
                            "description": "0 to 1.",
                            "optional": false
                        }
                    ]
                },
                {
                    "name": "menu.list",
                    "signature": "menu.list(label, selected, items[, rows])",
                    "description": "A scrolling list.",
                    "args": [
                        {
                            "name": "label",
                            "type": "string",
                            "description": "Can be empty.",
                            "optional": false
                        },
                        {
                            "name": "selected",
                            "type": "integer",
                            "description": "1-based, 0 for none.",
                            "optional": false
                        },
                        {
                            "name": "items",
                            "type": "string[]",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "rows",
                            "type": "integer",
                            "description": "Visible rows, 2 to 16. Default 6.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "New selection."
                        }
                    ]
                },
                {
                    "name": "menu.image",
                    "signature": "menu.image(handle, w, h)",
                    "description": "An image from `draw.load_image`. The width is capped to the page width."
                }
            ],
            "tables": []
        },
        "notepad": {
            "title": "notepad",
            "group": "Script UI",
            "summary": "Open floating text windows: notes, logs, config editors.",
            "url": "https://dev.adolfjon.uz/docs/lua/notepad",
            "functions": [
                {
                    "name": "notepad.open",
                    "signature": "notepad.open(id[, title][, text][, options])",
                    "description": "Opens (or brings back) a notepad.",
                    "args": [
                        {
                            "name": "id",
                            "type": "string",
                            "description": "Your name for this notepad.",
                            "optional": false
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "description": "Window title. Default the id.",
                            "optional": true
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "description": "Starting text. Ignored when the window is already open with unsaved edits.",
                            "optional": true
                        },
                        {
                            "name": "options",
                            "type": "table",
                            "description": "`{ code = true }` for line numbers and Tab, `{ readonly = true }` to block editing.",
                            "optional": true
                        }
                    ],
                    "example": "notepad.open(\"log\", \"Kill log\", table.concat(lines, \"\\n\"), { readonly = true })"
                },
                {
                    "name": "notepad.set_text",
                    "signature": "notepad.set_text(id, text)",
                    "description": "Replaces the text and marks it saved."
                },
                {
                    "name": "notepad.get_text",
                    "signature": "notepad.get_text(id)",
                    "description": "The current text. Empty when not open.",
                    "returns": [
                        {
                            "type": "string",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "notepad.close",
                    "signature": "notepad.close(id)",
                    "description": "Closes it."
                },
                {
                    "name": "notepad.is_open",
                    "signature": "notepad.is_open(id)",
                    "description": "True while open.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                }
            ],
            "tables": []
        },
        "aim": {
            "title": "aim",
            "group": "Features",
            "summary": "Read the aimbot, and turn it on or off.",
            "url": "https://dev.adolfjon.uz/docs/lua/aim",
            "functions": [
                {
                    "name": "aim.enabled",
                    "signature": "aim.enabled([on])",
                    "description": "Returns whether the aimbot is on. Pass true or false to change it.",
                    "permission": "settings",
                    "args": [
                        {
                            "name": "on",
                            "type": "boolean",
                            "description": "New state. Needs the settings permission.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "State after the call."
                        }
                    ],
                    "example": "if input.key_pressed(0x76) then aim.enabled(not aim.enabled()) end"
                },
                {
                    "name": "aim.target",
                    "signature": "aim.target()",
                    "description": "The player the aimbot is locked on, or nil.",
                    "returns": [
                        {
                            "type": "player | nil",
                            "description": "Basic player table."
                        }
                    ]
                },
                {
                    "name": "aim.info",
                    "signature": "aim.info()",
                    "description": "What the aimbot is doing this frame.",
                    "returns": [
                        {
                            "type": "table",
                            "description": "`active` (boolean), `hitchance` (number), `damage` (number), `blocked` (boolean or reason)."
                        }
                    ]
                }
            ],
            "tables": []
        },
        "trigger": {
            "title": "trigger",
            "group": "Features",
            "summary": "Read and toggle the triggerbot.",
            "url": "https://dev.adolfjon.uz/docs/lua/trigger",
            "functions": [
                {
                    "name": "trigger.enabled",
                    "signature": "trigger.enabled([on])",
                    "description": "Returns whether the triggerbot is on. Pass a value to change it.",
                    "permission": "settings",
                    "args": [
                        {
                            "name": "on",
                            "type": "boolean",
                            "description": "Needs the settings permission.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "State after the call."
                        }
                    ]
                }
            ],
            "tables": []
        },
        "bomb": {
            "title": "bomb",
            "group": "Features",
            "summary": "The C4: planted, site, time left, defuse progress.",
            "url": "https://dev.adolfjon.uz/docs/lua/bomb",
            "functions": [
                {
                    "name": "bomb.state",
                    "signature": "bomb.state()",
                    "description": "Everything about the bomb. Same as `entity.c4()`.",
                    "returns": [
                        {
                            "type": "table",
                            "description": "See the table below."
                        }
                    ],
                    "example": "local b = bomb.state()\nif b.planted and not b.defused then\n    print(b.site, string.format(\"%.1f\", b.time_left))\nend"
                }
            ],
            "tables": [
                {
                    "title": "Bomb table",
                    "fields": [
                        {
                            "name": "planted",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "name": "defused",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "name": "exploded",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "name": "defusing",
                            "type": "boolean",
                            "description": "Someone is defusing now."
                        },
                        {
                            "name": "site",
                            "type": "string",
                            "description": "`A`, `B` or empty."
                        },
                        {
                            "name": "time_left",
                            "type": "number",
                            "description": "Seconds until it explodes."
                        },
                        {
                            "name": "timer_length",
                            "type": "number",
                            "description": "Full timer, usually 40."
                        },
                        {
                            "name": "defuse_left",
                            "type": "number",
                            "description": "Seconds until the defuse ends, 0 when nobody defuses."
                        },
                        {
                            "name": "defuse_length",
                            "type": "number",
                            "description": "10 without a kit, 5 with one."
                        },
                        {
                            "name": "pos",
                            "type": "vector",
                            "description": "Where it is. Missing when unknown."
                        }
                    ]
                }
            ]
        },
        "nade": {
            "title": "nade",
            "group": "Features",
            "summary": "Grenades in the air, smokes, fires and the grenade in your hand.",
            "url": "https://dev.adolfjon.uz/docs/lua/nade",
            "functions": [
                {
                    "name": "nade.list",
                    "signature": "nade.list()",
                    "description": "Grenades in the world. Same as `entity.grenades()`.",
                    "returns": [
                        {
                            "type": "table[]",
                            "description": "See the grenade table below."
                        }
                    ]
                },
                {
                    "name": "nade.held",
                    "signature": "nade.held()",
                    "description": "The predicted path of the grenade you are holding, or nil.",
                    "returns": [
                        {
                            "type": "table | nil",
                            "description": "`type` (smoke, flash, he, molotov, decoy), `path` (array of vectors), `landing` (vector), `seconds` (flight time)."
                        }
                    ],
                    "notes": [
                        "Each call keeps the prediction running for 2 seconds, even when Grenade Prediction is off in the menu. Nothing is drawn for you; draw the path yourself."
                    ],
                    "example": "local h = nade.held()\nif h then\n    for i = 2, #h.path do draw.line3d(h.path[i - 1], h.path[i], white, 2) end\nend"
                }
            ],
            "tables": [
                {
                    "title": "Grenade table",
                    "fields": [
                        {
                            "name": "type",
                            "type": "string",
                            "description": "`he`, `flash`, `smoke`, `molotov`, `decoy` or `inferno` (fire on the ground)."
                        },
                        {
                            "name": "pos",
                            "type": "vector",
                            "description": "Where it is now."
                        },
                        {
                            "name": "exploded",
                            "type": "boolean",
                            "description": ""
                        },
                        {
                            "name": "deployed",
                            "type": "boolean",
                            "description": "Smoke is out."
                        },
                        {
                            "name": "smoke_timer",
                            "type": "number",
                            "description": "Smoke time."
                        },
                        {
                            "name": "thrown_from",
                            "type": "vector",
                            "description": "Where it was thrown from, when known."
                        },
                        {
                            "name": "landing",
                            "type": "vector",
                            "description": "Predicted landing spot while flying, when known."
                        },
                        {
                            "name": "time_left",
                            "type": "number",
                            "description": "Seconds until it lands or pops, with `landing`."
                        }
                    ]
                }
            ]
        },
        "spectators": {
            "title": "spectators",
            "group": "Features",
            "summary": "Who is watching you.",
            "url": "https://dev.adolfjon.uz/docs/lua/spectators",
            "functions": [
                {
                    "name": "spectators.list",
                    "signature": "spectators.list()",
                    "description": "Players spectating you right now.",
                    "returns": [
                        {
                            "type": "table[]",
                            "description": "`name` (string), `mode` (integer: 2 first person, 3 third person, 4 free camera, others rare), `teammate` (boolean)."
                        }
                    ],
                    "example": "for _, s in ipairs(spectators.list()) do print(s.name) end"
                }
            ],
            "tables": []
        },
        "velocity": {
            "title": "velocity",
            "group": "Features",
            "summary": "Your movement speed and jump stats.",
            "url": "https://dev.adolfjon.uz/docs/lua/velocity",
            "functions": [
                {
                    "name": "velocity.state",
                    "signature": "velocity.state()",
                    "description": "Movement stats. Speeds are in units per second.",
                    "returns": [
                        {
                            "type": "table",
                            "description": "`speed` (horizontal), `vertical`, `takeoff` (speed at the last jump), `air_peak`, `session_max`, `air_time` (seconds), `jumps`, `on_ground`, `ducking`, `strafe_gain`, `valid` (false when not playing)."
                        }
                    ],
                    "example": "local v = velocity.state()\nif v.valid then draw.text(20, 200, math.floor(v.speed) .. \" u/s\", white, 18) end"
                }
            ],
            "tables": []
        },
        "keystrokes": {
            "title": "keystrokes",
            "group": "Features",
            "summary": "The movement keys and mouse buttons the user is pressing.",
            "url": "https://dev.adolfjon.uz/docs/lua/keystrokes",
            "functions": [
                {
                    "name": "keystrokes.state",
                    "signature": "keystrokes.state()",
                    "description": "Physical key states, plus clicks per second.",
                    "returns": [
                        {
                            "type": "table",
                            "description": "Booleans `w a s d shift space ctrl lmb rmb`, and integers `cps_left`, `cps_right` (clicks in the last second)."
                        }
                    ]
                }
            ],
            "tables": []
        },
        "esp": {
            "title": "esp",
            "group": "Features",
            "summary": "Add your own lines under a player's ESP.",
            "url": "https://dev.adolfjon.uz/docs/lua/esp",
            "functions": [
                {
                    "name": "esp.add_text",
                    "signature": "esp.add_text(slot, text[, col])",
                    "description": "Adds a line under that player's ESP box for this frame. Call it every frame you want it shown. Needs ESP to be on.",
                    "args": [
                        {
                            "name": "slot",
                            "type": "integer",
                            "description": "Player slot.",
                            "optional": false
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "description": "Up to 64 characters.",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "Default white.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "false when the player is unknown or already has 4 lines this frame."
                        }
                    ],
                    "example": "for _, p in ipairs(game.players()) do\n    if p.enemy then esp.add_text(p.slot, \"$\" .. p.money, color(120, 230, 120)) end\nend"
                }
            ],
            "tables": []
        },
        "notify": {
            "title": "notify",
            "group": "Features",
            "summary": "Lines in the built-in notification feed.",
            "url": "https://dev.adolfjon.uz/docs/lua/notify",
            "functions": [
                {
                    "name": "notify.push",
                    "signature": "notify.push(text[, damage][, hp])",
                    "description": "Adds a line to the notification feed, in the user's chosen style.",
                    "args": [
                        {
                            "name": "text",
                            "type": "string",
                            "description": "Up to 64 characters.",
                            "optional": false
                        },
                        {
                            "name": "damage",
                            "type": "integer",
                            "description": "Damage number to show. Default 0 (none).",
                            "optional": true
                        },
                        {
                            "name": "hp",
                            "type": "integer",
                            "description": "Health left to show. Default -1 (none).",
                            "optional": true
                        }
                    ],
                    "example": "notify.push(\"Bomb planted on \" .. e.site)"
                }
            ],
            "tables": []
        },
        "players": {
            "title": "players",
            "group": "Features",
            "summary": "Player list flags and colours, and public stats (Steam, Faceit, Leetify).",
            "url": "https://dev.adolfjon.uz/docs/lua/players",
            "functions": [
                {
                    "name": "players.flag",
                    "signature": "players.flag(steamid[, flag])",
                    "description": "Reads a player's flag in the player list, or sets it.",
                    "permission": "settings",
                    "args": [
                        {
                            "name": "steamid",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "flag",
                            "type": "integer",
                            "description": "0 none, 1 priority, 2 ignore. Setting needs the settings permission.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Flag after the call."
                        }
                    ]
                },
                {
                    "name": "players.color",
                    "signature": "players.color(steamid[, col])",
                    "description": "Reads or sets a player's custom colour.",
                    "permission": "settings",
                    "args": [
                        {
                            "name": "steamid",
                            "type": "string",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "col",
                            "type": "color",
                            "description": "Needs the settings permission.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Colour after the call."
                        }
                    ]
                },
                {
                    "name": "players.intel",
                    "signature": "players.intel(steamid)",
                    "description": "Public stats. The first call starts loading them; it returns nil until they arrive, so call it again on later frames.",
                    "returns": [
                        {
                            "type": "table | nil",
                            "description": "`name`, `country`, `since`, `vac_bans`, `game_bans`, `public`, and when found `faceit {nick, level, elo, kd, win_rate, matches, hs, adr}` and `leetify {rating, aim, utility, positioning, hs, win_rate, matches, premier}`."
                        }
                    ],
                    "example": "local i = players.intel(p.steamid)\nif i and i.faceit then esp.add_text(p.slot, \"FACEIT \" .. i.faceit.level) end"
                }
            ],
            "tables": []
        },
        "config": {
            "title": "config",
            "group": "Settings",
            "summary": "Read every program setting, and change them with permission.",
            "url": "https://dev.adolfjon.uz/docs/lua/config",
            "functions": [
                {
                    "name": "config.sections",
                    "signature": "config.sections()",
                    "description": "The section names.",
                    "returns": [
                        {
                            "type": "string[]",
                            "description": "`aim`, `esp`, `misc`, `perf`, `damage`, `world`, `deathfx`, `skin`."
                        }
                    ]
                },
                {
                    "name": "config.list",
                    "signature": "config.list(path)",
                    "description": "Key names inside a section or object, in alphabetical order. Empty for arrays and plain values.",
                    "args": [
                        {
                            "name": "path",
                            "type": "string",
                            "description": "For example `esp`.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "string[]",
                            "description": ""
                        }
                    ],
                    "example": "for _, k in ipairs(config.list(\"misc\")) do print(k) end"
                },
                {
                    "name": "config.get",
                    "signature": "config.get(path)",
                    "description": "The current value. Arrays and colours come back as tables (colours are `{r, g, b, a}` from 0 to 1).",
                    "args": [
                        {
                            "name": "path",
                            "type": "string",
                            "description": "",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "any | nil",
                            "description": "nil when the path does not exist."
                        }
                    ],
                    "example": "local fov = config.get(\"aim.fov\")\nlocal box_alpha = config.get(\"esp.visibleColor.4\")"
                },
                {
                    "name": "config.set",
                    "signature": "config.set(path, value)",
                    "description": "Changes a setting.",
                    "permission": "settings",
                    "args": [
                        {
                            "name": "path",
                            "type": "string",
                            "description": "Must already exist.",
                            "optional": false
                        },
                        {
                            "name": "value",
                            "type": "any",
                            "description": "Same type and shape as the current value. Whole-number settings stay whole (2.6 becomes 3).",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "true when applied (or already equal)."
                        }
                    ],
                    "notes": [
                        "64 changes per frame across all scripts.",
                        "`misc.menuToggleKey` and `misc.obsBypass` are locked.",
                        "Errors are logged: unknown section, unknown setting, wrong type, locked."
                    ],
                    "example": "config.set(\"aim.rcs\", true)\nconfig.set(\"esp.visibleColor\", { 1, 0.3, 0.3, 1 })"
                }
            ],
            "tables": []
        },
        "map": {
            "title": "map",
            "group": "World",
            "summary": "The baked map: line of sight and wallbang damage.",
            "url": "https://dev.adolfjon.uz/docs/lua/map",
            "functions": [
                {
                    "name": "map.ready",
                    "signature": "map.ready()",
                    "description": "True when map data is loaded.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "map.name",
                    "signature": "map.name()",
                    "description": "The map that is loaded.",
                    "returns": [
                        {
                            "type": "string",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "map.visible",
                    "signature": "map.visible(a, b)",
                    "description": "True when nothing solid is between two points.",
                    "args": [
                        {
                            "name": "a, b",
                            "type": "vector",
                            "description": "",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ],
                    "example": "local me = entity.local_player()\nfor _, p in ipairs(entity.players()) do\n    if p.enemy and me and p.bones and map.visible(me.bones.head, p.bones.head) then\n        esp.add_text(p.slot, \"OPEN\", color(255, 220, 90))\n    end\nend"
                },
                {
                    "name": "map.penetrate",
                    "signature": "map.penetrate(a, b[, bullet])",
                    "description": "Damage a bullet from a to b would do through walls.",
                    "args": [
                        {
                            "name": "a, b",
                            "type": "vector",
                            "description": "From, to.",
                            "optional": false
                        },
                        {
                            "name": "bullet",
                            "type": "table",
                            "description": "`damage` (36), `armor_ratio` (1.55), `range_modifier` (0.98), `penetration` (2), `headshot_multiplier` (4), `armored` (false), `headshot` (false). Defaults are an AK-47.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "table",
                            "description": "`damage` (number), `surfaces` (walls crossed), `reachable` (boolean)."
                        }
                    ],
                    "notes": [
                        "Without a bullet table it uses the weapon in your hands (AK-47 numbers when that cannot be read)."
                    ],
                    "example": "local r = map.penetrate(me.bones.head, p.bones.chest, { armored = p.armor > 0 })\nif r.reachable and r.damage >= 20 then esp.add_text(p.slot, math.floor(r.damage) .. \" dmg\") end"
                },
                {
                    "name": "map.trace",
                    "signature": "map.trace(a, b[, radius])",
                    "description": "Casts a ray (or a ball when radius is set) from a to b against the map.",
                    "args": [
                        {
                            "name": "a, b",
                            "type": "vector",
                            "description": "From, to.",
                            "optional": false
                        },
                        {
                            "name": "radius",
                            "type": "number",
                            "description": "Ball radius in units, 0 to 32. Default 0.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "table",
                            "description": "`hit` (boolean), `sky` (boolean), `fraction` (0..1), `pos` (vector, the hit point or b), `normal` (vector, surface facing), `distance` (units)."
                        }
                    ],
                    "example": "local r = map.trace(a, b)\nif r.hit then world.marker(r.pos, { text = \"wall\" }) end"
                },
                {
                    "name": "map.ground",
                    "signature": "map.ground(pos[, depth])",
                    "description": "The floor under a point.",
                    "args": [
                        {
                            "name": "pos",
                            "type": "vector",
                            "description": "",
                            "optional": false
                        },
                        {
                            "name": "depth",
                            "type": "number",
                            "description": "How far down to look. Default 4096.",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "vector | nil",
                            "description": "nil when there is no floor."
                        }
                    ]
                }
            ],
            "tables": []
        },
        "world": {
            "title": "world",
            "group": "World",
            "summary": "Place markers, zones, paths and pictures in the map. The engine draws them for you every frame.",
            "url": "https://dev.adolfjon.uz/docs/lua/world",
            "functions": [
                {
                    "name": "world.aim",
                    "signature": "world.aim([range])",
                    "description": "Where your crosshair points on the map.",
                    "returns": [
                        {
                            "type": "table | nil",
                            "description": "Same fields as `map.trace`. nil when nothing is hit."
                        }
                    ],
                    "example": "local hit = world.aim()\nif hit and input.key_pressed(0x58) then world.marker(hit.pos, { text = \"here\" }) end"
                },
                {
                    "name": "world.marker",
                    "signature": "world.marker(pos[, options])",
                    "description": "A dot with optional text, ring, vertical beam and icon.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Object id, 0 when full."
                        }
                    ],
                    "example": "world.marker(pos, { text = \"Boost\", radius = 24, height = 48, color = color(255, 200, 60), walls = false })"
                },
                {
                    "name": "world.zone",
                    "signature": "world.zone(options)",
                    "description": "A circle (`pos` + `radius`, `height` = vertical reach, default 128) or a box (`min` + `max`). Fires `zone_enter` / `zone_leave` for this script when you walk in or out.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Object id."
                        }
                    ],
                    "example": "world.zone({ pos = p, radius = 160, name = \"Banana\" })\nevents.on(\"zone_enter\", function(e) sound.speak(e.name) end)"
                },
                {
                    "name": "world.path",
                    "signature": "world.path(points[, options])",
                    "description": "A line through 2 to 512 points. `arrows` adds direction marks, `dashed` breaks it up.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Object id, 0 with fewer than 2 points."
                        }
                    ]
                },
                {
                    "name": "world.decal",
                    "signature": "world.decal(image, pos[, options])",
                    "description": "A picture from `draw.load_image` placed in the world. With `normal` it lies flat on that surface; without it always faces you. `size` is in units (default 32).",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Object id, 0 for a bad image."
                        }
                    ],
                    "example": "local hit = world.aim()\nif hit then world.decal(logo, hit.pos, { normal = hit.normal, size = 48 }) end"
                },
                {
                    "name": "world.set",
                    "signature": "world.set(id, options)",
                    "description": "Changes options (and `pos`) of an object.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "world.move",
                    "signature": "world.move(id, pos)",
                    "description": "Moves an object.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "world.remove",
                    "signature": "world.remove(id)",
                    "description": "Deletes an object.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "world.clear",
                    "signature": "world.clear()",
                    "description": "Deletes all of this script's objects."
                },
                {
                    "name": "world.count",
                    "signature": "world.count()",
                    "description": "How many objects this script has.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "world.inside",
                    "signature": "world.inside(id)",
                    "description": "True while you stand in that zone.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "world.list",
                    "signature": "world.list()",
                    "description": "This script's objects.",
                    "returns": [
                        {
                            "type": "table[]",
                            "description": "`id`, `kind` (marker/zone/path/decal), `pos`, `name`, `text`, `inside`."
                        }
                    ]
                },
                {
                    "name": "world.save",
                    "signature": "world.save([name])",
                    "description": "Writes markers, zones and paths to `world_<name>.json` in the data folder. Default name is the map.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "world.load",
                    "signature": "world.load([name])",
                    "description": "Adds the objects saved under that name.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "How many were added."
                        }
                    ],
                    "example": "world.load()"
                }
            ],
            "tables": []
        },
        "view": {
            "title": "view",
            "group": "World",
            "summary": "Your own live camera window, drawn like Third Person.",
            "url": "https://dev.adolfjon.uz/docs/lua/view",
            "functions": [
                {
                    "name": "view.window",
                    "signature": "view.window(x, y, w, h, options)",
                    "description": "Shows the map from any point. Call it in `on_frame` every frame you want it.",
                    "args": [
                        {
                            "name": "x, y, w, h",
                            "type": "number",
                            "description": "Screen rectangle.",
                            "optional": false
                        },
                        {
                            "name": "options",
                            "type": "table",
                            "description": "`pos` (camera point, required), `look_at` (vector) or `angles` ({pitch, yaw}), `zoom` (0.3 to 4, default 1).",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "false when another window already took this frame or map data is missing."
                        }
                    ],
                    "example": "local w, h = draw.screen()\nview.window(w - 384, 120, 360, 203, { pos = vec.new(x, y, z + 120), look_at = site })"
                }
            ],
            "tables": []
        },
        "weapon": {
            "title": "weapon",
            "group": "Features",
            "summary": "Stats of the weapon in someone's hands, read from the game files.",
            "url": "https://dev.adolfjon.uz/docs/lua/weapon",
            "functions": [
                {
                    "name": "weapon.info",
                    "signature": "weapon.info([slot])",
                    "description": "Your weapon, or the one held by that player.",
                    "returns": [
                        {
                            "type": "table | nil",
                            "description": "`name`, `damage`, `headshot_multiplier`, `armor_ratio`, `penetration`, `range`, `range_modifier`, `cycle_time`, `max_speed`, `spread`, `inaccuracy_stand`, `inaccuracy_move`, `recoil`, `bullets`, `price`, `kill_award`, `reserve_max`, `zoom_levels`, `full_auto`, `max_clip`, `clip`, `reserve`, `reloading`, `inaccuracy`. Missing fields are left out."
                        }
                    ],
                    "example": "local w = weapon.info()\nif w then draw.text(20, 200, w.name .. \" \" .. w.clip .. \"/\" .. w.max_clip, color(255,255,255)) end"
                }
            ],
            "tables": []
        },
        "sound": {
            "title": "sound",
            "group": "Sound",
            "summary": "Play WAV files, tones and spoken text.",
            "url": "https://dev.adolfjon.uz/docs/lua/sound",
            "functions": [
                {
                    "name": "sound.play",
                    "signature": "sound.play(file[, volume][, options])",
                    "description": "Plays a WAV.",
                    "args": [
                        {
                            "name": "file",
                            "type": "string",
                            "description": "Name in the data folder.",
                            "optional": false
                        },
                        {
                            "name": "volume",
                            "type": "number",
                            "description": "0 to 1, default 1.",
                            "optional": true
                        },
                        {
                            "name": "options",
                            "type": "table",
                            "description": "`pan` (-1 left to 1 right), `loop` (boolean).",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Sound id, 0 when it did not start."
                        }
                    ],
                    "example": "local id = sound.play(\"alarm.wav\", 0.7, { loop = true })"
                },
                {
                    "name": "sound.play_at",
                    "signature": "sound.play_at(file, pos[, volume][, range])",
                    "description": "Plays a WAV as if it came from a point: quieter with distance, panned left or right from where you look. Silent past `range` (default 2000).",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Sound id or 0."
                        }
                    ]
                },
                {
                    "name": "sound.tone",
                    "signature": "sound.tone(hz[, seconds][, volume][, pan])",
                    "description": "A beep without any file. 20 to 12000 Hz, 0.02 to 5 s (default 0.15), volume default 0.6.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Sound id or 0."
                        }
                    ],
                    "example": "sound.tone(880, 0.08)"
                },
                {
                    "name": "sound.stop",
                    "signature": "sound.stop(id)",
                    "description": "Stops one of this script's sounds.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "sound.stop_all",
                    "signature": "sound.stop_all()",
                    "description": "Stops all of this script's sounds."
                },
                {
                    "name": "sound.playing",
                    "signature": "sound.playing(id)",
                    "description": "True while that sound plays.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "sound.list",
                    "signature": "sound.list()",
                    "description": "WAV files in the data folder.",
                    "returns": [
                        {
                            "type": "string[]",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "sound.speak",
                    "signature": "sound.speak(text[, rate])",
                    "description": "Reads text aloud with a Windows voice. Queued, up to 8 lines of 240 characters. Rate -10 to 10.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "false when the queue is full."
                        }
                    ],
                    "notes": [
                        "Uses the voices installed in Windows; there may be no voice for every language."
                    ],
                    "example": "sound.speak(\"Bomb planted\")"
                },
                {
                    "name": "sound.speak_stop",
                    "signature": "sound.speak_stop()",
                    "description": "Stops speaking and clears the queue."
                }
            ],
            "tables": []
        },
        "timer": {
            "title": "timer",
            "group": "Helpers",
            "summary": "Run code later or again and again.",
            "url": "https://dev.adolfjon.uz/docs/lua/timer",
            "functions": [
                {
                    "name": "timer.after",
                    "signature": "timer.after(seconds, fn)",
                    "description": "Runs fn once after that many seconds.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Timer id."
                        }
                    ],
                    "example": "timer.after(2, function() print(\"two seconds\") end)"
                },
                {
                    "name": "timer.every",
                    "signature": "timer.every(seconds, fn)",
                    "description": "Runs fn every that many seconds.",
                    "returns": [
                        {
                            "type": "integer",
                            "description": "Timer id."
                        }
                    ]
                },
                {
                    "name": "timer.cancel",
                    "signature": "timer.cancel(id)",
                    "description": "Stops a timer."
                }
            ],
            "tables": []
        },
        "vpk": {
            "title": "vpk",
            "group": "World",
            "summary": "Read files out of the game's VPK archives.",
            "url": "https://dev.adolfjon.uz/docs/lua/vpk",
            "functions": [
                {
                    "name": "vpk.read",
                    "signature": "vpk.read(entry, callback[, source])",
                    "description": "Reads one file by its exact path, on a worker thread. The callback runs later on the render thread.",
                    "args": [
                        {
                            "name": "entry",
                            "type": "string",
                            "description": "Path inside the VPK, for example `panorama/images/icons/equipment/ak47.svg`. No `..`, no `:`, no leading slash.",
                            "optional": false
                        },
                        {
                            "name": "callback",
                            "type": "function(ok, data)",
                            "description": "data is the file bytes, or the error text when ok is false.",
                            "optional": false
                        },
                        {
                            "name": "source",
                            "type": "string",
                            "description": "`game` (csgo/pak01_dir.vpk, default) or `map` (the current map's VPK).",
                            "optional": true
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "false when it could not start (bad path, game folder unknown, 4 reads already running)."
                        }
                    ],
                    "notes": [
                        "16 MB per entry. No folder listing; you need the exact path."
                    ]
                }
            ],
            "tables": []
        },
        "json": {
            "title": "json",
            "group": "Storage and web",
            "summary": "Turn tables into JSON text and back.",
            "url": "https://dev.adolfjon.uz/docs/lua/json",
            "functions": [
                {
                    "name": "json.encode",
                    "signature": "json.encode(value)",
                    "description": "A table, string, number or boolean as JSON text. A table with keys 1..n becomes an array; others become objects (keys that are not strings are dropped). Up to 16 levels deep.",
                    "returns": [
                        {
                            "type": "string",
                            "description": ""
                        }
                    ],
                    "example": "print(json.encode({ kills = 3, names = { \"a\", \"b\" } }))"
                },
                {
                    "name": "json.decode",
                    "signature": "json.decode(text)",
                    "description": "JSON text as Lua values. nil when the text is not valid JSON.",
                    "returns": [
                        {
                            "type": "any | nil",
                            "description": ""
                        }
                    ]
                }
            ],
            "tables": []
        },
        "db": {
            "title": "db",
            "group": "Storage and web",
            "summary": "Small saved storage, per script.",
            "url": "https://dev.adolfjon.uz/docs/lua/db",
            "functions": [
                {
                    "name": "db.get",
                    "signature": "db.get(key)",
                    "description": "A saved value, or nil.",
                    "returns": [
                        {
                            "type": "any | nil",
                            "description": ""
                        }
                    ],
                    "example": "local best = db.get(\"best\") or 0"
                },
                {
                    "name": "db.set",
                    "signature": "db.set(key, value)",
                    "description": "Saves a value. nil deletes the key.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "false when full or the value cannot be saved."
                        }
                    ],
                    "example": "db.set(\"best\", best)"
                }
            ],
            "tables": []
        },
        "files": {
            "title": "files",
            "group": "Storage and web",
            "summary": "Text files in the script's own data folder.",
            "url": "https://dev.adolfjon.uz/docs/lua/files",
            "functions": [
                {
                    "name": "files.read",
                    "signature": "files.read(name)",
                    "description": "The file contents, or nil.",
                    "returns": [
                        {
                            "type": "string | nil",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "files.write",
                    "signature": "files.write(name, text)",
                    "description": "Writes (replaces) a file.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ],
                    "example": "files.write(\"kills.csv\", table.concat(rows, \"\\n\"))"
                },
                {
                    "name": "files.list",
                    "signature": "files.list()",
                    "description": "File names in the folder.",
                    "returns": [
                        {
                            "type": "string[]",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "files.remove",
                    "signature": "files.remove(name)",
                    "description": "Deletes a file.",
                    "returns": [
                        {
                            "type": "boolean",
                            "description": ""
                        }
                    ]
                }
            ],
            "tables": []
        },
        "http": {
            "title": "http",
            "group": "Storage and web",
            "summary": "Fetch data from adolfjon.uz.",
            "url": "https://dev.adolfjon.uz/docs/lua/http",
            "functions": [
                {
                    "name": "http.get",
                    "signature": "http.get(url, callback)",
                    "description": "Starts a GET request on a worker thread. The callback runs later on the render thread.",
                    "permission": "network",
                    "args": [
                        {
                            "name": "url",
                            "type": "string",
                            "description": "Must start with `https://adolfjon.uz/`.",
                            "optional": false
                        },
                        {
                            "name": "callback",
                            "type": "function(ok, body)",
                            "description": "ok is false when the connection failed. The HTTP status is not passed, so check the body.",
                            "optional": false
                        }
                    ],
                    "returns": [
                        {
                            "type": "boolean",
                            "description": "false when not allowed or 4 requests are already running."
                        }
                    ],
                    "notes": [
                        "Replies are cut at about 512 KB."
                    ],
                    "example": "http.get(\"https://adolfjon.uz/storage/uploads/white.png\", function(ok, body)\n    if ok then logo = draw.load_image_data(body) end\nend)"
                }
            ],
            "tables": []
        },
        "clipboard": {
            "title": "clipboard",
            "group": "Storage and web",
            "summary": "Copy and paste text.",
            "url": "https://dev.adolfjon.uz/docs/lua/clipboard",
            "functions": [
                {
                    "name": "clipboard.get",
                    "signature": "clipboard.get()",
                    "description": "The clipboard text.",
                    "returns": [
                        {
                            "type": "string",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "clipboard.set",
                    "signature": "clipboard.set(text)",
                    "description": "Copies text.",
                    "example": "if menu.button(\"Copy stats\") then clipboard.set(json.encode(stats)) end"
                }
            ],
            "tables": []
        },
        "events": {
            "title": "events",
            "group": "Helpers",
            "summary": "Subscribe to game events with any number of handlers.",
            "url": "https://dev.adolfjon.uz/docs/lua/events",
            "functions": [
                {
                    "name": "events.on",
                    "signature": "events.on(name, handler)",
                    "description": "Adds a handler. Several handlers for one event all run, in the order added.",
                    "args": [
                        {
                            "name": "name",
                            "type": "string",
                            "description": "Event name, for example `player_hurt`.",
                            "optional": false
                        },
                        {
                            "name": "handler",
                            "type": "function(e)",
                            "description": "Gets the event table.",
                            "optional": false
                        }
                    ],
                    "example": "events.on(\"bomb_planted\", function(e) notify.push(\"Planted \" .. e.site) end)"
                },
                {
                    "name": "events.off",
                    "signature": "events.off(name)",
                    "description": "Removes all handlers of that event."
                }
            ],
            "tables": []
        },
        "math": {
            "title": "math extras",
            "group": "Helpers",
            "summary": "Additions to the standard math library.",
            "url": "https://dev.adolfjon.uz/docs/lua/math",
            "functions": [
                {
                    "name": "math.clamp",
                    "signature": "math.clamp(v, min, max)",
                    "description": "Keeps v inside min to max.",
                    "returns": [
                        {
                            "type": "number",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "math.lerp",
                    "signature": "math.lerp(a, b, t)",
                    "description": "a + (b - a) * t.",
                    "returns": [
                        {
                            "type": "number",
                            "description": ""
                        }
                    ],
                    "example": "shown = math.lerp(shown, target, 1 - math.exp(-12 * globals.frametime()))"
                },
                {
                    "name": "math.round",
                    "signature": "math.round(v)",
                    "description": "Nearest whole number (halves go up).",
                    "returns": [
                        {
                            "type": "integer",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "math.distance",
                    "signature": "math.distance(a, b)",
                    "description": "Distance between two vectors.",
                    "returns": [
                        {
                            "type": "number",
                            "description": "Game units."
                        }
                    ]
                },
                {
                    "name": "math.angle_to",
                    "signature": "math.angle_to(from, to)",
                    "description": "View angles that look from one point at another, in degrees (negative pitch is up, the game's own convention).",
                    "returns": [
                        {
                            "type": "number",
                            "description": "pitch"
                        },
                        {
                            "type": "number",
                            "description": "yaw"
                        }
                    ]
                }
            ],
            "tables": []
        },
        "vec": {
            "title": "vec",
            "group": "Helpers",
            "summary": "Small helpers for `{x, y, z}` vectors.",
            "url": "https://dev.adolfjon.uz/docs/lua/vec",
            "functions": [
                {
                    "name": "vec.new",
                    "signature": "vec.new([x][, y][, z])",
                    "description": "A new vector. Missing parts are 0.",
                    "returns": [
                        {
                            "type": "vector",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "vec.add",
                    "signature": "vec.add(a, b)",
                    "description": "a + b.",
                    "returns": [
                        {
                            "type": "vector",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "vec.sub",
                    "signature": "vec.sub(a, b)",
                    "description": "a - b.",
                    "returns": [
                        {
                            "type": "vector",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "vec.scale",
                    "signature": "vec.scale(a, s)",
                    "description": "a * s.",
                    "returns": [
                        {
                            "type": "vector",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "vec.dot",
                    "signature": "vec.dot(a, b)",
                    "description": "Dot product.",
                    "returns": [
                        {
                            "type": "number",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "vec.length",
                    "signature": "vec.length(a)",
                    "description": "Length.",
                    "returns": [
                        {
                            "type": "number",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "vec.distance",
                    "signature": "vec.distance(a, b)",
                    "description": "Distance.",
                    "returns": [
                        {
                            "type": "number",
                            "description": ""
                        }
                    ]
                },
                {
                    "name": "vec.normalize",
                    "signature": "vec.normalize(a)",
                    "description": "Same direction, length 1. A zero vector stays zero.",
                    "returns": [
                        {
                            "type": "vector",
                            "description": ""
                        }
                    ]
                }
            ],
            "tables": []
        },
        "bit": {
            "title": "bit",
            "group": "Helpers",
            "summary": "Bit operations on whole numbers, for scripts written for older Lua.",
            "url": "https://dev.adolfjon.uz/docs/lua/bit",
            "functions": [
                {
                    "name": "bit.band",
                    "signature": "bit.band(a, b)",
                    "description": "a & b."
                },
                {
                    "name": "bit.bor",
                    "signature": "bit.bor(a, b)",
                    "description": "a | b."
                },
                {
                    "name": "bit.bxor",
                    "signature": "bit.bxor(a, b)",
                    "description": "a ~ b."
                },
                {
                    "name": "bit.bnot",
                    "signature": "bit.bnot(a)",
                    "description": "~a."
                },
                {
                    "name": "bit.lshift",
                    "signature": "bit.lshift(a, n)",
                    "description": "a << n."
                },
                {
                    "name": "bit.rshift",
                    "signature": "bit.rshift(a, n)",
                    "description": "a >> n."
                }
            ],
            "tables": []
        }
    },
    "settings": {
        "aim": [
            {
                "key": "rcs",
                "type": "bool",
                "default": "false",
                "label": "Recoil Control",
                "help": "Automatically reduces weapon recoil."
            },
            {
                "key": "aimCatEnabled",
                "type": "array of bool[5]",
                "default": "[true, true, true, true, true]",
                "label": "Enabled for this class"
            },
            {
                "key": "aimCatUseGlobal",
                "type": "array of bool[5]",
                "default": "[true, true, true, true, true]",
                "label": "Use global settings"
            },
            {
                "key": "aimCatFov",
                "type": "array of number[5]",
                "default": "[5., 3., 6., 6., 8.]",
                "label": "FOV Radius"
            },
            {
                "key": "aimCatSmoothing",
                "type": "array of number[5]",
                "default": "[1.5, 1., 1.5, 1.5, 2.]",
                "label": "Smoothing (1=fast, 5=slow)"
            },
            {
                "key": "aimCatBone",
                "type": "array of int[5]",
                "default": "[0, 0, 0, 0, 0]"
            },
            {
                "key": "aimCatInstant",
                "type": "array of bool[5]",
                "default": "[true, true, true, true, true]",
                "label": "Instant hard lock"
            },
            {
                "key": "aimCatTargetMode",
                "type": "array of int[5]",
                "default": "[1, 1, 1, 1, 1]",
                "label": "Target Selection"
            },
            {
                "key": "aimCatMultiPoint",
                "type": "array of bool[5]",
                "default": "[false, false, false, false, false]",
                "label": "Multipoint",
                "help": "Five candidate points on the hitbox instead of one bone origin. It shortens the snap; on a target in the open the centre point still wins almost every time."
            },
            {
                "key": "aimCatMpScale",
                "type": "array of number[5]",
                "default": "[0.7, 0.7, 0.7, 0.7, 0.7]",
                "label": "Point Spread"
            },
            {
                "key": "aimCatKillDelay",
                "type": "array of number[5]",
                "default": "[0., 0., 0., 0., 0.]",
                "label": "Kill Delay",
                "help": "How long after the engaged target dies before the aim will touch anything else. Zero means no wait: the view is already on the next man before the first has finished falling over, which is the most legible thing an aimbot does on a demo."
            },
            {
                "key": "rcsUnknownWeapons",
                "type": "bool",
                "default": "false",
                "label": "Unlisted weapons"
            },
            {
                "key": "rcsGlobalX",
                "type": "number",
                "default": "100.",
                "label": "Vertical strength"
            },
            {
                "key": "rcsGlobalY",
                "type": "number",
                "default": "100.",
                "label": "Horizontal strength"
            },
            {
                "key": "rcsGlobalStart",
                "type": "int",
                "default": "2"
            },
            {
                "key": "rcsGlobalSmooth",
                "type": "number",
                "default": "1.",
                "label": "Smoothing"
            },
            {
                "key": "rcsCatEnabled",
                "type": "array of bool[5]",
                "default": "[true, true, true, true, true]",
                "label": "Enabled for this class"
            },
            {
                "key": "rcsCatUseGlobal",
                "type": "array of bool[5]",
                "default": "[true, true, true, true, true]",
                "label": "Use global settings"
            },
            {
                "key": "rcsStrengthX",
                "type": "array of number[5]",
                "default": "[100., 100., 100., 100., 100.]",
                "label": "Vertical strength"
            },
            {
                "key": "rcsStrengthY",
                "type": "array of number[5]",
                "default": "[100., 100., 100., 100., 100.]",
                "label": "Horizontal strength"
            },
            {
                "key": "rcsStartShot",
                "type": "array of int[5]",
                "default": "[2, 1, 2, 2, 1]"
            },
            {
                "key": "rcsSmooth",
                "type": "array of number[5]",
                "default": "[1., 1., 1., 1., 1.]",
                "label": "Smoothing"
            },
            {
                "key": "fov",
                "type": "number",
                "default": "4.0",
                "label": "FOV Radius"
            },
            {
                "key": "bone",
                "type": "int",
                "default": "0"
            },
            {
                "key": "sens",
                "type": "number",
                "default": "2.0",
                "label": "Sensitivity"
            },
            {
                "key": "sensAuto",
                "type": "bool",
                "default": "true",
                "label": "Read Sens From Game",
                "help": "Reads your sensitivity from the game. A wrong manual value throws the aim off by the same ratio."
            },
            {
                "key": "state",
                "type": "bool",
                "default": "false",
                "label": "Aimbot On/Off",
                "help": "Master switch for aimbot."
            },
            {
                "key": "bones",
                "type": "array of array",
                "default": "[\"Head\", \"Neck\", \"Chest\", \"Crotch\"]",
                "label": "Target Bone"
            },
            {
                "key": "hotAim",
                "type": "int",
                "default": "VK_XBUTTON2"
            },
            {
                "key": "hotKey",
                "type": "array of array",
                "default": "[\"Mouse 5\", \"SHIFT\", \"ALT\", \"CTRL\", \"Left mouse\", \"Right ..."
            },
            {
                "key": "trigger",
                "type": "bool",
                "default": "false",
                "label": "Trigger Bot",
                "help": "Automatically fires when crosshair is over an enemy."
            },
            {
                "key": "triggerSpreadCheck",
                "type": "bool",
                "default": "false",
                "label": "Spread Limit",
                "help": "Block shot if spread is too wide"
            },
            {
                "key": "triggerFlashCheck",
                "type": "bool",
                "default": "true",
                "label": "Hold fire while flashed",
                "help": "Block firing while you are flashed"
            },
            {
                "key": "triggerFlashBlindDuel",
                "type": "bool",
                "default": "false",
                "label": "Fire In A Blind Duel",
                "help": "Keeps firing while you are blind, but only when the target is blind for longer than you are."
            },
            {
                "key": "triggerTickAlign",
                "type": "bool",
                "default": "true",
                "label": "Fire On Tick",
                "help": "Fires on a server tick boundary and never twice on the same tick. The delay settings only mean anything with this on."
            },
            {
                "key": "knifeBot",
                "type": "bool",
                "default": "false",
                "label": "Knife Bot",
                "help": "Swings when your crosshair is already on an enemy inside knife range. Never moves your view."
            },
            {
                "key": "knifeBackstab",
                "type": "bool",
                "default": "true",
                "label": "Backstab",
                "help": "Uses the stab when you are in their back arc: 180 damage instead of 65."
            },
            {
                "key": "zeusBot",
                "type": "bool",
                "default": "false",
                "label": "Zeus Bot",
                "help": "Fires when an enemy is inside Zeus range. Will not dry-click an empty one."
            },
            {
                "key": "meleeHotkey",
                "type": "int",
                "default": "0",
                "label": "Hold Key",
                "help": "Leave unbound to stay armed whenever the weapon is out."
            },
            {
                "key": "revolverHelper",
                "type": "bool",
                "default": "false",
                "label": "Revolver Helper",
                "help": "Holds the button through the R8 hammer so the round leaves at the earliest tick the weapon allows. The R8 is not a normal pistol."
            },
            {
                "key": "triggerGlobalFirstDelay",
                "type": "number",
                "default": "15.",
                "label": "Wait before the first shot"
            },
            {
                "key": "triggerGlobalShotDelay",
                "type": "number",
                "default": "0.",
                "label": "Wait between shots"
            },
            {
                "key": "triggerGlobalAirBlock",
                "type": "bool",
                "default": "false",
                "label": "Hold fire while in the air",
                "help": "While jumping or falling. Global for every weapon."
            },
            {
                "key": "triggerGlobalSpreadMax",
                "type": "number",
                "default": "2.5",
                "label": "Stop firing above this spread"
            },
            {
                "key": "boneMap",
                "type": "object",
                "default": "[{\"Head\", 7}, {\"Neck\", 6}, {\"Chest\", 23}, {\"Crotch\", 1}]"
            },
            {
                "key": "aimMode",
                "type": "int",
                "default": "1",
                "label": "Target Selection"
            },
            {
                "key": "isHotAim",
                "type": "bool",
                "default": "true",
                "label": "Aim Hotkey",
                "help": "Aimbot only works while this key is held."
            },
            {
                "key": "smoothing",
                "type": "number",
                "default": "1.8",
                "label": "Smoothing (1=fast, 5=slow)"
            },
            {
                "key": "ssgApexJump",
                "type": "bool",
                "default": "false",
                "label": "SSG Apex Shot",
                "help": "Auto-shoot at jump apex with SSG-08"
            },
            {
                "key": "ssgApexThreshold",
                "type": "number",
                "default": "15.",
                "label": "Apex Threshold"
            },
            {
                "key": "hotKeyMap",
                "type": "object",
                "default": "[{\"Mouse 5\", VK_XBUTTON2}, {\"SHIFT\", VK_SHIFT}, {\"ALT\", V..."
            },
            {
                "key": "fovCircle",
                "type": "bool",
                "default": "false",
                "label": "FOV Circle",
                "help": "Shows the aimbot working area as a circle."
            },
            {
                "key": "boneSelect",
                "type": "int",
                "default": "0",
                "label": "Target Bone"
            },
            {
                "key": "hotTrigger",
                "type": "int",
                "default": "VK_XBUTTON2"
            },
            {
                "key": "playerLock",
                "type": "bool",
                "default": "false",
                "label": "Sticky Target",
                "help": "Stays on the first acquired target until it dies or leaves the FOV."
            },
            {
                "key": "lockMode",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "aimInstant",
                "type": "bool",
                "default": "true"
            },
            {
                "key": "aimInstantDelay",
                "type": "number",
                "default": "0.",
                "label": "Snap Delay (ms)",
                "help": "0 snaps the instant the key goes down. Higher values read as human reaction time."
            },
            {
                "key": "aimInstantHoldLock",
                "type": "bool",
                "default": "true",
                "label": "Hold Lock",
                "help": "Keeps the first target for the whole key press instead of switching mid-burst."
            },
            {
                "key": "aimModeMap",
                "type": "object",
                "default": "[{\"Closest to Player\", 0}, {\"Closest to Crosshair\", 1}, {..."
            },
            {
                "key": "checkSpotter",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "hotSelectAim",
                "type": "int",
                "default": "0"
            },
            {
                "key": "isHotTrigger",
                "type": "bool",
                "default": "false",
                "label": "Only while holding a key",
                "help": "Trigger bot only works while this key is held."
            },
            {
                "key": "perShotDelay",
                "type": "number",
                "default": "0."
            },
            {
                "key": "firstShotDelay",
                "type": "number",
                "default": "0."
            },
            {
                "key": "triggerRandomDelay",
                "type": "bool",
                "default": "true",
                "label": "Random Delay",
                "help": "Vary delay between shots"
            },
            {
                "key": "triggerRandomMin",
                "type": "number",
                "default": "5.",
                "label": "Min"
            },
            {
                "key": "triggerRandomMax",
                "type": "number",
                "default": "11.",
                "label": "Max"
            },
            {
                "key": "triggerHitzoneEnabled",
                "type": "bool",
                "default": "false",
                "label": "Only fire at chosen body parts",
                "help": "Only fire when the crosshair is on the selected body parts."
            },
            {
                "key": "triggerZoneHeadNeck",
                "type": "bool",
                "default": "true",
                "label": "Head + Neck",
                "help": "Head (8) and neck (7) bones."
            },
            {
                "key": "triggerZoneBody",
                "type": "bool",
                "default": "true",
                "label": "Body (spine + arms)",
                "help": "Spine, shoulders, elbows and wrists."
            },
            {
                "key": "triggerZoneLower",
                "type": "bool",
                "default": "false",
                "label": "Lower (legs + feet)",
                "help": "Leg joints, knees and feet."
            },
            {
                "key": "hotSelectTrigger",
                "type": "int",
                "default": "0"
            },
            {
                "key": "aimRandomOffset",
                "type": "number",
                "default": "2.0"
            },
            {
                "key": "reactionDelay",
                "type": "number",
                "default": "40."
            },
            {
                "key": "triggerReactionMs",
                "type": "number",
                "default": "0.",
                "label": "Reaction Time",
                "help": "Charged only when the crosshair lands on somebody it was not last on. Swinging back onto a man you were already shooting costs nothing — noticing him twice is not a reaction, it is a second trigger delay."
            },
            {
                "key": "triggerBlockNoScope",
                "type": "bool",
                "default": "false",
                "label": "Only fire while scoped in",
                "help": "Blocks the shot while the zoom is down. Only weapons with a scope are affected."
            },
            {
                "key": "aimSmoothTicksOn",
                "type": "bool",
                "default": "false",
                "label": "Smooth In Ticks",
                "help": "A tick is the unit the game has, so one value behaves the same on any machine: four ticks is 62ms at 64 tickrate and 31ms at 128, and both look the same."
            },
            {
                "key": "aimSmoothTicks",
                "type": "number",
                "default": "4.",
                "label": "Ticks"
            },
            {
                "key": "aimMultiPoint",
                "type": "bool",
                "default": "false",
                "label": "Multipoint",
                "help": "Five candidate points on the hitbox instead of one bone origin. It shortens the snap; on a target in the open the centre point still wins almost every time."
            },
            {
                "key": "aimMultiPointScale",
                "type": "number",
                "default": "0.7",
                "label": "Point Spread"
            },
            {
                "key": "aimKillDelay",
                "type": "number",
                "default": "0.",
                "label": "Kill Delay",
                "help": "How long after the engaged target dies before the aim will touch anything else. Zero means no wait: the view is already on the next man before the first has finished falling over, which is the most legible thing an aimbot does on a demo."
            },
            {
                "key": "semiRage",
                "type": "bool",
                "default": "false",
                "label": "Semi-Rage",
                "help": "A triggerbot reads the game's own \"is this visible\" answer, so it can only fire at something already in the open and already centred. This knows who the aimbot picked before the view gets there, which is what gives the scope and the stop somewhere to happen."
            },
            {
                "key": "semiAutoFire",
                "type": "bool",
                "default": "true",
                "label": "Auto Fire",
                "help": "Presses on the tick the hit chance clears the threshold. With it off everything else still runs — scope, stop, delays — and the trigger stays yours."
            },
            {
                "key": "semiEarlyStop",
                "type": "bool",
                "default": "true",
                "label": "Early Stop",
                "help": "No shot leaves while you are moving faster than the threshold — that part is a guarantee. The opposite key is pressed to help: the game cancels both and friction does the stopping. It is not a true counter-strafe, so let go of the key yourself to stop fastest."
            },
            {
                "key": "semiEarlyStopSpeed",
                "type": "number",
                "default": "45.",
                "label": "Stop Speed"
            },
            {
                "key": "semiAutoScope",
                "type": "bool",
                "default": "true",
                "label": "Auto Scope",
                "help": "Up first, before the stop and before the shot, because the zoom transition costs its own tenth of a second and doing it last wastes exactly that. Weapons with no scope skip it."
            },
            {
                "key": "semiReactionMs",
                "type": "number",
                "default": "120.",
                "label": "Reaction Time",
                "help": "Charged from the moment the target is acquired, not after the view lands. A human starts turning and starts deciding at the same moment; they do not finish the turn and then think about it."
            },
            {
                "key": "semiFirstShotMs",
                "type": "number",
                "default": "0.",
                "label": "First Shot Delay",
                "help": "Measured from the moment the shot became AVAILABLE — view arrived, feet stopped, hit chance cleared — not from when the man was first seen. Reaction time is the other number and it is charged during the travel."
            },
            {
                "key": "semiMinHitchance",
                "type": "number",
                "default": "65.",
                "label": "Minimum Hit Chance",
                "help": "While the view is still travelling the chance is low on its own, so this is also what holds the shot until the aim has arrived."
            },
            {
                "key": "semiMinDamage",
                "type": "number",
                "default": "20."
            },
            {
                "key": "aimGunProfiles",
                "type": "object/array"
            },
            {
                "key": "trigGunProfiles",
                "type": "object"
            },
            {
                "key": "profileFollowWeapon",
                "type": "bool",
                "default": "true",
                "label": "Follow the gun in hand",
                "help": "While the menu is open, swapping weapons moves the picker to the gun in hand. On weapon change only, so a gun you picked by hand stays put."
            }
        ],
        "esp": [
            {
                "key": "state",
                "type": "bool",
                "default": "true",
                "label": "ESP On/Off",
                "help": "Master switch for ESP. Disabling hides everything on screen."
            },
            {
                "key": "espHotkey",
                "type": "int",
                "default": "0",
                "label": "ESP Hotkey",
                "help": "Quickly toggle ESP on/off with a key"
            },
            {
                "key": "espHotkeyMode",
                "type": "int",
                "default": "0"
            },
            {
                "key": "checkSpotted",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "checkSpottedByUsOnly",
                "type": "bool",
                "default": "true"
            },
            {
                "key": "boundBox",
                "type": "bool",
                "default": "true",
                "label": "Bounding Box",
                "help": "Draws a rectangle around each enemy."
            },
            {
                "key": "boxStyle",
                "type": "int",
                "default": "2",
                "label": "Box Style"
            },
            {
                "key": "boxSpottedCheck",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "boxFill",
                "type": "bool",
                "default": "false",
                "label": "Box Fill",
                "help": "Fills the box with colour."
            },
            {
                "key": "boxGlow",
                "type": "bool",
                "default": "true",
                "label": "Glow"
            },
            {
                "key": "boxShadow",
                "type": "bool",
                "default": "true",
                "label": "Shadow"
            },
            {
                "key": "visibleColor",
                "type": "color",
                "default": "[0.00, 0.85, 1.00, 1.00]",
                "label": "Visible Box"
            },
            {
                "key": "hiddenColor",
                "type": "color",
                "default": "[1.00, 0.30, 0.30, 0.80]",
                "label": "Hidden Box"
            },
            {
                "key": "gradientColor1",
                "type": "color",
                "default": "[0.96, 0.68, 0.16, 1.00]",
                "label": "Corner Lines"
            },
            {
                "key": "gradientColor2",
                "type": "color",
                "default": "[1.00, 0.20, 0.60, 1.00]",
                "label": "Corner Gradient"
            },
            {
                "key": "animSpeed",
                "type": "number",
                "default": "2.0",
                "label": "Animation Speed"
            },
            {
                "key": "animSegments",
                "type": "int",
                "default": "16",
                "label": "Segments"
            },
            {
                "key": "cornerRatio",
                "type": "number",
                "default": "0.35",
                "label": "Corner Ratio"
            },
            {
                "key": "boxRounding",
                "type": "number",
                "default": "9.0",
                "label": "Corner Radius"
            },
            {
                "key": "dotRadius",
                "type": "number",
                "default": "3.2",
                "label": "Dot Size"
            },
            {
                "key": "outlineColor",
                "type": "color",
                "default": "[0.00, 0.00, 0.00, 0.75]",
                "label": "Outline"
            },
            {
                "key": "filledBox",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "gradient",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "boundBoxThickness",
                "type": "number",
                "default": "1.5",
                "label": "Line Width"
            },
            {
                "key": "width",
                "type": "number",
                "default": "2.5"
            },
            {
                "key": "spottedColours",
                "type": "color",
                "default": "[0.05, 0.09, 0.16, 0.16]"
            },
            {
                "key": "notSpottedColours",
                "type": "color",
                "default": "[0.00, 0.75, 1.00, 0.22]"
            },
            {
                "key": "cornerColours",
                "type": "color",
                "default": "[0.96, 0.98, 1.00, 1.00]"
            },
            {
                "key": "cornerGradient",
                "type": "color",
                "default": "[1.00, 0.00, 0.00, 1.00]"
            },
            {
                "key": "isPawnName",
                "type": "bool",
                "default": "true",
                "label": "Name",
                "help": "Shows the enemy name above their model."
            },
            {
                "key": "pawnName",
                "type": "string"
            },
            {
                "key": "isPawnGun",
                "type": "bool",
                "default": "true",
                "label": "Weapon + ammo",
                "help": "The weapon glyph and the ammo counter move together"
            },
            {
                "key": "pawnGun",
                "type": "string"
            },
            {
                "key": "pixelESP",
                "type": "bool",
                "default": "false",
                "label": "Pixel ESP",
                "help": "Shows enemies as single pixels (stealth mode)"
            },
            {
                "key": "pixelSpottedColor",
                "type": "color",
                "default": "[0.3, 0.35, 0.32, 1.]",
                "label": "Pixel Visible"
            },
            {
                "key": "pixelNotSpottedColor",
                "type": "color",
                "default": "[0.28, 0.30, 0.32, 1.]",
                "label": "Pixel Hidden"
            },
            {
                "key": "pixelSize",
                "type": "number",
                "default": "3.",
                "label": "Pixel Size"
            },
            {
                "key": "isHealthBar",
                "type": "bool",
                "default": "true",
                "label": "Health",
                "help": "The bar and the HP number are one group. Vertical on a side anchor, horizontal on a top or bottom one"
            },
            {
                "key": "hpCounter",
                "type": "bool",
                "default": "true",
                "label": "HP Number",
                "help": "Shows exact HP value next to the health bar."
            },
            {
                "key": "hpGhost",
                "type": "bool",
                "default": "true",
                "label": "Damage Trail"
            },
            {
                "key": "hitFlash",
                "type": "bool",
                "default": "true",
                "label": "Hit Flash"
            },
            {
                "key": "fadeIn",
                "type": "bool",
                "default": "true",
                "label": "Fade In"
            },
            {
                "key": "lastSeen",
                "type": "bool",
                "default": "true",
                "label": "Last Seen",
                "help": "When an enemy drops out of the ESP, a faint box and timer stay where you last saw them."
            },
            {
                "key": "lastSeenTime",
                "type": "number",
                "default": "3.",
                "label": "Hold Time"
            },
            {
                "key": "footTrail",
                "type": "bool",
                "default": "false",
                "label": "Footstep Trail",
                "help": "Fading footprints on the floor behind each enemy show where they came from."
            },
            {
                "key": "healthBarStyle",
                "type": "int",
                "default": "0",
                "label": "Bar Style"
            },
            {
                "key": "healthBarPosition",
                "type": "int",
                "default": "0"
            },
            {
                "key": "healthBarStaticColor",
                "type": "bool",
                "default": "false",
                "label": "Static Colour"
            },
            {
                "key": "healthBarWidth",
                "type": "number",
                "default": "1.5",
                "label": "Bar Width"
            },
            {
                "key": "health",
                "type": "color",
                "default": "[0.00, 0.82, 1.00, 1.00]",
                "label": "Health"
            },
            {
                "key": "attributeColours",
                "type": "color",
                "default": "[0.78, 0.84, 0.92, 1.00]"
            },
            {
                "key": "skeleton",
                "type": "bool",
                "default": "true",
                "label": "Skeleton",
                "help": "Draws the enemy bone structure."
            },
            {
                "key": "skeletonColours",
                "type": "color",
                "default": "[0.90, 0.96, 1.00, 1.00]",
                "label": "Skeleton"
            },
            {
                "key": "skeletonThickness",
                "type": "number",
                "default": "1.0",
                "label": "Bone Thickness"
            },
            {
                "key": "skeletonStyle",
                "type": "int",
                "default": "2",
                "label": "Skeleton Style"
            },
            {
                "key": "skeletonGlow",
                "type": "number",
                "default": "0.55",
                "label": "Glow"
            },
            {
                "key": "skeletonGlowColours",
                "type": "color",
                "default": "[0.30, 0.72, 1.00, 0.80]",
                "label": "Glow Colour"
            },
            {
                "key": "chams",
                "type": "bool",
                "default": "false",
                "label": "Chams On/Off",
                "help": "Paints players. Works even with ESP turned off."
            },
            {
                "key": "chamsModel",
                "type": "object"
            },
            {
                "key": "chamsHealthColor",
                "type": "bool",
                "default": "false",
                "label": "Health Colour",
                "help": "Chams colour follows the enemy health: green full, yellow half, red low. Opacity still comes from your colours."
            },
            {
                "key": "chamsScale",
                "type": "number",
                "default": "1.0",
                "label": "Body Size"
            },
            {
                "key": "chamsVisibleColor",
                "type": "color",
                "default": "[0.98, 0.24, 0.22, 0.96]",
                "label": "Visible"
            },
            {
                "key": "chamsHiddenColor",
                "type": "color",
                "default": "[0.20, 0.55, 1.00, 0.55]",
                "label": "Hidden"
            },
            {
                "key": "chamsOutline",
                "type": "bool",
                "default": "false",
                "label": "Outline",
                "help": "Adds a thin edge around the silhouette."
            },
            {
                "key": "chamsStyle",
                "type": "object"
            },
            {
                "key": "chamsHiddenStyle",
                "type": "int",
                "default": "0"
            },
            {
                "key": "chamsVisibleKnob",
                "type": "number",
                "default": "0.35",
                "label": "Roughness"
            },
            {
                "key": "chamsHiddenKnob",
                "type": "number",
                "default": "0.35",
                "label": "Hidden Roughness"
            },
            {
                "key": "chamsVisibleAccent",
                "type": "color",
                "default": "[1.00, 0.82, 0.22, 1.00]",
                "label": "Visible Accent"
            },
            {
                "key": "chamsHiddenAccent",
                "type": "color",
                "default": "[0.95, 0.35, 1.00, 1.00]",
                "label": "Hidden Accent"
            },
            {
                "key": "chamsWeapon",
                "type": "bool",
                "default": "true",
                "label": "Weapon Chams",
                "help": "Also paints the gun in the enemy's hands."
            },
            {
                "key": "previewLook",
                "type": "int",
                "default": "0",
                "label": "Agent Look"
            },
            {
                "key": "previewWeapon",
                "type": "int",
                "default": "0",
                "label": "Weapon In Hand"
            },
            {
                "key": "previewEvery",
                "type": "number",
                "default": "60.",
                "label": "Change Every"
            },
            {
                "key": "chamsPvWeapon",
                "type": "int",
                "default": "0",
                "label": "Weapon In Hand"
            },
            {
                "key": "chamsPvEvery",
                "type": "number",
                "default": "60.",
                "label": "Change Every"
            },
            {
                "key": "chamsPvWall",
                "type": "int",
                "default": "1",
                "label": "Wall"
            },
            {
                "key": "chamsPvSpin",
                "type": "bool",
                "default": "false",
                "label": "Turntable"
            },
            {
                "key": "dropChams",
                "type": "bool",
                "default": "false",
                "label": "Dropped Chams On/Off",
                "help": "Paints guns lying on the ground."
            },
            {
                "key": "dropStyle",
                "type": "int",
                "default": "3"
            },
            {
                "key": "dropHiddenStyle",
                "type": "int",
                "default": "19"
            },
            {
                "key": "dropVisibleKnob",
                "type": "number",
                "default": "0.35",
                "label": "Roughness"
            },
            {
                "key": "dropHiddenKnob",
                "type": "number",
                "default": "0.35",
                "label": "Hidden Roughness"
            },
            {
                "key": "dropVisibleSpeed",
                "type": "number",
                "default": "1.0",
                "label": "Animation Speed"
            },
            {
                "key": "dropHiddenSpeed",
                "type": "number",
                "default": "1.0",
                "label": "Hidden Animation Speed"
            },
            {
                "key": "dropVisibleScale",
                "type": "number",
                "default": "1.0",
                "label": "Pattern Scale"
            },
            {
                "key": "dropHiddenScale",
                "type": "number",
                "default": "1.0",
                "label": "Hidden Pattern Scale"
            },
            {
                "key": "dropVisiblePulse",
                "type": "number",
                "default": "0.0",
                "label": "Pulse"
            },
            {
                "key": "dropHiddenPulse",
                "type": "number",
                "default": "0.0",
                "label": "Hidden Pulse"
            },
            {
                "key": "dropVisibleBright",
                "type": "number",
                "default": "1.0",
                "label": "Brightness"
            },
            {
                "key": "dropHiddenBright",
                "type": "number",
                "default": "1.0",
                "label": "Hidden Brightness"
            },
            {
                "key": "dropDistance",
                "type": "number",
                "default": "60.",
                "label": "Max Distance"
            },
            {
                "key": "dropRifles",
                "type": "bool",
                "default": "true",
                "label": "Rifles"
            },
            {
                "key": "dropSnipers",
                "type": "bool",
                "default": "true",
                "label": "Snipers"
            },
            {
                "key": "dropSmgs",
                "type": "bool",
                "default": "true",
                "label": "SMGs"
            },
            {
                "key": "dropPistols",
                "type": "bool",
                "default": "false",
                "label": "Pistols"
            },
            {
                "key": "dropHeavy",
                "type": "bool",
                "default": "true",
                "label": "Heavy"
            },
            {
                "key": "dropGrenades",
                "type": "bool",
                "default": "true",
                "label": "Grenades"
            },
            {
                "key": "dropC4",
                "type": "bool",
                "default": "true",
                "label": "C4"
            },
            {
                "key": "dropKit",
                "type": "bool",
                "default": "true",
                "label": "Defuse Kit"
            },
            {
                "key": "dropPvGun",
                "type": "int",
                "default": "0",
                "label": "Weapon"
            },
            {
                "key": "dropPvWall",
                "type": "int",
                "default": "0",
                "label": "Wall"
            },
            {
                "key": "dropPvSpin",
                "type": "bool",
                "default": "true",
                "label": "Turntable"
            },
            {
                "key": "localChams",
                "type": "bool",
                "default": "false",
                "label": "Local Chams On/Off",
                "help": "Paints your own first-person hands and gun."
            },
            {
                "key": "localArms",
                "type": "bool",
                "default": "true",
                "label": "Arms",
                "help": "Paints hands, gloves and sleeves."
            },
            {
                "key": "localWeapon",
                "type": "bool",
                "default": "true",
                "label": "Weapon",
                "help": "Paints the gun in your hands."
            },
            {
                "key": "localArmsStyle",
                "type": "int",
                "default": "2"
            },
            {
                "key": "localWeaponStyle",
                "type": "int",
                "default": "3"
            },
            {
                "key": "localArmsKnob",
                "type": "number",
                "default": "0.35",
                "label": "Roughness"
            },
            {
                "key": "localArmsSpeed",
                "type": "number",
                "default": "1.0",
                "label": "Animation Speed"
            },
            {
                "key": "localArmsScale",
                "type": "number",
                "default": "1.0",
                "label": "Pattern Scale"
            },
            {
                "key": "localArmsPulse",
                "type": "number",
                "default": "0.0",
                "label": "Pulse"
            },
            {
                "key": "localArmsBright",
                "type": "number",
                "default": "1.0",
                "label": "Brightness"
            },
            {
                "key": "localWeaponKnob",
                "type": "number",
                "default": "0.35",
                "label": "Roughness"
            },
            {
                "key": "localWeaponSpeed",
                "type": "number",
                "default": "1.0",
                "label": "Animation Speed"
            },
            {
                "key": "localWeaponScale",
                "type": "number",
                "default": "1.0",
                "label": "Pattern Scale"
            },
            {
                "key": "localWeaponPulse",
                "type": "number",
                "default": "0.0",
                "label": "Pulse"
            },
            {
                "key": "localWeaponBright",
                "type": "number",
                "default": "1.0",
                "label": "Brightness"
            },
            {
                "key": "localArmsColor",
                "type": "color",
                "default": "[0.36, 0.78, 1.00, 0.55]",
                "label": "Colour"
            },
            {
                "key": "localWeaponColor",
                "type": "color",
                "default": "[0.97, 0.80, 0.43, 0.90]",
                "label": "Colour"
            },
            {
                "key": "localArmsAccent",
                "type": "color",
                "default": "[1.00, 1.00, 1.00, 1.00]",
                "label": "Accent"
            },
            {
                "key": "localWeaponAccent",
                "type": "color",
                "default": "[1.00, 0.82, 0.22, 1.00]",
                "label": "Accent"
            },
            {
                "key": "dropVisibleColor",
                "type": "color",
                "default": "[0.97, 0.80, 0.43, 0.96]",
                "label": "Visible"
            },
            {
                "key": "dropHiddenColor",
                "type": "color",
                "default": "[0.48, 0.36, 1.00, 0.60]",
                "label": "Hidden"
            },
            {
                "key": "dropVisibleAccent",
                "type": "color",
                "default": "[1.00, 1.00, 1.00, 1.00]",
                "label": "Visible Accent"
            },
            {
                "key": "dropHiddenAccent",
                "type": "color",
                "default": "[0.79, 0.72, 1.00, 1.00]",
                "label": "Hidden Accent"
            },
            {
                "key": "chamsVisibleSpeed",
                "type": "number",
                "default": "1.0",
                "label": "Animation Speed"
            },
            {
                "key": "chamsHiddenSpeed",
                "type": "number",
                "default": "1.0",
                "label": "Hidden Animation Speed"
            },
            {
                "key": "chamsVisibleScale",
                "type": "number",
                "default": "1.0",
                "label": "Pattern Scale"
            },
            {
                "key": "chamsHiddenScale",
                "type": "number",
                "default": "1.0",
                "label": "Hidden Pattern Scale"
            },
            {
                "key": "chamsVisiblePulse",
                "type": "number",
                "default": "0.0",
                "label": "Pulse"
            },
            {
                "key": "chamsHiddenPulse",
                "type": "number",
                "default": "0.0",
                "label": "Hidden Pulse"
            },
            {
                "key": "chamsVisibleBright",
                "type": "number",
                "default": "1.0",
                "label": "Brightness"
            },
            {
                "key": "chamsHiddenBright",
                "type": "number",
                "default": "1.0",
                "label": "Hidden Brightness"
            },
            {
                "key": "chamsOutlineColor",
                "type": "color",
                "default": "[0.00, 0.00, 0.00, 0.85]",
                "label": "Outline Colour"
            },
            {
                "key": "head",
                "type": "bool",
                "default": "false",
                "label": "Head Circle",
                "help": "Draws a small circle around the head."
            },
            {
                "key": "headColours",
                "type": "color",
                "default": "[0.00, 0.76, 1.00, 1.00]",
                "label": "Head Circle"
            },
            {
                "key": "joint",
                "type": "bool",
                "default": "false",
                "label": "Joints",
                "help": "Shows key joint positions like elbows and knees."
            },
            {
                "key": "jointColours",
                "type": "color",
                "default": "[0.56, 0.68, 0.78, 1.00]",
                "label": "Joints"
            },
            {
                "key": "snapLines",
                "type": "bool",
                "default": "false",
                "label": "Snap Lines",
                "help": "Draws a line from screen bottom to each enemy."
            },
            {
                "key": "snapLineStyle",
                "type": "int",
                "default": "0",
                "label": "Line Style"
            },
            {
                "key": "snapLineStart",
                "type": "int",
                "default": "0",
                "label": "Origin"
            },
            {
                "key": "snapLineThickness",
                "type": "number",
                "default": "0.5",
                "label": "Line Width"
            },
            {
                "key": "snapLineAnimSpeed",
                "type": "number",
                "default": "1.0",
                "label": "Animation speed"
            },
            {
                "key": "snapLineColor",
                "type": "color",
                "default": "[1.0, 1.0, 1.0, 0.8]",
                "label": "Line"
            },
            {
                "key": "snapLineColor2",
                "type": "color",
                "default": "[0.0, 0.8, 1.0, 0.6]",
                "label": "Secondary"
            },
            {
                "key": "snapLineVisibilityBased",
                "type": "bool",
                "default": "false",
                "label": "Colour by Visibility"
            },
            {
                "key": "snapLineVisibleColor",
                "type": "color",
                "default": "[0.0, 1.0, 0.5, 0.8]",
                "label": "Visible Box"
            },
            {
                "key": "snapLineHiddenColor",
                "type": "color",
                "default": "[1.0, 0.3, 0.3, 0.6]",
                "label": "Hidden Box"
            },
            {
                "key": "distance",
                "type": "bool",
                "default": "false",
                "label": "Distance",
                "help": "The range to the enemy. It moves on its own and stays at every distance"
            },
            {
                "key": "offscreenIndicators",
                "type": "bool",
                "default": "false",
                "label": "Offscreen",
                "help": "Shows direction to enemies outside the screen"
            },
            {
                "key": "offscreenStyle",
                "type": "int",
                "default": "0",
                "label": "Indicator Style"
            },
            {
                "key": "offscreenStyleV2",
                "type": "bool"
            },
            {
                "key": "offscreenRadius",
                "type": "number",
                "default": "165.0",
                "label": "Radius"
            },
            {
                "key": "offscreenSize",
                "type": "number",
                "default": "11.0",
                "label": "Size"
            },
            {
                "key": "offscreenThickness",
                "type": "number",
                "default": "2.0",
                "label": "Line Width"
            },
            {
                "key": "offscreenPulseSpeed",
                "type": "number",
                "default": "2.2",
                "label": "Pulse speed"
            },
            {
                "key": "offscreenVisibleColor",
                "type": "color",
                "default": "[0.0, 1.0, 0.0, 1.0]",
                "label": "Visible Box"
            },
            {
                "key": "offscreenHiddenColor",
                "type": "color",
                "default": "[1.0, 0.0, 0.0, 1.0]",
                "label": "Hidden Box"
            },
            {
                "key": "offscreenGlowColor",
                "type": "color",
                "default": "[1.0, 1.0, 1.0, 0.5]",
                "label": "Glow Colour"
            },
            {
                "key": "offscreenDistanceScale",
                "type": "bool",
                "default": "true",
                "label": "Scale With Distance"
            },
            {
                "key": "offscreenShowDistance",
                "type": "bool",
                "default": "false",
                "label": "Show Distance"
            },
            {
                "key": "offscreenGlow",
                "type": "bool",
                "default": "true",
                "label": "Glow"
            },
            {
                "key": "offscreenThreatLevel",
                "type": "bool",
                "default": "false",
                "label": "Threat Level"
            },
            {
                "key": "offscreenMinScale",
                "type": "number",
                "default": "0.5"
            },
            {
                "key": "offscreenMaxDistance",
                "type": "number",
                "default": "50.0"
            },
            {
                "key": "showStatusGroup",
                "type": "bool",
                "default": "true",
                "label": "Status group",
                "help": "Armor, defuse kit, SCOPED, reloading, money and the callout. Distance is its own group now"
            },
            {
                "key": "showScoped",
                "type": "bool",
                "default": "true",
                "label": "Scoped",
                "help": "Shows SCOPED text when enemy is scoped in."
            },
            {
                "key": "showReloading",
                "type": "bool",
                "default": "true",
                "label": "Reloading",
                "help": "Shows RELOADING text when enemy is reloading."
            },
            {
                "key": "showMoney",
                "type": "bool",
                "default": "true",
                "label": "Money"
            },
            {
                "key": "showArmor",
                "type": "bool",
                "default": "true",
                "label": "Armor"
            },
            {
                "key": "showDefuser",
                "type": "bool",
                "default": "true",
                "label": "Defuse Kit"
            },
            {
                "key": "showHostageCarrier",
                "type": "bool",
                "default": "true",
                "label": "Hostage carrier"
            },
            {
                "key": "showPlace",
                "type": "bool",
                "default": "false",
                "label": "Map Callout"
            },
            {
                "key": "showFlashed",
                "type": "bool",
                "default": "true",
                "label": "Flashed"
            },
            {
                "key": "showImmune",
                "type": "bool",
                "default": "true",
                "label": "Spawn Immunity"
            },
            {
                "key": "showBuyMenu",
                "type": "bool",
                "default": "true",
                "label": "Buy Menu Open"
            },
            {
                "key": "showLastKiller",
                "type": "bool",
                "default": "false",
                "label": "Last Killer"
            },
            {
                "key": "iconScale",
                "type": "number",
                "default": "1.2",
                "label": "Icon Scale"
            },
            {
                "key": "declutter",
                "type": "bool",
                "default": "true"
            },
            {
                "key": "declutterScale",
                "type": "number",
                "default": "1.0"
            },
            {
                "key": "calmColors",
                "type": "bool",
                "default": "true",
                "label": "Calm Colours",
                "help": "Saturated colour for state only: blind, scoped, reloading, the bomb. Money, callout and armor drop to plain ink - eleven colours at once say nothing."
            },
            {
                "key": "espTextScale",
                "type": "number",
                "default": "1.0",
                "label": "Text Size",
                "help": "Global multiplier on the distance falloff."
            },
            {
                "key": "layoutAnchor",
                "type": "object"
            },
            {
                "key": "layoutOrder",
                "type": "object"
            },
            {
                "key": "placementEditor",
                "type": "bool",
                "default": "true",
                "label": "Live Edit In Game",
                "help": "Drag groups right in the game while the menu is open."
            },
            {
                "key": "layoutV1",
                "type": "bool"
            },
            {
                "key": "showUtilities",
                "type": "bool",
                "default": "true",
                "label": "Grenades",
                "help": "The enemy's grenade row"
            },
            {
                "key": "showC4",
                "type": "bool",
                "default": "true",
                "label": "C4",
                "help": "The bomb badge. Visible at every range: whoever carries it decides where the round happens"
            },
            {
                "key": "viewDirection",
                "type": "bool",
                "default": "false",
                "label": "View Direction",
                "help": "Shows a line indicating which direction the enemy is looking."
            },
            {
                "key": "viewDirectionStyle",
                "type": "int",
                "default": "0",
                "label": "Style"
            },
            {
                "key": "viewDirectionLength",
                "type": "number",
                "default": "50.",
                "label": "Length"
            },
            {
                "key": "viewDirectionThickness",
                "type": "number",
                "default": "2.",
                "label": "Line Width"
            },
            {
                "key": "viewDirectionAnimSpeed",
                "type": "number",
                "default": "1.0",
                "label": "Animation speed"
            },
            {
                "key": "viewDirectionColours",
                "type": "color",
                "default": "[1.0, 1.0, 0.0, 0.8]",
                "label": "Direction"
            },
            {
                "key": "viewDirectionLookingAtMeColor",
                "type": "color",
                "default": "[1.0, 0.0, 0.0, 1.0]",
                "label": "Aimed At Me"
            },
            {
                "key": "viewDirectionShowLookingAtMe",
                "type": "bool",
                "default": "true",
                "label": "Highlight When Aimed At Me"
            },
            {
                "key": "viewDirectionConeAngle",
                "type": "number",
                "default": "15."
            }
        ],
        "misc": [
            {
                "key": "itemESP",
                "type": "bool",
                "default": "false",
                "label": "Dropped Weapons",
                "help": "Marks weapons, grenades and gear lying on the ground."
            },
            {
                "key": "itemESPDistance",
                "type": "number",
                "default": "40.0",
                "label": "Max Distance (m)"
            },
            {
                "key": "itemESPColor",
                "type": "color",
                "default": "[0.62, 0.74, 1., 1.]",
                "label": "Color"
            },
            {
                "key": "itemESPTextSize",
                "type": "number",
                "default": "12.",
                "label": "Text Size"
            },
            {
                "key": "itemESPGuns",
                "type": "bool",
                "default": "true",
                "label": "Firearms"
            },
            {
                "key": "itemESPGrenades",
                "type": "bool",
                "default": "true",
                "label": "Grenades"
            },
            {
                "key": "itemESPGear",
                "type": "bool",
                "default": "true",
                "label": "Gear"
            },
            {
                "key": "itemESPAmmo",
                "type": "bool",
                "default": "true",
                "label": "Ammo Count"
            },
            {
                "key": "bombTimer",
                "type": "bool",
                "default": "true",
                "label": "Bomb Timer",
                "help": "Shows time remaining until C4 explodes."
            },
            {
                "key": "spectator",
                "type": "bool",
                "default": "false",
                "label": "Spectator List",
                "help": "Shows who is currently spectating you."
            },
            {
                "key": "customCrosshair",
                "type": "bool",
                "default": "false",
                "label": "Crosshair",
                "help": "Draws a custom crosshair at screen center."
            },
            {
                "key": "crosshairMode",
                "type": "int",
                "default": "1"
            },
            {
                "key": "crosshairStyle",
                "type": "int",
                "default": "0"
            },
            {
                "key": "crosshairSize",
                "type": "number",
                "default": "6.0",
                "label": "Crosshair Size"
            },
            {
                "key": "crosshairThickness",
                "type": "number",
                "default": "1.5",
                "label": "Thickness"
            },
            {
                "key": "crosshairColor",
                "type": "color",
                "default": "[1., 1., 1., 1.]",
                "label": "Crosshair Color"
            },
            {
                "key": "crosshairGap",
                "type": "number",
                "default": "3.0",
                "label": "Crosshair Gap"
            },
            {
                "key": "fovChanger",
                "type": "bool",
                "default": "false",
                "label": "FOV Changer",
                "help": "Changes your field of view."
            },
            {
                "key": "customFov",
                "type": "number",
                "default": "90.",
                "label": "FOV Value"
            },
            {
                "key": "deathmatchMode",
                "type": "bool",
                "default": "false",
                "label": "Deathmatch Mode",
                "help": "Shows all players, not just enemies."
            },
            {
                "key": "bunnyhop",
                "type": "bool",
                "default": "false",
                "label": "Bunnyhop",
                "help": "Hold SPACE to auto-jump on ground contact, which keeps your speed."
            },
            {
                "key": "bunnyhopChance",
                "type": "int",
                "default": "100",
                "label": "Hit Chance"
            },
            {
                "key": "autoAccept",
                "type": "bool",
                "default": "false",
                "label": "Auto Accept",
                "help": "Accepts the match-found popup by itself. The delay is set below."
            },
            {
                "key": "voteRevealer",
                "type": "bool",
                "default": "true",
                "label": "Vote Revealer",
                "help": "When a vote starts, shows at the top of the screen whose vote it is (ours or the enemy), how many Yes, how many No and how many can vote. Who voted what is not visible."
            },
            {
                "key": "autoAcceptDelay",
                "type": "number",
                "default": "1.0",
                "label": "Delay",
                "help": "How long to wait after the button appears. The accept window is about 12 seconds, which is why 8 is the maximum."
            },
            {
                "key": "obsBypass",
                "type": "bool",
                "default": "true",
                "label": "OBS Bypass",
                "help": "Hides the menu from OBS and capture software."
            },
            {
                "key": "spectatorColours",
                "type": "color",
                "default": "[0.72, 0.7, 0.66, 1.]"
            },
            {
                "key": "bombTimerColours",
                "type": "color",
                "default": "[0.94, 0.92, 0.88, 1.]",
                "label": "Accent"
            },
            {
                "key": "bombTimerAlpha",
                "type": "number",
                "default": "0.88",
                "label": "Opacity"
            },
            {
                "key": "bombTimerSite",
                "type": "bool",
                "default": "true",
                "label": "Site Badge"
            },
            {
                "key": "bombTimerDefuse",
                "type": "bool",
                "default": "true",
                "label": "Defuse Tracker"
            },
            {
                "key": "bombTimerWorldIcon",
                "type": "bool",
                "default": "true",
                "label": "World C4 Icon"
            },
            {
                "key": "bombTimerDamage",
                "type": "bool",
                "default": "true",
                "label": "C4 Damage"
            },
            {
                "key": "bombTimerUseTheme",
                "type": "bool",
                "default": "true",
                "label": "Match Theme Accent"
            },
            {
                "key": "radarHack",
                "type": "bool",
                "default": "false",
                "label": "Radar Hack",
                "help": "Forces all enemies to appear on radar and minimap."
            },
            {
                "key": "radarEnabled",
                "type": "bool",
                "default": "false",
                "label": "Enable Radar",
                "help": "Master switch"
            },
            {
                "key": "radarTeammates",
                "type": "bool",
                "default": "false",
                "label": "Show Teammates",
                "help": "Display teammates on radar"
            },
            {
                "key": "radarShowWeapon",
                "type": "bool",
                "default": "true",
                "label": "Show Weapons",
                "help": "Weapon icon under player"
            },
            {
                "key": "radarShowHealth",
                "type": "bool",
                "default": "true",
                "label": "Show Health",
                "help": "Health bar under dot"
            },
            {
                "key": "radarShowC4",
                "type": "bool",
                "default": "true",
                "label": "C4 Carrier Icon",
                "help": "Bomb icon on T with C4"
            },
            {
                "key": "radarShowViewDir",
                "type": "bool",
                "default": "true",
                "label": "View Direction",
                "help": "Line showing look direction"
            },
            {
                "key": "radarShowHeight",
                "type": "bool",
                "default": "true"
            },
            {
                "key": "radarShowSounds",
                "type": "bool",
                "default": "true",
                "label": "Sound Events",
                "help": "Footsteps/shots on radar"
            },
            {
                "key": "radarShowBomb",
                "type": "bool",
                "default": "true",
                "label": "Bomb Position",
                "help": "Planted bomb on radar"
            },
            {
                "key": "radarShowNames",
                "type": "bool",
                "default": "false",
                "label": "Show Names",
                "help": "Player names above dot"
            },
            {
                "key": "radarShowDistance",
                "type": "bool",
                "default": "false",
                "label": "Show Distance",
                "help": "Distance in meters"
            },
            {
                "key": "radarShowDefuser",
                "type": "bool",
                "default": "true",
                "label": "Defuser Icon",
                "help": "Kit icon on CT defusers"
            },
            {
                "key": "radarShooterFlash",
                "type": "bool",
                "default": "true",
                "label": "Shooter Flash",
                "help": "Flash when player shoots"
            },
            {
                "key": "radarBombTimer",
                "type": "bool",
                "default": "true",
                "label": "Bomb Timer",
                "help": "Countdown until detonation"
            },
            {
                "key": "radarEnemyCol",
                "type": "color",
                "default": "[1., 0.2, 0.2, 1.]",
                "label": "Enemy"
            },
            {
                "key": "radarTeamCol",
                "type": "color",
                "default": "[0.2, 0.8, 1., 1.]",
                "label": "Team"
            },
            {
                "key": "radarSize",
                "type": "number",
                "default": "250."
            },
            {
                "key": "radarSizeX",
                "type": "number",
                "default": "250."
            },
            {
                "key": "radarSizeY",
                "type": "number",
                "default": "250."
            },
            {
                "key": "radarPlayerStyle",
                "type": "int",
                "default": "2",
                "label": "Player Style"
            },
            {
                "key": "radarPlayerSize",
                "type": "number",
                "default": "6.",
                "label": "Player Size"
            },
            {
                "key": "radarShape",
                "type": "int",
                "default": "0",
                "label": "Radar Shape"
            },
            {
                "key": "radarShowLobbyWidget",
                "type": "bool",
                "default": "false",
                "label": "Lobby Widget",
                "help": "Show widget when no map loaded"
            },
            {
                "key": "radarBgAlpha",
                "type": "number",
                "default": "1.0",
                "label": "BG Opacity"
            },
            {
                "key": "radarShowMap",
                "type": "bool",
                "default": "true",
                "label": "Show Map Image",
                "help": "Auto-loaded map background"
            },
            {
                "key": "radarFollowPlayer",
                "type": "bool",
                "default": "false",
                "label": "Follow Player",
                "help": "Radar rotates with player view"
            },
            {
                "key": "radarFollowZoom",
                "type": "number",
                "default": "2.5",
                "label": "Follow Zoom"
            },
            {
                "key": "radarMapAlpha",
                "type": "number",
                "default": "1.0",
                "label": "Map Opacity"
            },
            {
                "key": "radarBgCol",
                "type": "color",
                "default": "[0.05, 0.05, 0.07, 1.]",
                "label": "BG"
            },
            {
                "key": "radarPos",
                "type": "array[2]",
                "default": "[20., 20.]"
            },
            {
                "key": "radarKey",
                "type": "int",
                "default": "0",
                "label": "Radar Bind",
                "help": "Key to show or hide the radar"
            },
            {
                "key": "radarKeyMode",
                "type": "int",
                "default": "0"
            },
            {
                "key": "glowESP",
                "type": "bool",
                "default": "false",
                "label": "Glow ESP",
                "help": "Adds glow outline to enemies"
            },
            {
                "key": "glowColorVisible",
                "type": "color",
                "default": "[0.0, 1.0, 0.0, 1.0]",
                "label": "Visible Color"
            },
            {
                "key": "glowColorHidden",
                "type": "color",
                "default": "[1.0, 0.0, 0.0, 1.0]",
                "label": "Hidden Color"
            },
            {
                "key": "nightMode",
                "type": "bool",
                "default": "false",
                "label": "Screen Dimmer",
                "help": "Darkens the game view. Touches no game memory and shifts no ESP colours - the plate is drawn UNDER the ESP, so it works on every map."
            },
            {
                "key": "nightStrength",
                "type": "number",
                "default": "0.32",
                "label": "Darkness"
            },
            {
                "key": "nightTint",
                "type": "color",
                "default": "[0., 0., 0., 1.]",
                "label": "Night Tint"
            },
            {
                "key": "nightVignette",
                "type": "number",
                "default": "0.50",
                "label": "Vignette"
            },
            {
                "key": "nightEdge",
                "type": "number",
                "default": "0.55",
                "label": "Edge Shadow"
            },
            {
                "key": "nightPreset",
                "type": "int",
                "default": "1",
                "label": "Preset"
            },
            {
                "key": "fpsMode",
                "type": "int",
                "default": "2"
            },
            {
                "key": "targetFPS",
                "type": "int",
                "default": "360"
            },
            {
                "key": "showFPSCounter",
                "type": "bool",
                "default": "true",
                "label": "Show FPS Counter",
                "help": "Displays current FPS when menu is open"
            },
            {
                "key": "fpsShowInGame",
                "type": "bool",
                "default": "true",
                "label": "Show In-Game"
            },
            {
                "key": "fpsShowInMenu",
                "type": "bool",
                "default": "true",
                "label": "Show In-Menu"
            },
            {
                "key": "fpsShowProcess",
                "type": "bool",
                "default": "true",
                "label": "Process Stats"
            },
            {
                "key": "fpsShowSystem",
                "type": "bool",
                "default": "true",
                "label": "System stats"
            },
            {
                "key": "fpsColor",
                "type": "color",
                "default": "[0.9, 0.75, 0.2, 1.]",
                "label": "FPS Color"
            },
            {
                "key": "fpsBarColor",
                "type": "color",
                "default": "[0.3, 0.6, 1., 1.]"
            },
            {
                "key": "fpsProcRamColor",
                "type": "color",
                "default": "[0.3, 0.75, 1., 1.]",
                "label": "Process Stats Color"
            },
            {
                "key": "fpsSysRamColor",
                "type": "color",
                "default": "[0.5, 0.9, 0.5, 1.]",
                "label": "System Stats Color"
            },
            {
                "key": "fpsWidgetScale",
                "type": "number",
                "default": "1.",
                "label": "Widget Scale"
            },
            {
                "key": "fpsBgAlpha",
                "type": "number",
                "default": "0.85",
                "label": "Background Opacity"
            },
            {
                "key": "fpsPosCache",
                "type": "array[2]",
                "default": "[10., 15.]"
            },
            {
                "key": "fpsLayoutMode",
                "type": "int",
                "default": "0"
            },
            {
                "key": "fpsFontSize",
                "type": "number",
                "default": "14.",
                "label": "Font Size"
            },
            {
                "key": "fpsShowWatermark",
                "type": "bool",
                "default": "true",
                "label": "Show ADOLFJON.UZ"
            },
            {
                "key": "glassStyle",
                "type": "int",
                "default": "0"
            },
            {
                "key": "menuProfile",
                "type": "int",
                "default": "0"
            },
            {
                "key": "glassBg",
                "type": "int",
                "default": "0"
            },
            {
                "key": "glassBgBlur",
                "type": "number",
                "default": "0.5",
                "label": "Backdrop Blur",
                "help": "How much the animation or picture is blurred. Less is sharper, more reads easier."
            },
            {
                "key": "glassBgImage",
                "type": "string"
            },
            {
                "key": "thMotion",
                "type": "int",
                "default": "2"
            },
            {
                "key": "uiFontIndex",
                "type": "int",
                "default": "0",
                "label": "Typeface",
                "help": "The menu typeface. The list is what this machine has installed; the atlas rebuilds on change."
            },
            {
                "key": "uiFontName",
                "type": "string"
            },
            {
                "key": "spectatorTeamColor",
                "type": "bool",
                "default": "true",
                "label": "Team Colors"
            },
            {
                "key": "spectatorPos",
                "type": "array[2]",
                "default": "[-1., -1.]"
            },
            {
                "key": "keybindShowerPosCache",
                "type": "array[2]",
                "default": "[-1., -1.]"
            },
            {
                "key": "bombTimerPos",
                "type": "array[2]",
                "default": "[-1., -1.]"
            },
            {
                "key": "fpsShowTime",
                "type": "bool",
                "default": "true",
                "label": "Show Clock"
            },
            {
                "key": "fpsShowPing",
                "type": "bool",
                "default": "true",
                "label": "Ping"
            },
            {
                "key": "fpsShowCloud",
                "type": "bool",
                "default": "true",
                "label": "Cloud Radar"
            },
            {
                "key": "fpsOrder",
                "type": "object/array"
            },
            {
                "key": "fpsUseThemeAccent",
                "type": "bool",
                "default": "true",
                "label": "Match Theme Accent"
            },
            {
                "key": "fpsShowConfigName",
                "type": "bool",
                "default": "true",
                "label": "Show Config Name"
            },
            {
                "key": "grenadePredict",
                "type": "bool",
                "default": "false",
                "label": "Grenade Prediction",
                "help": "Draws where the grenade in your hand will fly before you throw: bounces off walls and buildings and the landing spot. Players, doors and glass are not counted."
            },
            {
                "key": "grenadePredictAlways",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "grenadePredictSmoke",
                "type": "bool",
                "default": "true",
                "label": "Smoke Bloom"
            },
            {
                "key": "grenadePredictFire",
                "type": "bool",
                "default": "true",
                "label": "Molly Fire Area"
            },
            {
                "key": "grenadePredictThrow",
                "type": "int",
                "default": "2",
                "label": "Throw Type"
            },
            {
                "key": "grenadePredictCheck",
                "type": "bool",
                "default": "false",
                "label": "Accuracy Check"
            },
            {
                "key": "nadeLandingFire",
                "type": "bool",
                "default": "true",
                "label": "Molly Fire Area"
            },
            {
                "key": "nadeLanding",
                "type": "bool",
                "default": "false",
                "label": "Nade Landing",
                "help": "Shows where every grenade in the air will pop and how many seconds are left. Map walls are counted."
            },
            {
                "key": "nadeLandingFlashWarn",
                "type": "bool",
                "default": "true",
                "label": "Flash Warning"
            },
            {
                "key": "nadeArea",
                "type": "bool",
                "default": "false",
                "label": "Nade Area",
                "help": "Outlines on the ground the area a landed smoke or a burning molotov covers. Walls are counted; the molotov shows the seconds left."
            },
            {
                "key": "nadeAreaSmoke",
                "type": "bool",
                "default": "true",
                "label": "Smoke"
            },
            {
                "key": "nadeAreaFire",
                "type": "bool",
                "default": "true",
                "label": "Fire"
            },
            {
                "key": "smokeRemover",
                "type": "bool",
                "default": "false",
                "label": "Smoke Remover",
                "help": "When you look at a smoke or stand in it, the walls, stairs and boxes behind it are drawn as lines over the smoke. Enemies show in red (in your own Chams when Chams is on), teammates are not shown, everyone in Deathmatch."
            },
            {
                "key": "smokeInk",
                "type": "color",
                "default": "[0.94, 0.96, 1., 0.85]",
                "label": "Line Colour"
            },
            {
                "key": "smokeMate",
                "type": "color",
                "default": "[0.92, 0.12, 0.12, 1.]",
                "label": "Enemy Colour"
            },
            {
                "key": "smokePaper",
                "type": "number",
                "default": "0.",
                "label": "Paper"
            },
            {
                "key": "antiFlash",
                "type": "bool",
                "default": "false",
                "label": "Anti Flash",
                "help": "Removes flashbang blinding effect"
            },
            {
                "key": "antiFlashStrength",
                "type": "number",
                "default": "1.0",
                "label": "Block Strength"
            },
            {
                "key": "antiFlashMode",
                "type": "int",
                "default": "0",
                "label": "Mode"
            },
            {
                "key": "antiFlashInk",
                "type": "color",
                "default": "[0.06, 0.07, 0.09, 0.9]",
                "label": "Line Colour"
            },
            {
                "key": "antiFlashMate",
                "type": "color",
                "default": "[0.92, 0.12, 0.12, 1.]",
                "label": "Enemy Colour"
            },
            {
                "key": "antiFlashPaper",
                "type": "color",
                "default": "[0.05, 0.06, 0.08, 0.]",
                "label": "Background"
            },
            {
                "key": "spreadCircle",
                "type": "bool",
                "default": "false",
                "label": "Spread Circle",
                "help": "Dynamic crosshair spread indicator"
            },
            {
                "key": "spreadCircleColor",
                "type": "color",
                "default": "[1.0, 1.0, 1.0, 0.8]",
                "label": "Circle Color"
            },
            {
                "key": "spreadCircleThickness",
                "type": "number",
                "default": "1.5",
                "label": "Thickness"
            },
            {
                "key": "spreadCircleFill",
                "type": "bool",
                "default": "false",
                "label": "Fill"
            },
            {
                "key": "penCross",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "penCrossOkColor",
                "type": "color",
                "default": "[0.30, 0.90, 0.45, 1.0]",
                "label": "Goes Through"
            },
            {
                "key": "penCrossNoColor",
                "type": "color",
                "default": "[0.95, 0.30, 0.30, 1.0]",
                "label": "Blocked"
            },
            {
                "key": "penCrossSize",
                "type": "number",
                "default": "3.",
                "label": "Size"
            },
            {
                "key": "penCrossDamage",
                "type": "bool",
                "default": "true",
                "label": "Damage Number"
            },
            {
                "key": "penCrossDebug",
                "type": "bool",
                "default": "false",
                "label": "Debug Numbers"
            },
            {
                "key": "soundESP",
                "type": "bool",
                "default": "false",
                "label": "Sound ESP",
                "help": "Visualize player sounds"
            },
            {
                "key": "soundESPScale",
                "type": "number",
                "default": "1.0",
                "label": "Ring Size"
            },
            {
                "key": "soundESPTypeColors",
                "type": "bool",
                "default": "true",
                "label": "Color Per Type"
            },
            {
                "key": "soundESPHeightCue",
                "type": "bool",
                "default": "true",
                "label": "Height Cue"
            },
            {
                "key": "soundESPGhost",
                "type": "bool",
                "default": "true",
                "label": "Last Position"
            },
            {
                "key": "soundESPQuiet",
                "type": "bool",
                "default": "false",
                "label": "Quiet Steps"
            },
            {
                "key": "soundESPPin",
                "type": "bool",
                "default": "true",
                "label": "Exact Spot"
            },
            {
                "key": "soundESPFollow",
                "type": "bool",
                "default": "true",
                "label": "Follow Player"
            },
            {
                "key": "soundESPGhostTime",
                "type": "number",
                "default": "4.0",
                "label": "Last Position Hold"
            },
            {
                "key": "soundESPLifetime",
                "type": "number",
                "default": "1.1",
                "label": "Ring Duration"
            },
            {
                "key": "soundESPThickness",
                "type": "number",
                "default": "1.",
                "label": "Thickness"
            },
            {
                "key": "soundESPStyle",
                "type": "int",
                "default": "0"
            },
            {
                "key": "soundESPColor",
                "type": "color",
                "default": "[1.0, 0.5, 0.1, 1.0]",
                "label": "Ring Color"
            },
            {
                "key": "soundESPGlowColor",
                "type": "color",
                "default": "[1.0, 0.85, 0.3, 0.4]",
                "label": "Glow Color"
            },
            {
                "key": "soundESPFootsteps",
                "type": "bool",
                "default": "true",
                "label": "Footsteps"
            },
            {
                "key": "soundESPShots",
                "type": "bool",
                "default": "true",
                "label": "Gunshots"
            },
            {
                "key": "soundESPJumps",
                "type": "bool",
                "default": "true",
                "label": "Jump / Land"
            },
            {
                "key": "soundESPReload",
                "type": "bool",
                "default": "true",
                "label": "Reloads"
            },
            {
                "key": "soundESPScope",
                "type": "bool",
                "default": "true",
                "label": "Scoping"
            },
            {
                "key": "grenadeESP",
                "type": "bool",
                "default": "false",
                "label": "Grenade ESP",
                "help": "Grenade timers, icons, smoke zones"
            },
            {
                "key": "grenadeESP_smoke",
                "type": "bool",
                "default": "true",
                "label": "Smoke"
            },
            {
                "key": "grenadeESP_flash",
                "type": "bool",
                "default": "true",
                "label": "Flash"
            },
            {
                "key": "grenadeESP_he",
                "type": "bool",
                "default": "true",
                "label": "HE Grenade"
            },
            {
                "key": "grenadeESP_molotov",
                "type": "bool",
                "default": "true",
                "label": "Molotov"
            },
            {
                "key": "grenadeESP_decoy",
                "type": "bool",
                "default": "true",
                "label": "Decoy"
            },
            {
                "key": "grenadeESP_smokeColor",
                "type": "color",
                "default": "[0.3, 0.9, 0.45, 1.]",
                "label": "Smoke Color"
            },
            {
                "key": "grenadeESP_flashColor",
                "type": "color",
                "default": "[1., 1., 0.45, 1.]",
                "label": "Flash Color"
            },
            {
                "key": "grenadeESP_heColor",
                "type": "color",
                "default": "[1., 0.55, 0.2, 1.]",
                "label": "HE Color"
            },
            {
                "key": "grenadeESP_molotovColor",
                "type": "color",
                "default": "[1., 0.4, 0.15, 1.]",
                "label": "Molotov Color"
            },
            {
                "key": "grenadeESP_decoyColor",
                "type": "color",
                "default": "[0.65, 0.65, 1., 1.]",
                "label": "Decoy Color"
            },
            {
                "key": "hitSound",
                "type": "bool",
                "default": "false",
                "label": "Hit Sound",
                "help": "Plays a sound when you hit an enemy"
            },
            {
                "key": "hitSoundVolume",
                "type": "number",
                "default": "1.0",
                "label": "Volume"
            },
            {
                "key": "hitSoundIndex",
                "type": "int",
                "default": "1"
            },
            {
                "key": "killSoundIndex",
                "type": "int",
                "default": "7"
            },
            {
                "key": "menuToggleMode",
                "type": "int",
                "default": "1"
            },
            {
                "key": "menuToggleKey",
                "type": "int",
                "default": "VK_INSERT"
            },
            {
                "key": "menuToggleKey2",
                "type": "int",
                "default": "0"
            },
            {
                "key": "menuToggleKey3",
                "type": "int",
                "default": "0"
            },
            {
                "key": "panicKey",
                "type": "int",
                "default": "0"
            },
            {
                "key": "panicAction",
                "type": "int",
                "default": "0",
                "label": "Action"
            },
            {
                "key": "lobbyWidgetIndex",
                "type": "int",
                "default": "0"
            },
            {
                "key": "sniperTracer",
                "type": "bool",
                "default": "false",
                "label": "Sniper Tracer",
                "help": "Draw line where you shot with sniper"
            },
            {
                "key": "sniperTracerColor",
                "type": "color",
                "default": "[1., 0.3, 0.2, 1.]",
                "label": "Tracer Color"
            },
            {
                "key": "sniperTracerWeapons",
                "type": "int",
                "default": "0"
            },
            {
                "key": "sniperTracerStyle",
                "type": "int",
                "default": "0"
            },
            {
                "key": "sniperTracerSplitColor",
                "type": "bool",
                "default": "true",
                "label": "Separate Sniper Colour"
            },
            {
                "key": "sniperTracerColorAlt",
                "type": "color",
                "default": "[0.35, 0.75, 1., 1.]",
                "label": "Other Weapons Colour"
            },
            {
                "key": "sniperTracerGlow",
                "type": "number",
                "default": "1.",
                "label": "Glow"
            },
            {
                "key": "sniperTracerCore",
                "type": "number",
                "default": "0.75",
                "label": "Hot Core"
            },
            {
                "key": "sniperTracerPulse",
                "type": "bool",
                "default": "true",
                "label": "Travelling Round"
            },
            {
                "key": "sniperTracerDuration",
                "type": "number",
                "default": "1.5",
                "label": "Duration (s)"
            },
            {
                "key": "sniperTracerThickness",
                "type": "number",
                "default": "2.",
                "label": "Thickness"
            },
            {
                "key": "keybindShower",
                "type": "bool",
                "default": "false",
                "label": "Keybind Overlay",
                "help": "Draggable overlay showing active hotkey states (Hold / Toggle / Press)."
            },
            {
                "key": "keybindShowerPos",
                "type": "int",
                "default": "1"
            },
            {
                "key": "keybindShowerAlpha",
                "type": "number",
                "default": "0.85",
                "label": "Opacity"
            },
            {
                "key": "keybindShowerOnlyActive",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "kbsShowSpin",
                "type": "bool",
                "default": "true",
                "label": "Show Spin key"
            },
            {
                "key": "kbsShowAimbot",
                "type": "bool",
                "default": "true",
                "label": "Show Aimbot key"
            },
            {
                "key": "kbsShowTrigger",
                "type": "bool",
                "default": "true",
                "label": "Show Trigger key"
            },
            {
                "key": "kbsShowBhop",
                "type": "bool",
                "default": "true",
                "label": "Show Bunnyhop key"
            },
            {
                "key": "kbsShowEsp",
                "type": "bool",
                "default": "true",
                "label": "Show ESP key"
            },
            {
                "key": "spectatorStyle",
                "type": "int",
                "default": "2"
            },
            {
                "key": "spectatorAccentColor",
                "type": "color",
                "default": "[0.85, 0.25, 0.25, 1.0]"
            },
            {
                "key": "spectatorTextColor",
                "type": "color",
                "default": "[0.90, 0.90, 0.95, 0.90]",
                "label": "Text"
            },
            {
                "key": "spectatorBgAlpha",
                "type": "number",
                "default": "0.85",
                "label": "Opacity"
            },
            {
                "key": "spectatorAlert",
                "type": "bool",
                "default": "true",
                "label": "Alert on new spectator"
            },
            {
                "key": "spectatorShowMode",
                "type": "bool",
                "default": "true",
                "label": "Show View Mode"
            },
            {
                "key": "lanRadarEnabled",
                "type": "bool",
                "default": "false",
                "label": "LAN Radar",
                "help": "Stream the radar to browsers on the local network"
            },
            {
                "key": "lanRadarPort",
                "type": "int",
                "default": "7777"
            },
            {
                "key": "lanRadarMs",
                "type": "int",
                "default": "50",
                "label": "Refresh: %d ms"
            },
            {
                "key": "cloudRadarRate",
                "type": "int",
                "default": "1"
            },
            {
                "key": "cloudRadarMaxViewers",
                "type": "int",
                "default": "8"
            },
            {
                "key": "cloudRadarNotify",
                "type": "bool",
                "default": "true",
                "label": "Viewer Notices",
                "help": "A line in game when someone opens or closes your radar"
            },
            {
                "key": "authServerUtcOffsetMin",
                "type": "int",
                "default": "300"
            },
            {
                "key": "hudAboveMenu",
                "type": "bool",
                "default": "false",
                "label": "HUD Above Menu",
                "help": "While the menu is open, out-of-view indicators, spectators, the bomb panel and the keybind list draw on top of it instead of behind it."
            },
            {
                "key": "thBg",
                "type": "color",
                "default": "[0.043, 0.055, 0.082, 1.]"
            },
            {
                "key": "thText",
                "type": "color",
                "default": "[0.925, 0.937, 0.965, 1.]"
            },
            {
                "key": "thAccent",
                "type": "color",
                "default": "[0.290, 0.610, 0.980, 1.]",
                "label": "Accent Colour"
            },
            {
                "key": "thBorder",
                "type": "color",
                "default": "[0.130, 0.160, 0.220, 1.]"
            },
            {
                "key": "thSidebar",
                "type": "color",
                "default": "[0.024, 0.030, 0.052, 1.]"
            },
            {
                "key": "thBgStyle",
                "type": "int",
                "default": "0"
            },
            {
                "key": "fakeSpin",
                "type": "bool",
                "default": "false",
                "label": "Fake Spin",
                "help": "Spins your model by turning the mouse. Your own view turns with it."
            },
            {
                "key": "fakeSpinKey",
                "type": "int",
                "default": "VK_XBUTTON1",
                "label": "Hotkey"
            },
            {
                "key": "fakeSpinKeyMode",
                "type": "int",
                "default": "0"
            },
            {
                "key": "fakeSpinMode",
                "type": "int",
                "default": "0"
            },
            {
                "key": "fakeSpinRpm",
                "type": "number",
                "default": "360.",
                "label": "Spin Rate (RPM)"
            },
            {
                "key": "fakeSpinPitch",
                "type": "int",
                "default": "1"
            },
            {
                "key": "fakeSpinPitchAmp",
                "type": "number",
                "default": "30.",
                "label": "Sweep Range"
            },
            {
                "key": "fakeSpinYawAmp",
                "type": "number",
                "default": "40.",
                "label": "Jiggle Range"
            },
            {
                "key": "fakeSpinDesync",
                "type": "number",
                "default": "0.15",
                "label": "Irregularity"
            },
            {
                "key": "fakeSpinHoldFire",
                "type": "bool",
                "default": "true",
                "label": "Pause While Firing"
            },
            {
                "key": "fakeSpinReturn",
                "type": "bool",
                "default": "true",
                "label": "Return To Start"
            },
            {
                "key": "fakeSpinReturnSpeed",
                "type": "number",
                "default": "0.",
                "label": "Return Speed"
            },
            {
                "key": "fakeSpinMaxMs",
                "type": "number",
                "default": "0.",
                "label": "Max Duration",
                "help": "Zero means no limit on both. Return Speed 0 snaps the view back at once. Max Duration 0 is unlimited; otherwise the spin stops itself after that long and will not start again until the key is released and pressed again."
            },
            {
                "key": "keystrokes",
                "type": "bool",
                "default": "false",
                "label": "Keystrokes",
                "help": "WASD, shift, space, ctrl and the mouse buttons. For seeing your own movement mistakes, and for clips - half of what looks like aim is movement nobody can see."
            },
            {
                "key": "keystrokesAlpha",
                "type": "number",
                "default": "0.85",
                "label": "Opacity"
            },
            {
                "key": "keystrokesPos",
                "type": "array[2]",
                "default": "[-1., -1.]"
            },
            {
                "key": "keystrokesSize",
                "type": "number",
                "default": "30.",
                "label": "Key size"
            },
            {
                "key": "keystrokesMods",
                "type": "bool",
                "default": "true",
                "label": "Shift / Space / Ctrl"
            },
            {
                "key": "keystrokesMouse",
                "type": "bool",
                "default": "true",
                "label": "Mouse buttons"
            },
            {
                "key": "perfPreset",
                "type": "int",
                "default": "1"
            },
            {
                "key": "islandDock",
                "type": "bool",
                "default": "true",
                "label": "Bottom dock",
                "help": "A small dock at the bottom of the screen: open the menu, or search every feature in the product. Grows when the pointer comes near."
            },
            {
                "key": "hudFamily",
                "type": "int",
                "default": "5"
            },
            {
                "key": "hudOwnFamily",
                "type": "bool",
                "default": "false",
                "label": "Custom Panel Family",
                "help": "Pick one of the 6 classic panel families instead of Bare/Glass."
            },
            {
                "key": "hudPlate",
                "type": "int",
                "default": "0"
            },
            {
                "key": "hudOpacity",
                "type": "number",
                "default": "0.92"
            },
            {
                "key": "hudBlur",
                "type": "bool",
                "default": "false",
                "label": "Blur Behind Widgets",
                "help": "Blurs the game behind glass panels. Costs a little GPU."
            },
            {
                "key": "hudSize",
                "type": "number",
                "default": "1.",
                "label": "Widget Size",
                "help": "Makes every in-game widget bigger or smaller at once."
            },
            {
                "key": "spectatorOwnStyle",
                "type": "bool",
                "default": "false",
                "label": "Own Style",
                "help": "Off: the widget follows the menu style. On: set its opacity and colours here."
            },
            {
                "key": "keybindOwnStyle",
                "type": "bool",
                "default": "false",
                "label": "Own Style",
                "help": "Off: the widget follows the menu style. On: set its opacity and colours here."
            },
            {
                "key": "bombTimerOwnStyle",
                "type": "bool",
                "default": "false",
                "label": "Own Style",
                "help": "Off: the widget follows the menu style. On: set its opacity and colours here."
            },
            {
                "key": "sessionStatsOwnStyle",
                "type": "bool",
                "default": "false",
                "label": "Own Style",
                "help": "Off: the widget follows the menu style. On: set its opacity and colours here."
            },
            {
                "key": "velocityOwnStyle",
                "type": "bool",
                "default": "false",
                "label": "Own Style",
                "help": "Off: the widget follows the menu style. On: set its opacity and colours here."
            },
            {
                "key": "fpsOwnStyle",
                "type": "bool",
                "default": "false",
                "label": "Own Style",
                "help": "Off: the widget follows the menu style. On: set its opacity and colours here."
            },
            {
                "key": "notifyOwnStyle",
                "type": "bool",
                "default": "false",
                "label": "Own Style",
                "help": "Off: the widget follows the menu style. On: set its opacity and colours here."
            },
            {
                "key": "mediaOwnStyle",
                "type": "bool",
                "default": "false",
                "label": "Own Style",
                "help": "Off: the widget follows the menu style. On: set its opacity and colours here."
            },
            {
                "key": "keystrokesOwnStyle",
                "type": "bool",
                "default": "false",
                "label": "Own Style",
                "help": "Off: the widget follows the menu style. On: set its opacity and colours here."
            },
            {
                "key": "hostagePanelOwnStyle",
                "type": "bool",
                "default": "false",
                "label": "Own Style",
                "help": "Off: the widget follows the menu style. On: set its opacity and colours here."
            },
            {
                "key": "mediaPlayer",
                "type": "bool",
                "default": "false",
                "label": "Music player",
                "help": "Shows whatever is playing in Windows: Spotify, YouTube in a browser, anything else. Control it without alt-tabbing."
            },
            {
                "key": "mediaAlpha",
                "type": "number",
                "default": "0.90",
                "label": "Opacity"
            },
            {
                "key": "mediaPos",
                "type": "array[2]",
                "default": "[-1., -1.]"
            },
            {
                "key": "mediaWidth",
                "type": "number",
                "default": "268.",
                "label": "Panel Width"
            },
            {
                "key": "mediaStyle",
                "type": "int",
                "default": "2"
            },
            {
                "key": "mediaShowDisc",
                "type": "bool",
                "default": "true",
                "label": "Spinning disc"
            },
            {
                "key": "mediaUseThemeAccent",
                "type": "bool",
                "default": "true",
                "label": "Match Theme Accent"
            },
            {
                "key": "mediaColor",
                "type": "color",
                "default": "[0.29, 0.61, 0.98, 1.]",
                "label": "Color"
            },
            {
                "key": "mediaEqBars",
                "type": "int",
                "default": "24",
                "label": "Bars"
            },
            {
                "key": "mediaDiscPulse",
                "type": "bool",
                "default": "true",
                "label": "Disc breathes on the bass"
            },
            {
                "key": "mediaShowProgress",
                "type": "bool",
                "default": "true",
                "label": "Progress bar"
            },
            {
                "key": "mediaShowButtons",
                "type": "bool",
                "default": "true",
                "label": "Transport buttons"
            },
            {
                "key": "mediaKeyNext",
                "type": "int",
                "default": "0",
                "label": "Next track"
            },
            {
                "key": "mediaKeyPrev",
                "type": "int",
                "default": "0",
                "label": "Previous track"
            },
            {
                "key": "mediaKeyToggle",
                "type": "int",
                "default": "0",
                "label": "Play / pause"
            },
            {
                "key": "velocityHud",
                "type": "bool",
                "default": "false",
                "label": "Velocity",
                "help": "Horizontal speed, takeoff speed and a live trace of the last few seconds."
            },
            {
                "key": "velocityStyle",
                "type": "int",
                "default": "1"
            },
            {
                "key": "velocityAlpha",
                "type": "number",
                "default": "0.88",
                "label": "Opacity"
            },
            {
                "key": "velocityPos",
                "type": "array[2]",
                "default": "[-1., -1.]"
            },
            {
                "key": "velocityUseThemeAccent",
                "type": "bool",
                "default": "true",
                "label": "Match Theme Accent"
            },
            {
                "key": "velocityColor",
                "type": "color",
                "default": "[0.29, 0.61, 0.98, 1.]",
                "label": "Color"
            },
            {
                "key": "velocityColorBySpeed",
                "type": "bool",
                "default": "false",
                "label": "Color By Speed"
            },
            {
                "key": "velocityShowTakeoff",
                "type": "bool",
                "default": "true",
                "label": "Takeoff Speed"
            },
            {
                "key": "velocityShowPeak",
                "type": "bool",
                "default": "false",
                "label": "Peak Speed"
            },
            {
                "key": "velocityShowJumps",
                "type": "bool",
                "default": "true",
                "label": "Jump Counter"
            },
            {
                "key": "velocityShowVertical",
                "type": "bool",
                "default": "true",
                "label": "Vertical Speed"
            },
            {
                "key": "velocityShowDelta",
                "type": "bool",
                "default": "false",
                "label": "Gain / Loss"
            },
            {
                "key": "velocityShowStrafe",
                "type": "bool",
                "default": "false",
                "label": "Strafe Needle"
            },
            {
                "key": "velocityNumFollows",
                "type": "bool",
                "default": "false",
                "label": "Number rides the graph"
            },
            {
                "key": "velocityIdleGate",
                "type": "bool",
                "default": "true",
                "label": "Pause Outside A Match"
            },
            {
                "key": "velocityGraphSeconds",
                "type": "number",
                "default": "4.",
                "label": "History (s)"
            },
            {
                "key": "velocityWidth",
                "type": "number",
                "default": "254.",
                "label": "Panel Width"
            },
            {
                "key": "velocityGraphHeight",
                "type": "number",
                "default": "64.",
                "label": "Graph Height"
            },
            {
                "key": "velocityUnits",
                "type": "int",
                "default": "0"
            },
            {
                "key": "sessionStats",
                "type": "bool",
                "default": "false",
                "label": "Session Stats",
                "help": "Floating K/D tracker for the current session."
            },
            {
                "key": "sessionStatsColor",
                "type": "color",
                "default": "[0.9, 0.85, 0.3, 1.]",
                "label": "Text"
            },
            {
                "key": "sessionStatsBgAlpha",
                "type": "number",
                "default": "0.85",
                "label": "Opacity"
            },
            {
                "key": "sessionStatsPosCache",
                "type": "array[2]",
                "default": "[10., 92.]"
            },
            {
                "key": "chickenESP",
                "type": "bool",
                "default": "false",
                "label": "Chicken ESP",
                "help": "Renders chickens on the map with a KFC label and bounding box."
            },
            {
                "key": "chickenColor",
                "type": "color",
                "default": "[1., 0.6, 0.0, 1.]",
                "label": "Color"
            },
            {
                "key": "chickenBox",
                "type": "bool",
                "default": "true",
                "label": "Corner Box"
            },
            {
                "key": "chickenLabel",
                "type": "bool",
                "default": "true",
                "label": "KFC Label"
            },
            {
                "key": "chickenThickness",
                "type": "number",
                "default": "1.5",
                "label": "Thickness"
            },
            {
                "key": "chickenDistance",
                "type": "number",
                "default": "60.",
                "label": "Max Distance (m)"
            },
            {
                "key": "tooltips",
                "type": "bool",
                "default": "true",
                "label": "Tooltips",
                "help": "The help panel that appears when the pointer rests on a row."
            },
            {
                "key": "bunnyhopAutoStrafe",
                "type": "bool",
                "default": "false",
                "label": "Auto strafe"
            },
            {
                "key": "bunnyhopMaxHops",
                "type": "int",
                "default": "0",
                "label": "Consecutive hops"
            },
            {
                "key": "autoStop",
                "type": "bool",
                "default": "false",
                "label": "Auto Stop",
                "help": "When you let go of A or D it taps the opposite key for a moment and stops you dead - the counter-strafe is done for you."
            },
            {
                "key": "autoStopAll",
                "type": "bool",
                "default": "false",
                "label": "W and S Too"
            },
            {
                "key": "autoStopGunOnly",
                "type": "bool",
                "default": "true",
                "label": "Guns Only"
            },
            {
                "key": "autoPlant",
                "type": "bool",
                "default": "false",
                "label": "Auto Plant",
                "help": "Plants for you the moment you stand in a bombsite holding the C4."
            },
            {
                "key": "perfectPlant",
                "type": "bool",
                "default": "false",
                "label": "Perfect Plant",
                "help": "Waits until the round clock is close to zero, then plants — defusers get the least possible margin."
            },
            {
                "key": "perfectDefuse",
                "type": "bool",
                "default": "false",
                "label": "Perfect Defuse",
                "help": "Holds E at the last moment the defuse still finishes — if it cannot, it never starts."
            },
            {
                "key": "notifyEnabled",
                "type": "bool",
                "default": "false",
                "label": "Notifications",
                "help": "Shows short rows for damage dealt, kills and damage taken, then fades them on their own."
            },
            {
                "key": "notifyHit",
                "type": "bool",
                "default": "true",
                "label": "Damage dealt"
            },
            {
                "key": "notifyKill",
                "type": "bool",
                "default": "true",
                "label": "Kills"
            },
            {
                "key": "notifyHeadshot",
                "type": "bool",
                "default": "true",
                "label": "Mark headshots"
            },
            {
                "key": "notifyHurt",
                "type": "bool",
                "default": "true",
                "label": "Damage taken"
            },
            {
                "key": "notifyShowDamage",
                "type": "bool",
                "default": "true",
                "label": "Show the number"
            },
            {
                "key": "notifyLifetime",
                "type": "number",
                "default": "3.5",
                "label": "Row lifetime"
            },
            {
                "key": "notifyAlpha",
                "type": "number",
                "default": "0.90",
                "label": "Opacity"
            },
            {
                "key": "notifyMax",
                "type": "int",
                "default": "4",
                "label": "Rows at once"
            },
            {
                "key": "notifyPos",
                "type": "array[2]",
                "default": "[-1., -1.]"
            },
            {
                "key": "notifyStyle",
                "type": "int",
                "default": "0",
                "label": "Style"
            },
            {
                "key": "notifyScope",
                "type": "int",
                "default": "0",
                "label": "Who to show",
                "help": "Only players you shot, or everyone on the server. Everyone adds damage whose author the client is never told, so those rows name the victim and nothing else."
            },
            {
                "key": "notifyScale",
                "type": "number",
                "default": "1.0",
                "label": "Size"
            },
            {
                "key": "notifyColHit",
                "type": "color",
                "default": "[0.470, 0.784, 1.000, 1.]",
                "label": "Hit Color"
            },
            {
                "key": "notifyColHead",
                "type": "color",
                "default": "[1.000, 0.804, 0.275, 1.]",
                "label": "Headshot Color"
            },
            {
                "key": "notifyColKill",
                "type": "color",
                "default": "[0.373, 0.824, 0.549, 1.]",
                "label": "Kill Color"
            },
            {
                "key": "notifyColHurt",
                "type": "color",
                "default": "[0.922, 0.353, 0.333, 1.]",
                "label": "Damage Taken Color"
            },
            {
                "key": "notifyColOther",
                "type": "color",
                "default": "[0.588, 0.627, 0.706, 1.]",
                "label": "Other Players Color"
            },
            {
                "key": "hostageESP",
                "type": "bool",
                "default": "false",
                "label": "Hostage ESP",
                "help": "Boxes every hostage and shows its state, who is holding it and how long the untie has left."
            },
            {
                "key": "hostageColor",
                "type": "color",
                "default": "[0.45, 0.82, 1., 1.]",
                "label": "Color"
            },
            {
                "key": "hostageBox",
                "type": "bool",
                "default": "true",
                "label": "Corner Box"
            },
            {
                "key": "hostageThickness",
                "type": "number",
                "default": "1.5",
                "label": "Thickness"
            },
            {
                "key": "hostageDistance",
                "type": "number",
                "default": "120.",
                "label": "Max Distance (m)"
            },
            {
                "key": "hostageStateLabel",
                "type": "bool",
                "default": "true",
                "label": "State label"
            },
            {
                "key": "hostageTimer",
                "type": "bool",
                "default": "true",
                "label": "Freeing timer"
            },
            {
                "key": "hostageGrabber",
                "type": "bool",
                "default": "true",
                "label": "Who is holding it"
            },
            {
                "key": "hostagePanel",
                "type": "bool",
                "default": "false",
                "label": "Hostage panel"
            },
            {
                "key": "hostagePanelAlpha",
                "type": "number",
                "default": "0.85",
                "label": "Opacity"
            },
            {
                "key": "hostagePanelPos",
                "type": "array[2]",
                "default": "[-1., -1.]"
            },
            {
                "key": "grenadeESP_icon",
                "type": "bool",
                "default": "true",
                "label": "Icon"
            },
            {
                "key": "grenadeESP_name",
                "type": "bool",
                "default": "true",
                "label": "Name"
            },
            {
                "key": "grenadeESP_distance",
                "type": "bool",
                "default": "true",
                "label": "Distance"
            },
            {
                "key": "grenadeESP_trails",
                "type": "bool",
                "default": "false",
                "label": "Trails"
            },
            {
                "key": "grenadeESP_trailLen",
                "type": "number",
                "default": "2.",
                "label": "Trail Length"
            },
            {
                "key": "grenadeESP_maxDist",
                "type": "number",
                "default": "0.",
                "label": "Max Distance"
            },
            {
                "key": "antiAfk",
                "type": "bool",
                "default": "false",
                "label": "Anti-AFK",
                "help": "When you have not touched anything for a while, taps A/D so the server does not kick you for being AFK."
            },
            {
                "key": "antiAfkIdle",
                "type": "number",
                "default": "60.",
                "label": "Idle Threshold"
            },
            {
                "key": "antiAfkMin",
                "type": "number",
                "default": "15.",
                "label": "Min Interval"
            },
            {
                "key": "antiAfkMax",
                "type": "number",
                "default": "30.",
                "label": "Max Interval"
            },
            {
                "key": "trashTalk",
                "type": "bool",
                "default": "false",
                "label": "Trashtalk",
                "help": "Types into chat automatically after a kill, a death or a round win. Opens chat with your game key, no more than once every 3.5 seconds."
            },
            {
                "key": "trashTalkKill",
                "type": "bool",
                "default": "true"
            },
            {
                "key": "trashTalkDeath",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "trashTalkRound",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "trashTalkTeam",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "trashTalkLang",
                "type": "int",
                "default": "0"
            },
            {
                "key": "trashTalkAllKey",
                "type": "int",
                "default": "'Y'"
            },
            {
                "key": "trashTalkTeamKey",
                "type": "int",
                "default": "'U'"
            },
            {
                "key": "trashTalkHeadshot",
                "type": "bool",
                "default": "true"
            },
            {
                "key": "trashTalkKnife",
                "type": "bool",
                "default": "true"
            },
            {
                "key": "trashTalkMulti",
                "type": "bool",
                "default": "true"
            },
            {
                "key": "trashTalkOrder",
                "type": "int",
                "default": "0"
            },
            {
                "key": "trashTalkChance",
                "type": "number",
                "default": "100."
            },
            {
                "key": "trashTalkCooldown",
                "type": "number",
                "default": "3.5"
            },
            {
                "key": "trashTalkLines",
                "type": "object"
            },
            {
                "key": "quickChat",
                "type": "bool",
                "default": "false",
                "label": "Quick Chat",
                "help": "On-screen panel of your lines. With the menu open: left-click sends to chat (once the menu closes), right-click copies. The hotkey sends the next line in the list."
            },
            {
                "key": "quickChatKey",
                "type": "int",
                "default": "0"
            },
            {
                "key": "quickChatPos",
                "type": "array[2]",
                "default": "[-1., -1.]"
            },
            {
                "key": "ttPadPos",
                "type": "array[2]",
                "default": "[-1., -1.]"
            },
            {
                "key": "ttPadPinned",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "ttPadOpen",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "discordRpc",
                "type": "bool",
                "default": "false",
                "label": "Discord Rich Presence",
                "help": "Shows your map, mode and round on your Discord profile. The Discord app must be running."
            },
            {
                "key": "discordRpcMap",
                "type": "bool",
                "default": "true",
                "label": "Show Map"
            },
            {
                "key": "discordRpcRound",
                "type": "bool",
                "default": "true",
                "label": "Show Round"
            },
            {
                "key": "serverPicker",
                "type": "bool",
                "default": "false",
                "label": "Server Picker",
                "help": "When turned on it fetches Valve's server list. Pick the servers you want and press Apply: every other one is blocked in Windows Firewall (asks for admin once). Blocks are removed when you turn it off or close the program."
            },
            {
                "key": "serverPickerPick",
                "type": "object"
            }
        ],
        "perf": [
            {
                "key": "processPriority",
                "type": "int",
                "default": "2",
                "label": "Process Priority"
            },
            {
                "key": "gpuPriority",
                "type": "int",
                "default": "0",
                "label": "GPU Priority"
            },
            {
                "key": "inputFreqMs",
                "type": "number",
                "default": "1.",
                "label": "Input Frequency"
            },
            {
                "key": "scanFreqMs",
                "type": "number",
                "default": "5.",
                "label": "Scan Frequency"
            },
            {
                "key": "uiScale",
                "type": "number",
                "default": "1."
            }
        ],
        "damage": [
            {
                "key": "enabled",
                "type": "bool",
                "default": "false",
                "label": "Damage Indicator",
                "help": "Shows damage numbers when you hit an enemy"
            },
            {
                "key": "textSize",
                "type": "number",
                "default": "18.0",
                "label": "Text Size"
            },
            {
                "key": "floatSpeed",
                "type": "number",
                "default": "45.0"
            },
            {
                "key": "lifetime",
                "type": "number",
                "default": "1.5",
                "label": "Duration"
            },
            {
                "key": "spreadX",
                "type": "number",
                "default": "30.0"
            },
            {
                "key": "damageColor",
                "type": "array of number[4]",
                "default": "[1.0, 0.3, 0.3, 1.0]",
                "label": "Damage Color"
            },
            {
                "key": "headshotColor",
                "type": "array of number[4]",
                "default": "[1.0, 0.85, 0.0, 1.0]",
                "label": "Headshot Color"
            },
            {
                "key": "outline",
                "type": "bool",
                "default": "true",
                "label": "Contact Shadow"
            },
            {
                "key": "backdrop",
                "type": "bool",
                "default": "false",
                "label": "Backdrop"
            },
            {
                "key": "backdropAlpha",
                "type": "number",
                "default": "0.45",
                "label": "Opacity"
            },
            {
                "key": "punch",
                "type": "number",
                "default": "0.35",
                "label": "Punch"
            },
            {
                "key": "hitMarker",
                "type": "bool",
                "default": "false",
                "label": "Hitmarker",
                "help": "Leaves a tiny X in the world at the point the bullet landed. No settings."
            }
        ],
        "world": [
            {
                "key": "enabled",
                "type": "bool",
                "default": "false",
                "label": "Enable",
                "help": "Master toggle for world visuals"
            },
            {
                "key": "brightness",
                "type": "number",
                "default": "1.0",
                "label": "Brightness"
            },
            {
                "key": "contrast",
                "type": "number",
                "default": "1.0",
                "label": "Contrast"
            },
            {
                "key": "saturation",
                "type": "number",
                "default": "1.0"
            },
            {
                "key": "gamma",
                "type": "number",
                "default": "1.0"
            },
            {
                "key": "nightModeDarkness",
                "type": "number",
                "default": "0.5",
                "label": "Darkness"
            },
            {
                "key": "nightMode",
                "type": "bool",
                "default": "false",
                "label": "Night Mode",
                "help": "Darken the world"
            },
            {
                "key": "removeFog",
                "type": "bool",
                "default": "false",
                "label": "Remove Fog",
                "help": "Disables all fog"
            },
            {
                "key": "fogDensity",
                "type": "number",
                "default": "0.0",
                "label": "Fog Density"
            },
            {
                "key": "skyColor",
                "type": "color",
                "default": "[1.0, 1.0, 1.0, 1.0]"
            },
            {
                "key": "fogColor",
                "type": "color",
                "default": "[0.5, 0.5, 0.5, 1.0]"
            },
            {
                "key": "rain",
                "type": "bool",
                "default": "false",
                "label": "Weather",
                "help": "Rain, snow and embers placed in the map itself, not on the overlay"
            },
            {
                "key": "rainCount",
                "type": "int",
                "default": "400"
            },
            {
                "key": "rainSpeed",
                "type": "number",
                "default": "500.",
                "label": "Speed"
            },
            {
                "key": "rainSize",
                "type": "number",
                "default": "1.",
                "label": "Size"
            },
            {
                "key": "rainWind",
                "type": "number",
                "default": "70.",
                "label": "Wind"
            },
            {
                "key": "rainAlpha",
                "type": "number",
                "default": "0.8",
                "label": "Opacity",
                "help": "Affects the window backdrop and the sidebar only. Cards and text stay as they are."
            },
            {
                "key": "rainColor",
                "type": "color",
                "default": "[0.7, 0.84, 1., 1.]"
            },
            {
                "key": "rainSplash",
                "type": "bool",
                "default": "true",
                "label": "Splash",
                "help": "Splash on ground"
            },
            {
                "key": "rainRandomColor",
                "type": "bool",
                "default": "false",
                "label": "Random Color",
                "help": "Colorful rain"
            },
            {
                "key": "weatherType",
                "type": "int",
                "default": "0",
                "label": "Type"
            },
            {
                "key": "snowSway",
                "type": "number",
                "default": "26.",
                "label": "Sway"
            },
            {
                "key": "snowSpeed",
                "type": "number",
                "default": "60.",
                "label": "Fall Speed"
            },
            {
                "key": "snowSize",
                "type": "number",
                "default": "1.2",
                "label": "Particle Size"
            },
            {
                "key": "snowRange",
                "type": "number",
                "default": "1400.",
                "label": "Distance"
            },
            {
                "key": "weatherLightning",
                "type": "bool",
                "default": "false",
                "label": "Lightning",
                "help": "Random lightning flashes during rain and blizzard"
            },
            {
                "key": "weatherFlashRate",
                "type": "number",
                "default": "14.",
                "label": "Strike Interval"
            },
            {
                "key": "nightTint",
                "type": "bool",
                "default": "false",
                "label": "Moonlight Tint",
                "help": "Tints the sky and the lighting cold, so it reads as night rather than as underexposure"
            },
            {
                "key": "nightTintColor",
                "type": "color",
                "default": "[0.32, 0.46, 0.95, 1.]",
                "label": "Night Color"
            },
            {
                "key": "sky",
                "type": "bool",
                "default": "false",
                "label": "Sky Changer",
                "help": "Draws a night sky with moon, stars and the Milky Way. It reads the game window (like OBS), so smoke, trees, wires, the HUD and your gun stay on top. Nothing is written to the game"
            },
            {
                "key": "skyTint",
                "type": "color",
                "default": "[1., 1., 1., 1.]",
                "label": "Tint"
            },
            {
                "key": "skyBright",
                "type": "number",
                "default": "1.",
                "label": "Brightness"
            }
        ],
        "deathfx": [
            {
                "key": "enabled",
                "type": "bool",
                "default": "false",
                "label": "Death FX",
                "help": "A particle burst on the enemy body the moment they drop"
            },
            {
                "key": "style",
                "type": "int",
                "default": "6",
                "label": "Style",
                "help": "Fifteen styles, each owning its own numbers. Switching style swaps every slider below to that style's values."
            },
            {
                "key": "teamColor",
                "type": "bool",
                "default": "true",
                "label": "Use ESP Color",
                "help": "Particles take the colour the enemy box was drawn in"
            },
            {
                "key": "color",
                "type": "color",
                "default": "[1.00, 0.42, 0.28, 1.]",
                "label": "FX Color",
                "help": "The fixed colour, used only when ESP Color is off."
            },
            {
                "key": "glow",
                "type": "bool",
                "default": "true",
                "label": "Glow",
                "help": "A soft halo behind every particle"
            },
            {
                "key": "shockRing",
                "type": "bool",
                "default": "true",
                "label": "Shock Ring"
            },
            {
                "key": "maxBursts",
                "type": "int",
                "default": "12",
                "label": "Max Bursts",
                "help": "Pool ceiling. Past this the oldest burst is dropped - a deathmatch spray is what this exists for."
            },
            {
                "key": "styles",
                "type": "object/array"
            }
        ],
        "skin": [
            {
                "key": "enabled",
                "type": "bool",
                "default": "false"
            },
            {
                "key": "realTimeSave",
                "type": "bool",
                "default": "true"
            },
            {
                "key": "weapons",
                "type": "object/array"
            }
        ]
    }
}