Swift Source Code Leak

objOct 16th, 2026Never expires Public21 views
Scripts
Luau815.23 KB | 13743 lines
local TABLE_TableIndirection = {};
TABLE_TableIndirection["obf_stringchar%0"] = _G['string'].char;
TABLE_TableIndirection["obf_stringbyte%0"] = _G['string'].byte;
TABLE_TableIndirection["obf_stringsub%0"] = _G['string'].sub;
TABLE_TableIndirection["obf_bitlib%0"] = _G['bit32'] or _G['bit'];
TABLE_TableIndirection["obf_XOR%0"] = TABLE_TableIndirection["obf_bitlib%0"].bxor;
TABLE_TableIndirection["obf_tableconcat%0"] = _G['table'].concat;
TABLE_TableIndirection["obf_tableinsert%0"] = _G['table'].insert;
local function hmmm(hmmm2, hmmm3)
	TABLE_TableIndirection["result%0"] = {};
	for i = 1, #hmmm2 do
		TABLE_TableIndirection["obf_tableinsert%0"](TABLE_TableIndirection["result%0"], TABLE_TableIndirection["obf_stringchar%0"](TABLE_TableIndirection["obf_XOR%0"](TABLE_TableIndirection["obf_stringbyte%0"](TABLE_TableIndirection["obf_stringsub%0"](hmmm2, i, i + 1)), TABLE_TableIndirection["obf_stringbyte%0"](TABLE_TableIndirection["obf_stringsub%0"](hmmm3, 1 + (i % #hmmm3), 1 + (i % #hmmm3) + 1))) % 256));
	end
	return TABLE_TableIndirection["obf_tableconcat%0"](TABLE_TableIndirection["result%0"]);
end
TABLE_TableIndirection["Source%0"] = [==========[
local Library; do
	local cloneref = (typeof(cloneref) == "function" and cloneref) or function(Object) return Object end
	local function Service(Name) return cloneref(game:GetService(Name)) end

	local Players = Service("Players")
	local UserInputService = Service("UserInputService")
	local RunService = Service("RunService")
	local TweenService = Service("TweenService")
	local HttpService = Service("HttpService")
	local Lighting = Service("Lighting")
	local Workspace = Service("Workspace")
	local GuiService = Service("GuiService")
	local Stats = Service("Stats")

	local LocalPlayer = Players.LocalPlayer

	local Env = (typeof(getgenv) == "function" and getgenv()) or _G
	if type(Env.SwiftLibrary) == "table" and type(Env.SwiftLibrary.Unload) == "function" then
		pcall(Env.SwiftLibrary.Unload, Env.SwiftLibrary)
	end

	Library = {
		Version = "1.0.0",
		Folder = "Swift",

		Flags = {},
		Elements = {},
		Keybinds = {},
		Connections = {},
		Threads = {},
		Windows = {},
		SearchIndex = {},
		PopupStack = {},
		AnimatedPickers = {},
		Notifications = {},

		Casing = "Normal",
		ThemeName = "Swift",
		TweenTime = 0.25,
		EasingStyle = Enum.EasingStyle.Quart,
		Unloaded = false,
		Listening = nil,
		MenuKeybind = Enum.KeyCode.RightShift,
		Font = "Inter",
	}
	Library.__index = Library
	Env.SwiftLibrary = Library

	local FS = {}; do
		local MemoryFiles = {}
		local function Has(Name) return typeof(Env[Name]) == "function" or typeof(getfenv()[Name]) == "function" end
		local function Get(Name) return Env[Name] or getfenv()[Name] end
		local Native = Has("writefile") and Has("readfile") and Has("isfile")

		FS.Native = Native
		function FS.MakeFolder(Path)
			if Native and Has("makefolder") then
				if not (Has("isfolder") and Get("isfolder")(Path)) then pcall(Get("makefolder"), Path) end
			end
		end
		function FS.Write(Path, Content)
			if Native then return pcall(Get("writefile"), Path, Content) end
			MemoryFiles[Path] = Content
			return true
		end
		function FS.Read(Path)
			if Native then
				local Ok, Result = pcall(Get("readfile"), Path)
				return Ok and Result or nil
			end
			return MemoryFiles[Path]
		end
		function FS.Exists(Path)
			if Native then
				local Ok, Result = pcall(Get("isfile"), Path)
				return Ok and Result
			end
			return MemoryFiles[Path] ~= nil
		end
		function FS.Delete(Path)
			if Native and Has("delfile") then pcall(Get("delfile"), Path) else MemoryFiles[Path] = nil end
		end
		function FS.List(Folder)
			local Out = {}
			if Native and Has("listfiles") then
				local Ok, Files = pcall(Get("listfiles"), Folder)
				if Ok then
					for _, File in Files do
						local Name = tostring(File):gsub("\\", "/"):match("([^/]+)$")
						table.insert(Out, Name)
					end
				end
			else
				for Path in MemoryFiles do
					local Dir, Name = Path:match("^(.*)/([^/]+)$")
					if Dir == Folder then table.insert(Out, Name) end
				end
			end
			table.sort(Out)
			return Out
		end
		Library.FS = FS
		FS.MakeFolder(Library.Folder)
		FS.MakeFolder(Library.Folder .. "/configs")
		FS.MakeFolder(Library.Folder .. "/fonts")
	end

	local Fonts = {
		Families = {
			["Inter"] = "rbxassetid://12187365364",
			["Gotham"] = "rbxasset://fonts/families/GothamSSm.json",
			["Montserrat"] = "rbxasset://fonts/families/Montserrat.json",
			["Roboto"] = "rbxasset://fonts/families/Roboto.json",
			["Source Sans"] = "rbxasset://fonts/families/SourceSansPro.json",
			["Builder Sans"] = "rbxasset://fonts/families/BuilderSans.json",
			["Ubuntu"] = "rbxasset://fonts/families/Ubuntu.json",
		},
		Order = { "Inter", "Gotham", "Montserrat", "Roboto", "Source Sans", "Builder Sans", "Ubuntu" },
		Registry = setmetatable({}, { __mode = "k" }),
		ESP = {
			Pixel = Font.fromEnum(Enum.Font.Code), Code = Font.fromEnum(Enum.Font.Code),
			Gotham = Font.fromEnum(Enum.Font.Gotham), Arial = Font.fromEnum(Enum.Font.Arial),
		},
	}
	Library.Fonts = Fonts

	function Fonts:Face(Weight)
		return Font.new(self.Families[Library.Font] or self.Families.Inter, Weight or Enum.FontWeight.Bold)
	end

	function Fonts:Refresh()
		self.Regular = self:Face(Enum.FontWeight.Regular)
		self.Medium = self:Face(Enum.FontWeight.Medium)
		self.SemiBold = self:Face(Enum.FontWeight.SemiBold)
		self.Bold = self:Face(Enum.FontWeight.Bold)
	end

	function Fonts:Apply(Object, Weight)
		self.Registry[Object] = Weight or Enum.FontWeight.Bold
		Object.FontFace = self:Face(self.Registry[Object])
	end

	function Fonts:Download(Name, Url)
		local Environment = getfenv()
		local GetAsset = Env.getcustomasset or Env.getsynasset or Environment.getcustomasset or Environment.getsynasset
		if not FS.Native or typeof(GetAsset) ~= "function" then return nil end
		local Base = Library.Folder .. "/fonts/" .. Name:gsub("%s", "")
		if not FS.Exists(Base .. ".ttf") then
			local Ok, Data = pcall(function() return game:HttpGet(Url) end)
			if not Ok or type(Data) ~= "string" or Data == "" then return nil end
			if not FS.Write(Base .. ".ttf", Data) then return nil end
		end
		if not FS.Write(Base .. ".json", HttpService:JSONEncode({ name = Name, faces = { { name = "Regular", weight = 400, style = "normal", assetId = GetAsset(Base .. ".ttf") } } })) then return nil end
		return GetAsset(Base .. ".json")
	end

	function Fonts:ESPFace(Name)
		if not self.ESP[Name] then Name = "Pixel" end
		if Name == "Pixel" and not self.PixelAttempted then
			self.PixelAttempted = true
			local Okay, Face = pcall(function()
				local Family = self:Download("Minecraftia-Regular", "https://github.com/gut7899/Storage/raw/refs/heads/main/Minecraftia-Regular.ttf")
				if type(Family) == "string" and Family ~= "" then return Font.new(Family, Enum.FontWeight.Regular) end
			end)
			if Okay and Face then self.ESP.Pixel = Face end
		end
		return self.ESP[Name]
	end

	function Library:AddFont(Name, Source)
		local Family = Source
		if type(Source) == "number" then
			Family = "rbxassetid://" .. Source
		elseif type(Source) == "table" then
			Family = Fonts:Download(Name, Source.Url)
		end
		if not Family then return false end
		Fonts.Families[Name] = Family
		if not table.find(Fonts.Order, Name) then table.insert(Fonts.Order, Name) end
		local Dropdown = Library.Elements.Font
		if Dropdown then Dropdown:SetOptions(Fonts.Order, true) end
		return true
	end

	function Library:SetFont(Name)
		if not Fonts.Families[Name] then return end
		Library.Font = Name
		Fonts:Refresh()
		for Object, Weight in Fonts.Registry do
			Object.FontFace = Fonts:Face(Weight)
		end
	end

	Fonts:Refresh()

	local Icons; do
		local function Thumb(Id) return "rbxthumb://type=Asset&id=" .. Id .. "&w=150&h=150" end
		Icons = {
			Logo = { Image = "rbxassetid://83222639901823", Logo = true },
			Bullseye = "rbxassetid://88639165254091",
			Smile = { Image = Thumb(11955884989), RectOffset = Vector2.new(20, 20), RectSize = Vector2.new(110, 110) },
			Globe = "rbxassetid://11887653877",
			Bomb = Thumb(13424571238),
			Gear = "rbxassetid://9753762469",
			Robot = Thumb(78007610361363),
			HeartCrack = Thumb(15331784488),
			Wrench = Thumb(11435662333),
			Cube = Thumb(9802015008),
			Search = { Image = Thumb(85365761530931), RectOffset = Vector2.new(14, 14), RectSize = Vector2.new(122, 122) },
			Check = "rbxassetid://18856185133",
			User = "rbxassetid://18854794412",
			Users = "rbxassetid://6479819618",
			Plus = "rbxassetid://139167062679792",
			Trash = "rbxassetid://88050953687180",
			Checker = "rbxassetid://18274452449",
			Warning = "rbxassetid://11745872910",
			Error = "rbxassetid://5419926701",
			Info = "rbxassetid://7634887649",
			Arrow = "rbxassetid://153287088",
			Brush = "rbxassetid://10910211661",
			Eye = "rbxassetid://6473251976",
			Key = "rbxassetid://18854840832",
			Gun = "rbxassetid://3189074890",
			Knife = "rbxassetid://2992801749",
			Crown = "rbxassetid://6458974334",
			Lock = "rbxassetid://15117261700",
			Circle = "rbxassetid://9208578430",
		}
		Library.Icons = Icons
	end

	local Rgb = Color3.fromRGB
	local ThemeKeys = { "Background", "Tab", "Outline", "Inline", "Text", "Inactive Text", "Accent", "Element", "Gradient", "Shadow", "Hovered Element" }
	local Themes = {
		["Swift"] = {
			Background = Rgb(28, 28, 28), Tab = Rgb(37, 37, 37), Outline = Rgb(45, 45, 45), Inline = Rgb(28, 28, 28),
			Text = Rgb(230, 230, 230), ["Inactive Text"] = Rgb(148, 148, 148), Accent = Rgb(168, 234, 181),
			Element = Rgb(54, 54, 54), Gradient = Rgb(240, 240, 240), Shadow = Rgb(0, 0, 0), ["Hovered Element"] = Rgb(61, 61, 61),
			Popup = Rgb(37, 37, 37), ToggleFill = Rgb(69, 141, 84), Knob = Rgb(235, 253, 238), KnobOff = Rgb(134, 134, 134),
		},
		["Blossom"] = {
			Background = Rgb(40, 40, 40), Tab = Rgb(43, 47, 48), Outline = Rgb(56, 60, 61), Inline = Rgb(31, 30, 28),
			Text = Rgb(220, 222, 235), ["Inactive Text"] = Rgb(125, 128, 135), Accent = Rgb(86, 137, 200),
			Element = Rgb(40, 44, 43), Gradient = Rgb(187, 191, 191), Shadow = Rgb(0, 0, 0), ["Hovered Element"] = Rgb(65, 70, 73),
		},
		["Afterglow"] = {
			Background = Rgb(28, 24, 21), Tab = Rgb(37, 31, 28), Outline = Rgb(51, 46, 42), Inline = Rgb(34, 29, 25),
			Text = Rgb(255, 248, 240), ["Inactive Text"] = Rgb(148, 139, 130), Accent = Rgb(250, 140, 70),
			Element = Rgb(40, 33, 27), Gradient = Rgb(253, 184, 117), Shadow = Rgb(0, 0, 0), ["Hovered Element"] = Rgb(56, 45, 35),
		},
		["Frostbite"] = {
			Background = Rgb(16, 25, 28), Tab = Rgb(24, 34, 41), Outline = Rgb(44, 55, 61), Inline = Rgb(22, 31, 38),
			Text = Rgb(245, 254, 255), ["Inactive Text"] = Rgb(138, 154, 164), Accent = Rgb(100, 200, 245),
			Element = Rgb(25, 38, 47), Gradient = Rgb(160, 211, 240), Shadow = Rgb(0, 0, 0), ["Hovered Element"] = Rgb(36, 53, 62),
		},
		["Volt"] = {
			Background = Rgb(14, 19, 13), Tab = Rgb(21, 28, 21), Outline = Rgb(42, 47, 40), Inline = Rgb(17, 24, 16),
			Text = Rgb(250, 255, 242), ["Inactive Text"] = Rgb(135, 147, 131), Accent = Rgb(185, 245, 90),
			Element = Rgb(24, 35, 19), Gradient = Rgb(186, 240, 101), Shadow = Rgb(0, 0, 0), ["Hovered Element"] = Rgb(38, 51, 32),
		},
		["Obsidian"] = {
			Background = Rgb(11, 12, 16), Tab = Rgb(19, 20, 24), Outline = Rgb(36, 37, 39), Inline = Rgb(15, 16, 18),
			Text = Rgb(250, 251, 254), ["Inactive Text"] = Rgb(121, 122, 126), Accent = Rgb(150, 122, 245),
			Element = Rgb(21, 22, 26), Gradient = Rgb(179, 167, 212), Shadow = Rgb(0, 0, 0), ["Hovered Element"] = Rgb(32, 36, 39),
		},
		["Sakura Drift"] = {
			Background = Rgb(28, 23, 27), Tab = Rgb(41, 30, 36), Outline = Rgb(54, 45, 50), Inline = Rgb(35, 26, 31),
			Text = Rgb(255, 249, 254), ["Inactive Text"] = Rgb(158, 142, 152), Accent = Rgb(245, 135, 180),
			Element = Rgb(46, 31, 38), Gradient = Rgb(252, 178, 212), Shadow = Rgb(0, 0, 0), ["Hovered Element"] = Rgb(56, 41, 48),
		},
		["Neon Mirage"] = {
			Background = Rgb(14, 17, 26), Tab = Rgb(22, 26, 44), Outline = Rgb(42, 45, 60), Inline = Rgb(17, 20, 35),
			Text = Rgb(243, 246, 255), ["Inactive Text"] = Rgb(134, 139, 166), Accent = Rgb(40, 230, 210),
			Element = Rgb(23, 30, 49), Gradient = Rgb(107, 216, 254), Shadow = Rgb(0, 0, 0), ["Hovered Element"] = Rgb(35, 42, 68),
		},
		["Copper Dust"] = {
			Background = Rgb(30, 27, 22), Tab = Rgb(42, 34, 25), Outline = Rgb(61, 54, 46), Inline = Rgb(38, 31, 25),
			Text = Rgb(250, 240, 231), ["Inactive Text"] = Rgb(150, 138, 126), Accent = Rgb(200, 135, 70),
			Element = Rgb(45, 33, 24), Gradient = Rgb(196, 181, 139), Shadow = Rgb(0, 0, 0), ["Hovered Element"] = Rgb(53, 45, 43),
		},
		["Abyss"] = {
			Background = Rgb(7, 14, 16), Tab = Rgb(13, 24, 29), Outline = Rgb(30, 40, 42), Inline = Rgb(9, 19, 21),
			Text = Rgb(225, 241, 247), ["Inactive Text"] = Rgb(112, 128, 134), Accent = Rgb(30, 185, 165),
			Element = Rgb(12, 25, 31), Gradient = Rgb(78, 181, 174), Shadow = Rgb(0, 0, 0), ["Hovered Element"] = Rgb(21, 39, 43),
		},
		["Porcelain"] = {
			Background = Rgb(233, 232, 227), Tab = Rgb(246, 245, 240), Outline = Rgb(204, 203, 197), Inline = Rgb(251, 250, 245),
			Text = Rgb(48, 49, 54), ["Inactive Text"] = Rgb(121, 121, 113), Accent = Rgb(72, 112, 197),
			Element = Rgb(236, 237, 241), Gradient = Rgb(160, 171, 193), Shadow = Rgb(84, 82, 83), ["Hovered Element"] = Rgb(225, 225, 217),
		},
	}
	local ThemeOrder = { "Swift", "Blossom", "Afterglow", "Frostbite", "Volt", "Obsidian", "Sakura Drift", "Neon Mirage", "Copper Dust", "Abyss", "Porcelain" }
	Library.Themes = Themes
	Library.ThemeOrder = ThemeOrder
	Library.ThemeKeys = ThemeKeys

	local Theme = {}
	local DerivedKeys = { Popup = "Inline", ToggleFill = "Accent", Knob = "Text", KnobOff = "Inactive Text" }
	local ExplicitDerived = {}
	local function LoadPreset(Preset)
		for Key, Value in Preset do Theme[Key] = Value end
		for Derived, Base in DerivedKeys do
			ExplicitDerived[Derived] = Preset[Derived] ~= nil
			Theme[Derived] = Preset[Derived] or Preset[Base]
		end
	end
	LoadPreset(Themes.Swift)
	Library.Theme = Theme

	local ThemeRegistry = setmetatable({}, { __mode = "k" })
	local GradientRegistry = setmetatable({}, { __mode = "k" })
	local ThemeCallbacks = {}

	local function GradientSequence()
		return ColorSequence.new(Color3.new(1, 1, 1), Color3.new(1, 1, 1):Lerp(Theme.Gradient, 0.68))
	end

	function Library:Theme(Object, Property, Key)
		local Entry = ThemeRegistry[Object]
		if not Entry then
			Entry = {}
			ThemeRegistry[Object] = Entry
		end
		Entry[Property] = Key
		if Theme[Key] then Object[Property] = Theme[Key] end
		return Object
	end

	function Library:Unthemed(Object, Property)
		local Entry = ThemeRegistry[Object]
		if Entry then Entry[Property] = nil end
	end

	function Library:OnThemeChanged(Callback)
		table.insert(ThemeCallbacks, Callback)
	end

	function Library:SetThemeColor(Key, Color)
		if Theme[Key] == nil then return end
		Theme[Key] = Color
		for Object, Entry in ThemeRegistry do
			for Property, ThemeKey in Entry do
				if ThemeKey == Key then
					pcall(function() Object[Property] = Color end)
				end
			end
		end
		if Key == "Gradient" then
			local Sequence = GradientSequence()
			for Gradient in GradientRegistry do Gradient.Color = Sequence end
		end
		for Derived, Base in DerivedKeys do
			if Base == Key and not ExplicitDerived[Derived] then Library:SetThemeColor(Derived, Color) end
		end
		for _, Callback in ThemeCallbacks do task.spawn(Callback, Key, Color) end
	end

	function Library:SetTheme(Name)
		local Preset = Themes[Name]
		if not Preset then return end
		Library.ThemeName = Name
		Library.ApplyingTheme = true
		for Derived in DerivedKeys do ExplicitDerived[Derived] = Preset[Derived] ~= nil end
		for _, Key in ThemeKeys do
			Library:SetThemeColor(Key, Preset[Key])
			local Element = Library.Elements["Theme_" .. Key]
			if Element then Element:Set({ Color = Preset[Key], Alpha = 0 }, true) end
		end
		for Derived in DerivedKeys do
			if Preset[Derived] then Library:SetThemeColor(Derived, Preset[Derived]) end
		end
		Library.ApplyingTheme = false
	end

	function Library:AddTheme(Name, Colors)
		local Preset = {}
		for _, Key in ThemeKeys do Preset[Key] = Colors[Key] or Themes.Swift[Key] end
		for Derived in DerivedKeys do Preset[Derived] = Colors[Derived] end
		Themes[Name] = Preset
		if not table.find(ThemeOrder, Name) then table.insert(ThemeOrder, Name) end
		local Dropdown = Library.Elements.__ThemeName
		if Dropdown then Dropdown:SetOptions(ThemeOrder, true) end
	end

	local CasingOrder; do
		local TextRegistry = setmetatable({}, { __mode = "k" })
		CasingOrder = { "Normal", "lower case", "Upper Case", "BOLD CASE" }
		Library.CasingOrder = CasingOrder

		local function ApplyCase(Raw)
			Raw = tostring(Raw or "")
			local Mode = Library.Casing
			if Mode == "lower case" then
				return Raw:lower()
			elseif Mode == "Upper Case" then
				return (Raw:gsub("(%a)([%w_']*)", function(First, Rest) return First:upper() .. Rest:lower() end))
			elseif Mode == "BOLD CASE" then
				return Raw:upper()
			end
			return Raw
		end
		Library.ApplyCase = ApplyCase

		function Library:SetText(Object, Raw)
			TextRegistry[Object] = tostring(Raw or "")
			Object.Text = ApplyCase(Raw)
		end

		function Library:GetRawText(Object)
			return TextRegistry[Object] or Object.Text
		end

		function Library:SetCasing(Mode)
			if not table.find(CasingOrder, Mode) then return end
			Library.Casing = Mode
			for Object, Raw in TextRegistry do
				Object.Text = ApplyCase(Raw)
			end
		end
	end

	local function Connect(Signal, Callback)
		local Connection = Signal:Connect(Callback)
		table.insert(Library.Connections, Connection)
		return Connection
	end
	Library.Connect = function(_, Signal, Callback) return Connect(Signal, Callback) end

	local Layout = {}; do
		local Entries, Snapshot, LastSaved = {}, { Version = 1, Items = {} }, nil
		local Path = Library.Folder .. "/layout.json"
		local function Finite(Value)
			return type(Value) == "number" and Value == Value and math.abs(Value) < 10000000
		end
		local function Record(Value)
			if type(Value) ~= "table" then return nil end
			if (Value.Kind == "Position" or Value.Kind == "Offset") and Finite(Value.X) and Finite(Value.Y) then
				local Min, Max = Value.Kind == "Position" and 0 or -2, Value.Kind == "Position" and 1 or 2
				return { Kind = Value.Kind, X = math.clamp(Value.X, Min, Max), Y = math.clamp(Value.Y, Min, Max) }
			end
			if Value.Kind == "Section" and type(Value.Floating) == "boolean" and (Value.Side == 1 or Value.Side == 2) and Finite(Value.Order) then
				local Source = Value.Position
				local Position = type(Source) == "table" and Source.Kind == "Position" and Finite(Source.X) and Finite(Source.Y) and { Kind = "Position", X = math.clamp(Source.X, 0, 1), Y = math.clamp(Source.Y, 0, 1) } or nil
				if Value.Floating and (not Position or Position.Kind ~= "Position") then return nil end
				return { Kind = "Section", Floating = Value.Floating, Side = Value.Side, Order = math.clamp(math.floor(Value.Order), 0, 10000), Position = Position }
			end
			return nil
		end
		function Layout.Viewport(Target)
			local Size = Target.Parent and Target.Parent.AbsoluteSize
			if not Size or Size.X <= 0 or Size.Y <= 0 then
				local Camera = Workspace.CurrentCamera
				Size = Camera and Camera.ViewportSize
			end
			return Size and Size.X > 0 and Size.Y > 0 and Size or nil
		end
		function Layout.ReadPosition(Target)
			local Viewport = Layout.Viewport(Target)
			if not Viewport then return nil end
			local Position = Target.Position
			return { Kind = "Position", X = Position.X.Scale + Position.X.Offset / Viewport.X, Y = Position.Y.Scale + Position.Y.Offset / Viewport.Y }
		end
		function Layout.SetPosition(Target, Value)
			if not Target.Parent or Value.Kind ~= "Position" then return end
			local Viewport = Layout.Viewport(Target)
			if not Viewport then return end
			local Size, Anchor = Target.AbsoluteSize, Target.AnchorPoint
			local Width = math.min(math.max(Size.X, Target.Size.X.Offset, 0), math.max(Viewport.X - 12, 0))
			local Height = math.min(math.max(Size.Y, Target.Size.Y.Offset, 0), math.max(Viewport.Y - 12, 0))
			local MinX, MaxX = 6 + Width * Anchor.X, Viewport.X - 6 - Width * (1 - Anchor.X)
			local MinY, MaxY = 6 + Height * Anchor.Y, Viewport.Y - 6 - Height * (1 - Anchor.Y)
			Target.Position = UDim2.fromScale(math.clamp(Value.X * Viewport.X, MinX, math.max(MinX, MaxX)) / Viewport.X, math.clamp(Value.Y * Viewport.Y, MinY, math.max(MinY, MaxY)) / Viewport.Y)
		end
		function Layout.Register(Key, Save, Load)
			local Entry = { Save = Save, Load = Load }
			Entries[Key] = Entry
			local function Restore()
				local Value = Snapshot.Items[Key]
				if not Library.Unloaded and Entries[Key] == Entry and Value then pcall(Load, Value) end
			end
			Restore()
			task.defer(Restore)
		end
		function Layout.TrackPosition(Key, Target)
			Layout.Register(Key, function() return Layout.ReadPosition(Target) end, function(Value) Layout.SetPosition(Target, Value) end)
			local function ClampPosition()
				local Value = Snapshot.Items[Key] or Layout.ReadPosition(Target)
				if Value then pcall(Layout.SetPosition, Target, Value) end
			end
			Connect(Target:GetPropertyChangedSignal("AbsoluteSize"), ClampPosition)
			if Target.Parent then
				Connect(Target.Parent:GetPropertyChangedSignal("AbsoluteSize"), ClampPosition)
			end
		end
		function Library:GetLayout()
			local Items = {}
			for Key, Value in Snapshot.Items do Items[Key] = Record(Value) end
			for Key, Entry in Entries do
				local Okay, Value = pcall(Entry.Save)
				if Okay then Items[Key] = Record(Value) or Items[Key] end
			end
			Snapshot = { Version = 1, Items = Items }
			return { Version = 1, Items = table.clone(Items) }
		end
		function Library:SaveLayout()
			local Data = Library:GetLayout()
			Env.SwiftLayout = Data
			local Okay, Json = pcall(HttpService.JSONEncode, HttpService, Data)
			if not Okay or type(Json) ~= "string" then return false end
			if Json == LastSaved then return true end
			local Written, Result = pcall(FS.Write, Path, Json)
			if Written and Result ~= false then LastSaved = Json return true end
			return false
		end
		function Library:LoadLayout(Data)
			if Data == nil then Data = FS.Read(Path) or Env.SwiftLayout end
			if type(Data) == "string" then
				local Okay, Decoded = pcall(HttpService.JSONDecode, HttpService, Data)
				if not Okay then return false end
				Data = Decoded
			end
			if type(Data) ~= "table" or Data.Version ~= 1 or type(Data.Items) ~= "table" then return false end
			local Items = {}
			for Key, Value in Data.Items do
				if type(Key) == "string" and #Key <= 256 then Items[Key] = Record(Value) end
			end
			Snapshot = { Version = 1, Items = Items }
			for Key, Entry in Entries do if Items[Key] then pcall(Entry.Load, Items[Key]) end end
			return true
		end
		Library:LoadLayout()
	end

	local function Tween(Object, Properties, Time, Style, Direction)
		local Info = TweenInfo.new(Time or Library.TweenTime, Style or Library.EasingStyle, Direction or Enum.EasingDirection.Out)
		local Created = TweenService:Create(Object, Info, Properties)
		Created:Play()
		return Created
	end
	Library.Tween = function(_, ...) return Tween(...) end

	local function Create(Class, Properties, Children)
		local Object = Instance.new(Class)
		local IsText = Class == "TextLabel" or Class == "TextButton" or Class == "TextBox"
		local Parent, RawText

		if Object:IsA("GuiObject") then
			Object.BorderSizePixel = 0
		end
		if IsText then
			Fonts:Apply(Object, Enum.FontWeight.Bold)
			Object.TextSize = 13
			if Class ~= "TextButton" then Object.BackgroundTransparency = 1 end
			Object.TextColor3 = Theme.Text
			Object.Text = ""
		end
		if Class == "TextButton" or Class == "ImageButton" then
			Object.AutoButtonColor = false
		end
		if Class == "ImageLabel" or Class == "ImageButton" then
			Object.BackgroundTransparency = 1
		end
		if Class == "ScrollingFrame" then
			Object.BackgroundTransparency = 1
			Object.ScrollBarThickness = 0
			Object.CanvasSize = UDim2.new()
			Object.AutomaticCanvasSize = Enum.AutomaticSize.Y
			Object.ScrollingDirection = Enum.ScrollingDirection.Y
			Object.ElasticBehavior = Enum.ElasticBehavior.Never
			Object.ScrollBarImageColor3 = Theme.Accent
		end

		for Key, Value in Properties or {} do
			if Key == "Parent" then
				Parent = Value
			elseif Key == "Theme" then
				for Property, ThemeKey in Value do Library:Theme(Object, Property, ThemeKey) end
			elseif Key == "Text" and IsText and Class ~= "TextBox" and not (Properties.NoCase) then
				RawText = Value
			elseif Key ~= "NoCase" and Key ~= "Weight" then
				Object[Key] = Value
			end
		end

		if IsText and Properties and Properties.Weight then
			Fonts:Apply(Object, typeof(Properties.Weight) == "EnumItem" and Properties.Weight or Enum.FontWeight[Properties.Weight])
		end

		if RawText ~= nil then
			Library:SetText(Object, RawText)
		elseif IsText and Properties and Properties.NoCase and Properties.Text then
			Object.Text = Properties.Text
		end

		for _, Child in Children or {} do
			Child.Parent = Object
		end
		if Parent then Object.Parent = Parent end
		return Object
	end
	Library.Create = function(_, ...) return Create(...) end

	local function Corner(Parent, Radius)
		return Create("UICorner", { CornerRadius = UDim.new(0, Radius or 5), Parent = Parent })
	end

	local function Stroke(Parent, Key, Inner, Thickness)
		local Object = Create("UIStroke", {
			Thickness = Thickness or 1,
			ApplyStrokeMode = Enum.ApplyStrokeMode.Border,
			LineJoinMode = Enum.LineJoinMode.Round,
			Theme = { Color = Key or "Outline" },
			Parent = Parent,
		})
		if Inner ~= false then
			pcall(function() Object.BorderStrokePosition = Enum.BorderStrokePosition.Inner end)
		end
		return Object
	end

	local function Padding(Parent, Top, Bottom, Left, Right)
		return Create("UIPadding", {
			PaddingTop = UDim.new(0, Top or 0),
			PaddingBottom = UDim.new(0, Bottom or Top or 0),
			PaddingLeft = UDim.new(0, Left or Top or 0),
			PaddingRight = UDim.new(0, Right or Left or Top or 0),
			Parent = Parent,
		})
	end

	local function ListLayout(Parent, Pad, Direction, HAlign, VAlign)
		return Create("UIListLayout", {
			Padding = UDim.new(0, Pad or 0),
			FillDirection = Direction or Enum.FillDirection.Vertical,
			HorizontalAlignment = HAlign or Enum.HorizontalAlignment.Left,
			VerticalAlignment = VAlign or Enum.VerticalAlignment.Top,
			SortOrder = Enum.SortOrder.LayoutOrder,
			Parent = Parent,
		})
	end

	local function Shade(Parent)
		local Gradient = Create("UIGradient", { Rotation = 90, Color = GradientSequence(), Parent = Parent })
		GradientRegistry[Gradient] = true
		return Gradient
	end

	local function Shadow(Parent, Transparency, Blur)
		local Ok, Object = pcall(Instance.new, "UIShadow")
		if not Ok then return nil end
		pcall(function()
			Object.BlurRadius = UDim.new(0, Blur or 20)
			Object.Transparency = Transparency or 0.5
		end)
		Library:Theme(Object, "Color", "Shadow")
		Object.Parent = Parent
		return Object
	end

	local DrawnIcons = {
		Bullet = function(Holder)
			local Parts = {
				{ Position = UDim2.new(0, 0, 0.5, 0), Size = UDim2.new(0.17, 0, 0.56, 0), Radius = 1 },
				{ Position = UDim2.new(0.27, 0, 0.5, 0), Size = UDim2.new(0.42, 0, 0.56, 0), Radius = 1 },
				{ Position = UDim2.new(0.44, 0, 0.5, 0), Size = UDim2.new(0.56, 0, 0.56, 0), Radius = 99 },
			}
			local Frames = {}
			for _, Spec in Parts do
				local Frame = Instance.new("Frame")
				Frame.Name = "Glyph"
				Frame.AnchorPoint = Vector2.new(0, 0.5)
				Frame.Position, Frame.Size = Spec.Position, Spec.Size
				Frame.BorderSizePixel = 0
				local Round = Instance.new("UICorner")
				Round.CornerRadius = UDim.new(0, Spec.Radius)
				Round.Parent = Frame
				Frame.Parent = Holder
				table.insert(Frames, Frame)
			end
			return Frames
		end,
		Cross = function(Holder)
			local Frames = {}
			for _, Size in { UDim2.new(1, 0, 0, 2), UDim2.new(0, 2, 1, 0) } do
				local Frame = Instance.new("Frame")
				Frame.Name = "Glyph"
				Frame.AnchorPoint = Vector2.new(0.5, 0.5)
				Frame.Position, Frame.Size = UDim2.fromScale(0.5, 0.5), Size
				Frame.BorderSizePixel = 0
				local Round = Instance.new("UICorner")
				Round.CornerRadius = UDim.new(0, 1)
				Round.Parent = Frame
				Frame.Parent = Holder
				table.insert(Frames, Frame)
			end
			return Frames
		end,
	}

	local function SetIcon(Image, Icon)
		for _, Child in Image:GetChildren() do
			if Child.Name == "Glyph" then Child:Destroy() end
		end
		if Image:GetAttribute("GlyphConnection") then Image:SetAttribute("GlyphConnection", nil) end
		if type(Icon) == "string" and Icons[Icon] then Icon = Icons[Icon] end
		Image.ImageRectOffset, Image.ImageRectSize = Vector2.zero, Vector2.zero
		Image.Rotation = 0
		if type(Icon) == "string" and DrawnIcons[Icon] then
			Image.Image = ""
			local Frames = DrawnIcons[Icon](Image)
			local function Sync()
				for _, Frame in Frames do
					Frame.BackgroundColor3 = Image.ImageColor3
					Frame.BackgroundTransparency = Image.ImageTransparency
				end
			end
			Sync()
			Image:GetPropertyChangedSignal("ImageColor3"):Connect(Sync)
			Image:GetPropertyChangedSignal("ImageTransparency"):Connect(Sync)
		elseif type(Icon) == "table" then
			Image.Image = Icon.Image or ""
			Image.Rotation = Icon.Rotation or 0
			if Icon.RectOffset then Image.ImageRectOffset = Icon.RectOffset end
			if Icon.RectSize then Image.ImageRectSize = Icon.RectSize end
		elseif type(Icon) == "string" then
			Image.Image = Icon
		else
			Image.Image = ""
		end
	end
	Icons.Bullet = "Bullet"
	Icons.Cross = "Cross"
	Library.SetIcon = function(_, ...) return SetIcon(...) end

	local function MousePosition()
		return UserInputService:GetMouseLocation() - GuiService:GetGuiInset()
	end

	local function IsMouseOver(Object, Margin)
		if not Object or not Object.Parent then return false end
		Margin = Margin or 0
		local Position, Size = Object.AbsolutePosition, Object.AbsoluteSize
		local Point = MousePosition()
		return Point.X >= Position.X - Margin and Point.X <= Position.X + Size.X + Margin
			and Point.Y >= Position.Y - Margin and Point.Y <= Position.Y + Size.Y + Margin
	end
	Library.IsMouseOver = function(_, ...) return IsMouseOver(...) end

	local function IsVisibleOnScreen(Object)
		local Current = Object
		while Current and Current:IsA("GuiObject") do
			if not Current.Visible then return false end
			Current = Current.Parent
		end
		if Current and Current:IsA("LayerCollector") then
			return Current.Enabled
		end
		return Current ~= nil
	end

	local function Round(Number, Increment)
		Increment = Increment or 1
		return math.floor(Number / Increment + 0.5) * Increment
	end

	local function Clamp(Number, Min, Max)
		return math.max(Min, math.min(Max, Number))
	end

	local function KeyName(Key)
		if Key == nil or Key == "None" then return "NONE" end
		if typeof(Key) == "EnumItem" then return Key.Name:upper() end
		return tostring(Key):upper()
	end

	local function KeyFromName(Name)
		if Name == nil or Name == "None" or Name == "NONE" then return nil end
		if typeof(Name) == "EnumItem" then return Name end
		local Ok, Key = pcall(function() return Enum.KeyCode[Name] end)
		if Ok and Key then return Key end
		Ok, Key = pcall(function() return Enum.UserInputType[Name] end)
		if Ok and Key then return Key end
		return nil
	end

	local function InputMatches(Input, Key)
		if Key == nil then return false end
		if Key.EnumType == Enum.KeyCode then
			return Input.KeyCode == Key
		end
		return Input.UserInputType == Key
	end

	local function GetGuiParent()
		local Ok, Hui = pcall(function()
			return (typeof(gethui) == "function" and gethui()) or (typeof(Env.gethui) == "function" and Env.gethui()) or nil
		end)
		if Ok and Hui then return Hui end
		local CoreOk, CoreGui = pcall(function()
			local Gui = Service("CoreGui")
			local _ = Gui:GetChildren()
			local Test = Instance.new("ScreenGui")
			Test.Parent = Gui
			Test:Destroy()
			return Gui
		end)
		if CoreOk and CoreGui then return CoreGui end
		return LocalPlayer:WaitForChild("PlayerGui")
	end

	local function ProtectGui(Gui)
		if typeof(Env.syn) == "table" and typeof(Env.syn.protect_gui) == "function" then
			pcall(Env.syn.protect_gui, Gui)
		end
	end

	local FlagCounter = 0
	local function NextFlag(Hint)
		FlagCounter += 1
		return (Hint and tostring(Hint):gsub("%s+", "_") or "Flag") .. "_" .. FlagCounter
	end

	local function SafeCall(Callback, ...)
		if type(Callback) ~= "function" then return end
		local Ok, Error = pcall(Callback, ...)
		if not Ok then warn("[Swift] callback error: " .. tostring(Error)) end
	end

	local ThemeTween; do
		local GuiParent = GetGuiParent()
		local function Layer(Name, Order)
			local Gui = Instance.new("ScreenGui")
			Gui.Name = FS.Native and HttpService:GenerateGUID(false) or Name
			Gui.DisplayOrder = Order
			Gui.IgnoreGuiInset = true
			Gui.ResetOnSpawn = false
			Gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
			ProtectGui(Gui)
			Gui.Parent = GuiParent
			return Gui
		end
		Library.HudGui = Layer("SwiftHud", 9000)
		Library.MenuGui = Layer("SwiftMenu", 9001)
		Library.OverlayGui = Layer("SwiftOverlay", 9002)

		function ThemeTween(Object, Property, Key, Time)
			local Entry = ThemeRegistry[Object]
			if not Entry then
				Entry = {}
				ThemeRegistry[Object] = Entry
			end
			Entry[Property] = Key
			return Tween(Object, { [Property] = Theme[Key] }, Time)
		end
	end

	local Privacy = {}; do
		local Widgets, Roots, Connections = {}, {}, {}
		local TextOwners, ImageOwners = setmetatable({}, { __mode = "k" }), setmetatable({}, { __mode = "k" })
		local OwnImages, Names = {}, {}
		local Black, White = Color3.new(0, 0, 0), Color3.new(1, 1, 1)
		local Generation, AvatarRequest = 0, 0
		Library.AnonymousMode, Library.AnonymousName, Library.AnonymousGame = false, "...", false
		if LocalPlayer then
			for _, Name in { LocalPlayer.Name, LocalPlayer.DisplayName } do
				if Name ~= "" and not table.find(Names, Name) then table.insert(Names, Name) end
			end
		end

		local function Escape(Text)
			return Text:gsub("&", "&amp;"):gsub("<", "&lt;"):gsub(">", "&gt;")
		end
		local function Replace(Text, Rich)
			local Alias = Rich and Escape(Library.AnonymousName) or Library.AnonymousName
			local Parts, Cursor = {}, 1
			while Cursor <= #Text do
				local First, Last
				for _, Name in Names do
					local Start, Finish = Text:find(Name, Cursor, true)
					while Start and (Text:sub(Start - 1, Start - 1):match("[%w_]") or Text:sub(Finish + 1, Finish + 1):match("[%w_]")) do
						Start, Finish = Text:find(Name, Finish + 1, true)
					end
					if Start and (not First or Start < First or Start == First and Finish > Last) then First, Last = Start, Finish end
				end
				if not First then table.insert(Parts, Text:sub(Cursor)); break end
				table.insert(Parts, Text:sub(Cursor, First - 1))
				table.insert(Parts, Alias)
				Cursor = Last + 1
			end
			return table.concat(Parts)
		end
		local function Mask(Text, Rich)
			if not Rich then return Replace(Text, false) end
			local Parts, Cursor = {}, 1
			while Cursor <= #Text do
				local First, Last = Text:find("<[^>]*>", Cursor)
				if not First then table.insert(Parts, Replace(Text:sub(Cursor), true)); break end
				table.insert(Parts, Replace(Text:sub(Cursor, First - 1), true))
				table.insert(Parts, Text:sub(First, Last))
				Cursor = Last + 1
			end
			return table.concat(Parts)
		end
		local function LibraryWidget(Widget)
			for _, Root in { Library.MenuGui, Library.HudGui, Library.OverlayGui } do
				if Root and (Widget == Root or Widget:IsDescendantOf(Root)) then return true end
			end
			return false
		end
		local function Included(Widget)
			if LibraryWidget(Widget) then return true end
			for Root, Entry in Roots do
				if Entry.Game and Root.Parent == LocalPlayer and Widget:IsDescendantOf(Root) then return true end
			end
			return false
		end
		local function Disconnect(List)
			for _, Connection in List do pcall(Connection.Disconnect, Connection) end
			table.clear(List)
		end
		local function Forget(Widget, Restore)
			local Record = Widgets[Widget]
			if not Record then return end
			Widgets[Widget] = nil
			Record.Active = false
			Disconnect(Record.Connections)
			if Restore then
				for Key, Value in Record.Values do pcall(function() Widget[Key] = Value end) end
			end
		end
		local function Apply(Widget, Record)
			if not Privacy.Active or Library.Unloaded or not Record.Active or not Widget.Parent then return end
			Record.Writing = true
			pcall(function()
				if Record.Values.Text ~= nil then
					local Text = TextOwners[Widget] and (Widget.RichText and Escape(Library.AnonymousName) or Library.AnonymousName) or Mask(Record.Values.Text, Widget.RichText)
					Record.Applied.Text = Text
					Widget.Text = Text
				else
					local Image = Record.Values.Image
					local Own = ImageOwners[Widget] == true or Image ~= "" and OwnImages[Image] == true
						or LocalPlayer and Image:find("rbxthumb://", 1, true) and Image:match("[?&]id=(%d+)") == tostring(LocalPlayer.UserId)
					for Key, Value in Record.Values do
						if Own then
							if Key == "Image" then Value = Library.AnonymousImage or ""
							elseif Key == "ImageColor3" then Value = Library.AnonymousImage and White or Black
							elseif Key == "BackgroundColor3" then Value = Black
							elseif Key == "BackgroundTransparency" and not Library.AnonymousImage then Value = 0 end
						end
						Record.Applied[Key] = Value
						Widget[Key] = Value
					end
				end
			end)
			Record.Writing = false
		end
		local function Add(Widget)
			if not Privacy.Active or Widgets[Widget] or not Included(Widget) then return end
			local Text = Widget:IsA("TextLabel") or Widget:IsA("TextButton")
			if not Text and not Widget:IsA("ImageLabel") and not Widget:IsA("ImageButton") then return end
			local Record = { Active = true, Values = {}, Applied = {}, Connections = {} }
			Widgets[Widget] = Record
			for _, Key in Text and { "Text" } or { "Image", "ImageColor3", "BackgroundColor3", "BackgroundTransparency" } do
				Record.Values[Key] = Widget[Key]
				table.insert(Record.Connections, Widget:GetPropertyChangedSignal(Key):Connect(function()
					if not Record.Active or Record.Writing then return end
					local Value = Widget[Key]
					if Value == Record.Applied[Key] then return end
					Record.Values[Key] = Value
					Apply(Widget, Record)
				end))
			end
			if Text then table.insert(Record.Connections, Widget:GetPropertyChangedSignal("RichText"):Connect(function() Apply(Widget, Record) end)) end
			table.insert(Record.Connections, Widget.Destroying:Connect(function() Forget(Widget, false) end))
			Apply(Widget, Record)
		end
		local function Watch(Root, Game)
			if not Root or Roots[Root] then return end
			local Entry, Token = { Game = Game, Connections = {} }, Generation
			Roots[Root] = Entry
			table.insert(Entry.Connections, Root.DescendantAdded:Connect(Add))
			table.insert(Entry.Connections, Root.DescendantRemoving:Connect(function(Widget)
				task.defer(function()
					if Privacy.Active and Generation == Token and not Included(Widget) then Forget(Widget, true) end
				end)
			end))
			for _, Widget in Root:GetDescendants() do Add(Widget) end
		end
		function Privacy:Stop()
			self.Active = false
			Generation += 1
			Disconnect(Connections)
			for _, Entry in Roots do Disconnect(Entry.Connections) end
			table.clear(Roots)
			local Pending = {}
			for Widget in Widgets do table.insert(Pending, Widget) end
			for _, Widget in Pending do Forget(Widget, true) end
		end
		function Privacy:Start()
			self.Active, self.Game = true, Library.AnonymousGame
			for _, Root in { Library.MenuGui, Library.HudGui, Library.OverlayGui } do Watch(Root, false) end
			if self.Game and LocalPlayer then
				Watch(LocalPlayer:FindFirstChildOfClass("PlayerGui"), true)
				table.insert(Connections, LocalPlayer.ChildAdded:Connect(function(Child)
					if self.Active and Child:IsA("PlayerGui") then Watch(Child, true) end
				end))
				table.insert(Connections, LocalPlayer.ChildRemoved:Connect(function(Child)
					local Entry = Roots[Child]
					if not Entry or not Entry.Game then return end
					Disconnect(Entry.Connections)
					Roots[Child] = nil
					local Pending = {}
					for Widget in Widgets do if not Included(Widget) then table.insert(Pending, Widget) end end
					for _, Widget in Pending do Forget(Widget, true) end
				end))
			end
		end
		function Privacy:Refresh()
			for Widget, Record in Widgets do Apply(Widget, Record) end
		end
		function Library:GetAnonymousText(Text, Rich)
			Text = tostring(Text or "")
			return self.AnonymousMode and Mask(Text, Rich) or Text
		end
		function Library:SetPlayerText(Widget, Player, Text)
			TextOwners[Widget] = Player == LocalPlayer and LocalPlayer ~= nil or nil
			self:SetText(Widget, Text)
			if Widgets[Widget] then Apply(Widget, Widgets[Widget]) end
		end
		function Library:SetPlayerAvatar(Widget, Player, Image)
			Image = tostring(Image or "")
			ImageOwners[Widget] = Player == LocalPlayer and LocalPlayer ~= nil or nil
			if ImageOwners[Widget] and Image ~= "" then OwnImages[Image] = true end
			Widget.Image = Image
			if Widgets[Widget] then Apply(Widget, Widgets[Widget]) end
		end
		function Library:SetAnonymous(Value)
			if self.Unloaded then return self end
			self.AnonymousMode = Value == true
			if self.AnonymousMode then
				if not Privacy.Active or Privacy.Game ~= self.AnonymousGame then Privacy:Stop(); Privacy:Start() end
				Privacy:Refresh()
			else Privacy:Stop() end
			if self.Watermark then self.Watermark:_Render() end
			return self
		end
		function Library:SetAnonymousName(Value)
			local Name = tostring(Value or ""):gsub("[%c]", ""):match("^%s*(.-)%s*$")
			self.AnonymousName = Name ~= "" and Name:sub(1, 40) or "..."
			return self:SetAnonymous(self.AnonymousMode)
		end
		function Library:SetAnonymousGame(Value)
			self.AnonymousGame = Value == true
			return self:SetAnonymous(self.AnonymousMode)
		end
		function Library:SetAnonymousAvatar(Value)
			AvatarRequest += 1
			local Request = AvatarRequest
			local Input = tostring(Value or ""):match("^%s*(.-)%s*$")
			if self.Unloaded then return false end
			if Input == "" then self.AnonymousImage = nil; self:SetAnonymous(self.AnonymousMode); return true end
			local UserId = tonumber(Input)
			local function Notify(Text)
				if type(self.Notify) == "function" then pcall(self.Notify, self, { Title = "Anonymous Mode", Text = Text, Type = "Warning" }) end
			end
			if not UserId or UserId ~= UserId or UserId < 1 or UserId > 9007199254740991 or UserId % 1 ~= 0 then Notify("Enter a valid avatar user ID."); return false end
			task.spawn(function()
				if self.Unloaded or Request ~= AvatarRequest then return end
				local Okay = pcall(Players.GetNameFromUserIdAsync, Players, UserId)
				if self.Unloaded or Request ~= AvatarRequest then return end
				if not Okay then Notify("Avatar user ID was not found."); return end
				local Loaded, Image = pcall(Players.GetUserThumbnailAsync, Players, UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size150x150)
				if self.Unloaded or Request ~= AvatarRequest then return end
				self.AnonymousImage = Loaded and type(Image) == "string" and Image ~= "" and Image or "rbxthumb://type=AvatarHeadShot&id=" .. UserId .. "&w=150&h=150"
				self:SetAnonymous(self.AnonymousMode)
			end)
			return true
		end
	end

	local PlacePopup, PopupPanel, FadePopup; do
		local Popups = Library.PopupStack

		local function IsPopupAncestor(Ancestor, Popup)
			local Current = Popup.ParentPopup
			while Current do
				if Current == Ancestor then return true end
				Current = Current.ParentPopup
			end
			return false
		end

		function Library:ClosePopup(Popup)
			local Index = table.find(Popups, Popup)
			if not Index then return end
			for Position = #Popups, Index, -1 do
				local Closing = table.remove(Popups, Position)
				Closing.Open = false
				SafeCall(Closing.OnClose, Closing)
			end
		end

		function Library:CloseAllPopups()
			for Position = #Popups, 1, -1 do
				if Popups[Position] then Library:ClosePopup(Popups[Position]) end
			end
		end

		function Library:OpenPopup(Popup)
			for Position = #Popups, 1, -1 do
				local Other = Popups[Position]
				if Other ~= Popup.ParentPopup and not IsPopupAncestor(Other, Popup) then
					Library:ClosePopup(Other)
				else
					break
				end
			end
			Popup.Open = true
			table.insert(Popups, Popup)
			SafeCall(Popup.Update, Popup)
		end

		Connect(UserInputService.InputBegan, function(Input)
			if Input.UserInputType ~= Enum.UserInputType.MouseButton1 and Input.UserInputType ~= Enum.UserInputType.Touch then return end
			for Position = #Popups, 1, -1 do
				local Popup = Popups[Position]
				if not Popup then continue end
				if IsMouseOver(Popup.Frame) or (Popup.Owner and IsMouseOver(Popup.Owner)) then break end
				Library:ClosePopup(Popup)
			end
		end)

		Connect(RunService.RenderStepped, function()
			for Position = #Popups, 1, -1 do
				local Popup = Popups[Position]
				if not Popup then continue end
				local Watched = Popup.Owner or Popup.Anchor
				if Watched and not IsVisibleOnScreen(Watched) then
					Library:ClosePopup(Popup)
				else
					SafeCall(Popup.Update, Popup)
				end
			end
		end)

		local PopupTargets = setmetatable({}, { __mode = "k" })
		function PlacePopup(Frame, Owner, OffsetX, OffsetY, AlignRight)
			local Gui = Library.OverlayGui
			local Origin, Viewport = Gui.AbsolutePosition, Gui.AbsoluteSize
			local Position, Size = Owner.AbsolutePosition, Owner.AbsoluteSize
			local Width, Height = Frame.AbsoluteSize.X, Frame.AbsoluteSize.Y
			local X = AlignRight and (Position.X + Size.X - Width + (OffsetX or 0)) or (Position.X + (OffsetX or 0))
			local Y = Position.Y + Size.Y + (OffsetY or 0)
			if Y + Height > Origin.Y + Viewport.Y - 6 then
				Y = math.max(Origin.Y + 6, Position.Y - Height - (OffsetY or 0))
			end
			X = Clamp(X, Origin.X + 6, math.max(Origin.X + 6, Origin.X + Viewport.X - Width - 6))
			local Target = Vector2.new(math.floor(X - Origin.X + 0.5), math.floor(Y - Origin.Y + 0.5))
			if PopupTargets[Frame] ~= Target or not Frame.Visible then
				PopupTargets[Frame] = Target
				Frame.Position = UDim2.fromOffset(Target.X, Target.Y)
			end
		end

		function PopupPanel(Size, Name, Radius)
			local Frame = Create("CanvasGroup", {
				Name = Name or "Popup",
				Size = Size,
				Theme = { BackgroundColor3 = "Popup" },
				GroupTransparency = 1,
				Active = true,
				Visible = false,
				ZIndex = 10,
				Parent = Library.OverlayGui,
			})
			Corner(Frame, Radius or 6)
			Stroke(Frame, "Outline")
			return Frame
		end

		local FadeTokens = setmetatable({}, { __mode = "k" })
		local FadeBases = setmetatable({}, { __mode = "k" })
		function FadePopup(Frame, Open, OffsetY)
			local Token = {}
			FadeTokens[Frame] = Token
			local Target = PopupTargets[Frame]
			local Base = FadeBases[Frame] or (Target and UDim2.fromOffset(Target.X, Target.Y)) or Frame.Position
			if Open then
				FadeBases[Frame] = nil
				Frame.Visible = true
				Frame.GroupTransparency = 1
				Frame.Position = Base - UDim2.fromOffset(0, OffsetY or 5)
				Tween(Frame, { Position = Base, GroupTransparency = 0 }, 0.15, Enum.EasingStyle.Quad)
			else
				FadeBases[Frame] = Base
				Tween(Frame, { Position = Base - UDim2.fromOffset(0, 14) }, 0.2, Enum.EasingStyle.Quad)
				Tween(Frame, { GroupTransparency = 1 }, 0.18, Enum.EasingStyle.Sine).Completed:Connect(function()
					if FadeTokens[Frame] ~= Token then return end
					FadeBases[Frame] = nil
					Frame.Visible = false
					Frame.Position = Base
				end)
			end
		end
	end

	do
		local LOGO_SCALE = 420 / 231
		local LOGO_SHIFT = Vector2.new(2 / 420, -8 / 420)

		function Library:Logo(Parent, Size, Icon)
			Size = Size or 20
			local Holder = Create("Frame", { Name = "Logo", Size = UDim2.fromOffset(Size, Size), BackgroundTransparency = 1, Parent = Parent })
			local ImageSize = Size * LOGO_SCALE
			local IsLogo = Icon == nil or Icon == "Logo"
			local Image = Create("ImageLabel", {
				AnchorPoint = Vector2.new(0.5, 0.5),
				Position = IsLogo and UDim2.new(0.5, ImageSize * LOGO_SHIFT.X, 0.5, ImageSize * LOGO_SHIFT.Y) or UDim2.fromScale(0.5, 0.5),
				Size = IsLogo and UDim2.fromOffset(ImageSize, ImageSize) or UDim2.fromOffset(Size, Size),
				Theme = { ImageColor3 = "Text" },
				Parent = Holder,
			})
			SetIcon(Image, Icon or "Logo")
			Holder:SetAttribute("Logo", true)
			return Holder, Image
		end
	end

	local Window, Tab, Section; do
		Window = {}
		Window.__index = Window
		Tab = {}
		Tab.__index = Tab
		Section = {}
		Section.__index = Section
		Library.Classes = { Window = Window, Tab = Tab, Section = Section }

		local MENU_SIZE = Vector2.new(600, 570)
		local MENU_RADIUS = 8
		local SIDEBAR_WIDTH = 141

		function Library:CreateWindow(Config)
			Config = Config or {}
			local Self = setmetatable({
				Title = Config.Title or "Swift",
				Tabs = {},
				Sections = {},
				Floating = {},
				Categories = {},
				Open = true,
				LayoutCounter = 0,
				ZCounter = 10,
			}, Window)
			table.insert(Library.Windows, Self)
			Library.Window = Self

			local Holder = Create("Frame", {
				Name = "Menu",
				AnchorPoint = Vector2.new(0.5, 0.5),
				Position = Config.Position or UDim2.fromScale(0.5, 0.5),
				Size = UDim2.fromOffset((Config.Size or MENU_SIZE).X, (Config.Size or MENU_SIZE).Y),
				BackgroundTransparency = 1,
				ZIndex = 5,
				Parent = Library.MenuGui,
			})
			Self.Holder = Holder
			Self.LayoutKey = "Window/" .. tostring(Config.LayoutId or #Library.Windows)
			Layout.TrackPosition(Self.LayoutKey, Holder)

			local ShadowFrame = Create("Frame", { Size = UDim2.fromScale(1, 1), Theme = { BackgroundColor3 = "Background" }, Parent = Holder })
			Corner(ShadowFrame, MENU_RADIUS)
			Self.ShadowFrame = ShadowFrame
			Self.Shadow = Shadow(ShadowFrame, 0.35, 32)

			local Canvas = Create("CanvasGroup", { Size = UDim2.fromScale(1, 1), Theme = { BackgroundColor3 = "Background" }, ZIndex = 2, Parent = Holder })
			Corner(Canvas, MENU_RADIUS)
			Self.Canvas = Canvas

			local Sidebar = Create("Frame", { Name = "Sidebar", Size = UDim2.new(0, SIDEBAR_WIDTH, 1, 0), Theme = { BackgroundColor3 = "Inline" }, Parent = Canvas })
			Self.Sidebar = Sidebar
			Create("Frame", { Name = "Divider", Position = UDim2.fromOffset(SIDEBAR_WIDTH, 0), Size = UDim2.new(0, 1, 1, 0), Theme = { BackgroundColor3 = "Outline" }, Parent = Canvas })

			local Content = Create("Frame", {
				Name = "Content",
				Position = UDim2.fromOffset(SIDEBAR_WIDTH + 1, 0),
				Size = UDim2.new(1, -(SIDEBAR_WIDTH + 1), 1, 0),
				BackgroundTransparency = 1,
				ClipsDescendants = true,
				Parent = Canvas,
			})
			Self.Content = Content

			local OutlineFrame = Create("Frame", { Name = "Outline", Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, ZIndex = 80, Parent = Canvas })
			Corner(OutlineFrame, MENU_RADIUS)
			Stroke(OutlineFrame, "Outline")

			local HEADER_HEIGHT = 64
			local Header = Create("Frame", { Name = "Header", Size = UDim2.new(1, 0, 0, HEADER_HEIGHT), BackgroundTransparency = 1, Parent = Sidebar })
			ListLayout(Header, 9, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Center, Enum.VerticalAlignment.Center)
			local Logo = Library:Logo(Header, 24, Config.Logo)
			Logo.LayoutOrder = 1
			local TitleLabel = Create("TextLabel", {
				Name = "Title",
				Size = UDim2.fromOffset(0, 28),
				AutomaticSize = Enum.AutomaticSize.X,
				Text = Self.Title,
				TextSize = 21,
				LayoutOrder = 2,
				Theme = { TextColor3 = "Text" },
				Parent = Header,
			})
			Self.Logo, Self.TitleLabel = Logo, TitleLabel

			local TabList = Create("ScrollingFrame", {
				Name = "Tabs",
				Position = UDim2.fromOffset(10, HEADER_HEIGHT),
				Size = UDim2.new(0, 121, 1, -(HEADER_HEIGHT + 46)),
				BackgroundTransparency = 1,
				Parent = Sidebar,
			})
			ListLayout(TabList, 6)
			Self.TabList = TabList

			local SearchButton = Create("TextButton", {
				Name = "Search",
				Position = UDim2.new(0, 10, 1, -38),
				Size = UDim2.fromOffset(121, 28),
				Theme = { BackgroundColor3 = "Tab" },
				Parent = Sidebar,
			})
			Corner(SearchButton, 6)
			Stroke(SearchButton, "Outline")
			local SearchIcon = Create("ImageLabel", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 8, 0.5, 0), Size = UDim2.fromOffset(16, 16), Theme = { ImageColor3 = "Inactive Text" }, Parent = SearchButton })
			SetIcon(SearchIcon, "Search")
			local SearchText = Create("TextLabel", {
				Position = UDim2.fromOffset(32, 0),
				Size = UDim2.new(1, -36, 1, 0),
				Text = "Search...",
				NoCase = true,
				TextXAlignment = Enum.TextXAlignment.Left,
				TextTruncate = Enum.TextTruncate.AtEnd,
				Theme = { TextColor3 = "Inactive Text" },
				Parent = SearchButton,
			})
			Self.SearchButton, Self.SearchText = SearchButton, SearchText

			do
				local Dragging, StartMouse, StartPosition = false, nil, nil
				local function Begin(Input)
					if Input.UserInputType ~= Enum.UserInputType.MouseButton1 and Input.UserInputType ~= Enum.UserInputType.Touch then return end
					Dragging = true
					StartMouse = MousePosition()
					StartPosition = Holder.Position
				end
				Connect(Sidebar.InputBegan, Begin)
				Connect(UserInputService.InputChanged, function(Input)
					if not Dragging then return end
					if Input.UserInputType ~= Enum.UserInputType.MouseMovement and Input.UserInputType ~= Enum.UserInputType.Touch then return end
					local Delta = MousePosition() - StartMouse
					Holder.Position = UDim2.new(StartPosition.X.Scale, StartPosition.X.Offset + Delta.X, StartPosition.Y.Scale, StartPosition.Y.Offset + Delta.Y)
				end)
				Connect(UserInputService.InputEnded, function(Input)
					if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
						if Dragging then Library:SaveLayout() end
						Dragging = false
					end
				end)
			end

			Self:_BuildSearch()

			Connect(SearchButton.MouseButton1Click, function() Self:OpenSearch() end)

			return Self
		end

		function Window:AddCategory(Name)
			self.LayoutCounter += 1
			local Label = Create("TextLabel", {
				Name = "Category",
				Size = UDim2.new(1, 0, 0, 12),
				Text = Name,
				TextSize = 10,
				TextXAlignment = Enum.TextXAlignment.Left,
				Theme = { TextColor3 = "Inactive Text" },
				LayoutOrder = self.LayoutCounter,
				Parent = self.TabList,
			})
			Padding(Label, 0, 0, 2, 0)
			table.insert(self.Categories, Label)
			return Label
		end

		function Window:SetTitle(Title)
			self.Title = Title
			Library:SetText(self.TitleLabel, Title)
		end

		function Window:SetLogo(Icon)
			SetIcon(self.Logo:FindFirstChildOfClass("ImageLabel"), Icon)
		end

		function Window:SetOpen(Open)
			if Open == nil then Open = not self.Open end
			self.Open = Open
			local Holder = self.Holder
			if Open then Holder.Visible = true end
			Tween(self.Canvas, { GroupTransparency = Open and 0 or 1 }, 0.16)
			Tween(self.ShadowFrame, { BackgroundTransparency = Open and 0 or 1 }, 0.16)
			if self.Shadow then Tween(self.Shadow, { Transparency = Open and 0.35 or 1 }, 0.16) end
			for _, Floating in self.Floating do
				if Open then Floating.Visible = true end
				Tween(Floating, { GroupTransparency = Open and 0 or 1 }, 0.16)
			end
			for _, Extra in self.Extras or {} do
				SafeCall(Extra, Open)
			end
			if not Open then
				Library:CloseAllPopups()
				self:CloseSearch()
				task.delay(0.17, function()
					if self.Open then return end
					Holder.Visible = false
					for _, Floating in self.Floating do Floating.Visible = false end
				end)
			end
			Library:_UpdateBlur()
		end

		function Window:Toggle() self:SetOpen(not self.Open) end

		function Window:OnOpenChanged(Callback)
			self.Extras = self.Extras or {}
			table.insert(self.Extras, Callback)
		end
	end

	do
		function Window:AddTab(Config)
			if type(Config) == "string" then Config = { Title = Config } end
			Config = Config or {}
			if Config.Category then
				if self._LastCategory ~= Config.Category then
					self:AddCategory(Config.Category)
					self._LastCategory = Config.Category
				end
			end
			self.LayoutCounter += 1

			local Self = setmetatable({
				Title = Config.Title or "Tab",
				Window = self,
				Sections = {},
				Active = false,
				SectionCounter = 0,
			}, Tab)

			local Button = Create("TextButton", {
				Name = "Tab",
				Size = UDim2.new(1, 0, 0, 26),
				BackgroundTransparency = 1,
				Theme = { BackgroundColor3 = "Tab" },
				LayoutOrder = self.LayoutCounter,
				Parent = self.TabList,
			})
			Corner(Button, 5)
			local ButtonStroke = Stroke(Button, "Outline")
			ButtonStroke.Transparency = 1
			local Icon = Create("ImageLabel", {
				AnchorPoint = Vector2.new(0, 0.5),
				Position = UDim2.new(0, 7, 0.5, 0),
				Size = UDim2.fromOffset(16, 16),
				Theme = { ImageColor3 = "Inactive Text" },
				Parent = Button,
			})
			SetIcon(Icon, Config.Icon)
			local Label = Create("TextLabel", {
				Weight = "SemiBold",
				Position = UDim2.fromOffset(33, 0),
				Size = UDim2.new(1, -33, 1, 0),
				Text = Self.Title,
				TextXAlignment = Enum.TextXAlignment.Left,
				Theme = { TextColor3 = "Inactive Text" },
				Parent = Button,
			})
			Self.Button, Self.ButtonStroke, Self.Icon, Self.Label = Button, ButtonStroke, Icon, Label

			local Page = Create("CanvasGroup", {
				Name = "Page",
				Size = UDim2.fromScale(1, 1),
				BackgroundTransparency = 1,
				GroupTransparency = 1,
				Visible = false,
				Parent = self.Content,
			})
			Self.Page = Page

			local function Column(Position)
				local Frame = Create("ScrollingFrame", {
					Position = Position,
					Size = UDim2.new(0.5, -15, 1, 0),
					Parent = Page,
				})
				Padding(Frame, 10, 10, 0, 0)
				ListLayout(Frame, 10)
				return Frame
			end
			Self.Left = Column(UDim2.fromOffset(10, 0))
			Self.Right = Column(UDim2.new(0.5, 5, 0, 0))
			Self.Columns = { Self.Left, Self.Right }

			Connect(Button.MouseEnter, function()
				Self.Hovered = true
				if Self.Active then return end
				Tween(Button, { BackgroundTransparency = 0 }, 0.12)
				Tween(ButtonStroke, { Transparency = 0 }, 0.12)
			end)
			Connect(Button.MouseLeave, function()
				Self.Hovered = false
				if Self.Active then return end
				Tween(Button, { BackgroundTransparency = 1 }, 0.15)
				Tween(ButtonStroke, { Transparency = 1 }, 0.15)
			end)
			Connect(Button.MouseButton1Click, function() Self:Select() end)

			table.insert(self.Tabs, Self)
			if not self.ActiveTab then Self:Select(true) end
			return Self
		end

		local PAGE_SLIDE = 10

		function Tab:_SetActive(Active, Instant)
			self.Active = Active
			local ButtonTime = Instant and 0 or (Active and 0.08 or 0.18)
			Tween(self.Button, { BackgroundTransparency = (Active or self.Hovered) and 0 or 1 }, ButtonTime)
			Tween(self.ButtonStroke, { Transparency = (Active or self.Hovered) and 0 or 1 }, ButtonTime)
			ThemeTween(self.Label, "TextColor3", Active and "Text" or "Inactive Text", Instant and 0 or 0.1)
			ThemeTween(self.Icon, "ImageColor3", Active and "Text" or "Inactive Text", Instant and 0 or 0.1)
			local Page = self.Page
			if Active then
				Page.Visible = true
				Page.ZIndex = 2
				Page.Position = UDim2.fromOffset(0, Instant and 0 or PAGE_SLIDE)
				Tween(Page, { Position = UDim2.fromOffset(0, 0) }, Instant and 0 or 0.3, Enum.EasingStyle.Quad)
				Tween(Page, { GroupTransparency = 0 }, Instant and 0 or 0.15, Enum.EasingStyle.Quad)
			else
				Page.ZIndex = 1
				Tween(Page, { Position = UDim2.fromOffset(0, Instant and 0 or -PAGE_SLIDE) }, Instant and 0 or 0.3, Enum.EasingStyle.Quad)
				Tween(Page, { GroupTransparency = 1 }, Instant and 0 or 0.2, Enum.EasingStyle.Quad).Completed:Connect(function()
					if not self.Active then
						Page.Visible = false
						Page.Position = UDim2.fromOffset(0, 0)
					end
				end)
			end
		end

		function Tab:Select(Instant)
			local Window_ = self.Window
			local Old = Window_.ActiveTab
			if Old == self then return end
			Window_.ActiveTab = self
			Library:CloseAllPopups()
			if Old then Old:_SetActive(false, Instant) end
			self:_SetActive(true, Instant)
			for _, Callback in self.SelectCallbacks or {} do SafeCall(Callback) end
		end

		function Tab:OnSelected(Callback)
			self.SelectCallbacks = self.SelectCallbacks or {}
			table.insert(self.SelectCallbacks, Callback)
		end
	end

	local Container = {}
	Container.__index = Container
	Library.Classes.Container = Container

	local function NewContainer(Holder, Owner)
		return setmetatable({
			Holder = Holder,
			Section = Owner.Section,
			Tab = Owner.Tab,
			Window = Owner.Window,
			Path = Owner.Path,
			Counter = 0,
			Elements = {},
		}, Container)
	end

	local function SectionBox(Parent, Owner, Pad)
		local Box = Create("Frame", {
			Name = "Box",
			Size = UDim2.new(1, 0, 0, 0),
			AutomaticSize = Enum.AutomaticSize.Y,
			Theme = { BackgroundColor3 = "Tab" },
			Parent = Parent,
		})
		Corner(Box, 5)
		Stroke(Box, "Outline")
		local Items = Create("Frame", {
			Name = "Items",
			Size = UDim2.new(1, 0, 0, 0),
			AutomaticSize = Enum.AutomaticSize.Y,
			BackgroundTransparency = 1,
			Parent = Box,
		})
		Padding(Items, Pad or 11, Pad or 11, Pad or 11, Pad or 11)
		ListLayout(Items, 6)
		return Box, NewContainer(Items, Owner)
	end

	function Tab:AddSection(Config)
		if type(Config) == "string" then Config = { Title = Config } end
		Config = Config or {}
		local Side = Config.Side
		if Side == "Right" or Side == 2 then Side = 2 elseif Side == "Left" or Side == 1 then Side = 1 else
			Side = (#self.Left:GetChildren() <= #self.Right:GetChildren()) and 1 or 2
		end
		self.SectionCounter += 1

		local Self = setmetatable({
			Title = Config.Title or "Section",
			Tab = self,
			Window = self.Window,
			Side = Side,
			Order = self.SectionCounter,
		}, Section)
		Self.Section = Self
		Self.Path = self.Title .. " / " .. Self.Title
		Self.LayoutKey = self.Window.LayoutKey .. "/Section/" .. Self.Path .. "/" .. tostring(self.SectionCounter)

		local Frame = Create("Frame", {
			Name = "Section",
			Size = UDim2.new(1, 0, 0, 0),
			AutomaticSize = Enum.AutomaticSize.Y,
			BackgroundTransparency = 1,
			LayoutOrder = self.SectionCounter,
			Parent = self.Columns[Side],
		})
		ListLayout(Frame, 8)
		local Header = Create("TextButton", { Name = "Header", Size = UDim2.new(1, 0, 0, 19), BackgroundTransparency = 1, LayoutOrder = 0, Parent = Frame })
		local HeaderIcon = Create("ImageLabel", {
			AnchorPoint = Vector2.new(0, 0.5),
			Position = UDim2.new(0, 1, 0.5, 0),
			Size = UDim2.fromOffset(15, 15),
			Theme = { ImageColor3 = "Inactive Text" },
			Parent = Header,
		})
		SetIcon(HeaderIcon, Config.Icon or "Cube")
		local HeaderTitle = Create("TextLabel", {
			Position = UDim2.fromOffset(27, 0),
			Size = UDim2.new(1, -27, 1, 0),
			Text = Self.Title,
			TextXAlignment = Enum.TextXAlignment.Left,
			Theme = { TextColor3 = "Inactive Text" },
			Parent = Header,
		})
		local Box, Items = SectionBox(Frame, Self)
		Box.LayoutOrder = 1

		Self.Frame, Self.Header, Self.HeaderIcon, Self.HeaderTitle, Self.Box, Self.Container = Frame, Header, HeaderIcon, HeaderTitle, Box, Items
		setmetatable(Self, {
			__index = function(_, Key)
				local Value = rawget(Section, Key)
				if Value ~= nil then return Value end
				local Method = Container[Key]
				if type(Method) == "function" then
					local Callback = function(_, ...) return Method(Items, ...) end; return Callback
				end
				return nil
			end,
		})

		table.insert(self.Sections, Self)
		table.insert(self.Window.Sections, Self)
		Library:_Index({ Title = Self.Title, Path = Self.Path, Type = "Section", Tab = self, Target = Frame, Section = Self })

		if Config.Detachable ~= false then Self:_MakeDetachable() end
		return Self
	end

	function Section:SetTitle(Title)
		self.Title = Title
		Library:SetText(self.HeaderTitle, Title)
	end

	function Section:SetVisible(Visible)
		self.Frame.Visible = Visible
	end

	function Section:_MakeDetachable()
		local Window_ = self.Window
		local Frame, Header = self.Frame, self.Header
		local Pressing, Moved, StartMouse, GrabOffset = false, false, nil, nil

		local function BringToFront()
			if self.FloatWindow then
				Window_.ZCounter += 1
				self.FloatWindow.ZIndex = Window_.ZCounter
			end
		end

		local function Detach()
			if self.Floating then return end
			local Position, Size = Frame.AbsolutePosition - Library.MenuGui.AbsolutePosition, Frame.AbsoluteSize
			local Width = Size.X > 0 and Size.X or math.max(120, (Window_.Holder.Size.X.Offset - 142) * 0.5 - 15)
			local Float = Create("CanvasGroup", {
				Name = "FloatingSection",
				BackgroundTransparency = 1,
				Size = UDim2.fromOffset(Width, 0),
				AutomaticSize = Enum.AutomaticSize.Y,
				Position = UDim2.fromOffset(Position.X, Position.Y),
				Parent = Library.MenuGui,
			})
			self.FloatWindow = Float
			self.Floating = true
			Frame.Parent = Float
			table.insert(Window_.Floating, Float)
			BringToFront()
			Library:CloseAllPopups()
		end

		local function Dock()
			local Content = Window_.Content
			local Mouse_ = MousePosition()
			local Middle = Content.AbsolutePosition.X + Content.AbsoluteSize.X / 2
			local Side = Mouse_.X < Middle and 1 or 2
			local Columns = self.Tab.Columns
			local Order = self.Order
			local Best
			for _, Other in self.Tab.Sections do
				if Other ~= self and not Other.Floating and Other.Frame.Parent == Columns[Side] then
					local Top = Other.Frame.AbsolutePosition.Y + Other.Frame.AbsoluteSize.Y / 2
					if Mouse_.Y < Top and (not Best or Other.Frame.LayoutOrder < Best) then
						Best = Other.Frame.LayoutOrder
					end
				end
			end
			if Best then
				for _, Other in self.Tab.Sections do
					if Other ~= self and Other.Frame.Parent == Columns[Side] and Other.Frame.LayoutOrder >= Best then
						Other.Frame.LayoutOrder += 1
					end
				end
				Order = Best
			else
				Order = 0
				for _, Other in self.Tab.Sections do
					if Other.Frame.Parent == Columns[Side] then Order = math.max(Order, Other.Frame.LayoutOrder) end
				end
				Order += 1
			end
			Frame.LayoutOrder = Order
			Frame.Parent = Columns[Side]
			self.Side = Side
			local Float = self.FloatWindow
			self.FloatWindow = nil
			self.Floating = false
			local Index = table.find(Window_.Floating, Float)
			if Index then table.remove(Window_.Floating, Index) end
			if Float then Float:Destroy() end
		end
		self.Dock = Dock
		self.Detach = Detach

		Connect(Header.InputBegan, function(Input)
			if Input.UserInputType ~= Enum.UserInputType.MouseButton1 and Input.UserInputType ~= Enum.UserInputType.Touch then return end
			Pressing, Moved = true, false
			StartMouse = MousePosition()
			GrabOffset = StartMouse - Frame.AbsolutePosition
			BringToFront()
		end)
		Connect(UserInputService.InputChanged, function(Input)
			if not Pressing then return end
			if Input.UserInputType ~= Enum.UserInputType.MouseMovement and Input.UserInputType ~= Enum.UserInputType.Touch then return end
			local Mouse_ = MousePosition()
			if not Moved and (Mouse_ - StartMouse).Magnitude > 8 then
				Moved = true
				if not self.Floating then Detach() end
			end
			if Moved and self.FloatWindow then
				local Target = Mouse_ - GrabOffset - Library.MenuGui.AbsolutePosition
				self.FloatWindow.Position = UDim2.fromOffset(Target.X, Target.Y)
			end
		end)
		Connect(UserInputService.InputEnded, function(Input)
			if not Pressing then return end
			if Input.UserInputType ~= Enum.UserInputType.MouseButton1 and Input.UserInputType ~= Enum.UserInputType.Touch then return end
			Pressing = false
			if Moved and self.Floating and Window_.Open and self.Tab.Active and IsMouseOver(Window_.Content) then
				Dock()
			end
			if Moved then Library:SaveLayout() end
		end)
		Layout.Register(self.LayoutKey, function()
			return { Kind = "Section", Floating = self.Floating == true, Side = self.Side, Order = Frame.LayoutOrder, Position = self.FloatWindow and Layout.ReadPosition(self.FloatWindow) }
		end, function(Value)
			if Value.Kind ~= "Section" then return end
			self.Side = Value.Side
			Frame.LayoutOrder = Value.Order
			if Value.Floating then
				Detach()
				Layout.SetPosition(self.FloatWindow, Value.Position)
			else
				self:Redock(true)
				Frame.Parent = self.Tab.Columns[Value.Side]
				Frame.LayoutOrder = Value.Order
			end
		end)
	end

	function Section:Redock(Silent)
		if self.Floating and self.Dock then
			local Columns = self.Tab.Columns
			self.Frame.Parent = Columns[self.Side]
			self.Frame.LayoutOrder = self.Order
			local Float = self.FloatWindow
			self.FloatWindow, self.Floating = nil, false
			local Index = table.find(self.Window.Floating, Float)
			if Index then table.remove(self.Window.Floating, Index) end
			if Float then Float:Destroy() end
			if not Silent then Library:SaveLayout() end
		end
	end

	function Window:ResetLayout()
		for _, Section_ in self.Sections do Section_:Redock(true) end
		Library:SaveLayout()
	end

	local Class, RegisterFlag, LayoutGlyph, ResetGlyph; do
		local ElementBase = {}
		ElementBase.__index = ElementBase
		Library.Classes.ElementBase = ElementBase

		function Class(Name)
			local Object = {}
			Object.__index = function(_, Key)
				local Value = rawget(Object, Key)
				if Value ~= nil then return Value end
				return ElementBase[Key]
			end
			Library.Classes[Name] = Object
			return Object
		end

		function ElementBase:Get() return self.Value end
		function ElementBase:OnChanged(Callback)
			self.ChangedCallbacks = self.ChangedCallbacks or {}
			table.insert(self.ChangedCallbacks, Callback)
			return self
		end
		function ElementBase:SetVisible(Visible)
			if self.Row then self.Row.Visible = Visible end
		end
		function ElementBase:_Fire(...)
			SafeCall(self.Callback, ...)
			for _, Callback in self.ChangedCallbacks or {} do SafeCall(Callback, ...) end
		end
		function ElementBase:Serialize() return self.Value end
		function ElementBase:Deserialize(Value) self:Set(Value) end

		function RegisterFlag(Element)
			if Element.Flag then
				Library.Flags[Element.Flag] = Element.Value
				Library.Elements[Element.Flag] = Element
			end
		end

		function Container:_Row(Height, Class_)
			self.Counter += 1
			return Create(Class_ or "Frame", {
				Name = "Element",
				Size = UDim2.new(1, 0, 0, Height),
				BackgroundTransparency = 1,
				LayoutOrder = self.Counter,
				Parent = self.Holder,
			})
		end

		function Container:_Index(Title, Type, Row)
			if not self.Tab or self.NoIndex then return end
			Library:_Index({ Title = Title, Path = self.Path or self.Tab.Title, Type = Type, Tab = self.Tab, Target = Row, Section = self.Section })
		end

		function LayoutGlyph(Parent)
			local Glyph = Create("Frame", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -7, 0.5, 0), Size = UDim2.fromOffset(12, 12), BackgroundTransparency = 1, Parent = Parent })
			for _, Rect in { { 0, 0, 12, 4 }, { 0, 5, 5, 7 }, { 7, 5, 5, 7 } } do
				local Part = Create("Frame", { Position = UDim2.fromOffset(Rect[1], Rect[2]), Size = UDim2.fromOffset(Rect[3], Rect[4]), Theme = { BackgroundColor3 = "Inactive Text" }, Parent = Glyph })
				Corner(Part, 1)
			end
			return Glyph
		end

		function ResetGlyph(Parent, Size)
			Size = Size or 12
			local Glyph = Create("Frame", { Size = UDim2.fromOffset(Size, Size), BackgroundTransparency = 1, Parent = Parent })
			local Ring = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, Parent = Glyph })
			Corner(Ring, Size)
			local RingStroke = Create("UIStroke", { Thickness = 1.4, Theme = { Color = "Text" }, Parent = Ring })
			Create("UIGradient", {
				Rotation = -135,
				Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(0.12, 1), NumberSequenceKeypoint.new(0.13, 0), NumberSequenceKeypoint.new(1, 0) }),
				Parent = RingStroke,
			})
			local Arrow = Create("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new(0, 1, 0.78, 0), Size = UDim2.fromOffset(6, 6), Rotation = 90, Theme = { ImageColor3 = "Text" }, Parent = Glyph })
			SetIcon(Arrow, "Arrow")
			return Glyph
		end
	end

	local ToggleClass = Class("Toggle")

	function Container:AddToggle(Config)
		Config = Config or {}
		local Self = setmetatable({
			Type = "Toggle",
			Text = Config.Text or Config.Title or Config.Name or "Toggle",
			Value = Config.Default == true or Config.Value == true,
			Callback = Config.Callback,
			Container = self,
			Risky = Config.Risky,
			ExtraCount = 0,
		}, ToggleClass)
		Self.Flag = Config.Flag or NextFlag((self.Path or "") .. "/" .. Self.Text)

		local Row = self:_Row(16, "TextButton")
		local Label = Create("TextLabel", {
			Weight = "SemiBold",
			Size = UDim2.new(1, -40, 1, 0),
			Text = Self.Text,
			TextXAlignment = Enum.TextXAlignment.Left,
			TextTruncate = Enum.TextTruncate.AtEnd,
			Theme = { TextColor3 = Self.Value and "Text" or "Inactive Text" },
			Parent = Row,
		})
		local Extras = Create("Frame", {
			Name = "Extras",
			AnchorPoint = Vector2.new(1, 0.5),
			Position = UDim2.new(1, 0, 0.5, 0),
			Size = UDim2.new(0, 0, 1, 0),
			AutomaticSize = Enum.AutomaticSize.X,
			BackgroundTransparency = 1,
			Parent = Row,
		})
		ListLayout(Extras, 8, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Right, Enum.VerticalAlignment.Center)

		local Track = Create("Frame", { Name = "Track", Size = UDim2.fromOffset(28, 16), Theme = { BackgroundColor3 = "Element" }, LayoutOrder = 1000, Parent = Extras })
		Corner(Track, 8)
		Shade(Track)
		Stroke(Track, "Outline")
		local Fill = Create("Frame", { Size = UDim2.fromScale(1, 1), Theme = { BackgroundColor3 = "ToggleFill" }, BackgroundTransparency = Self.Value and 0 or 1, Parent = Track })
		Corner(Fill, 8)
		Shade(Fill)
		local Knob = Create("Frame", {
			AnchorPoint = Vector2.new(0, 0.5),
			Position = UDim2.new(0, Self.Value and 16 or 2, 0.5, 0),
			Size = UDim2.fromOffset(10, 10),
			Theme = { BackgroundColor3 = Self.Value and "Knob" or "KnobOff" },
			ZIndex = 2,
			Parent = Track,
		})
		Corner(Knob, 5)

		Self.Row, Self.Label, Self.Extras, Self.Track, Self.Fill, Self.Knob = Row, Label, Extras, Track, Fill, Knob

		Connect(Extras:GetPropertyChangedSignal("AbsoluteSize"), function()
			Label.Size = UDim2.new(1, -(Extras.AbsoluteSize.X + 8), 1, 0)
		end)
		Connect(Row.MouseButton1Click, function() Self:Set(not Self.Value) end)

		RegisterFlag(Self)
		if Config.Keybind ~= false then Self:AddKeybind() end
		self:_Index(Self.Text, "Toggle", Row)
		if Self.Value then task.defer(Self._Fire, Self, true) end
		return Self
	end

	function ToggleClass:Set(Value, Silent)
		Value = Value == true
		local Changed = Value ~= self.Value
		self.Value = Value
		if self.Flag then Library.Flags[self.Flag] = Value end
		Tween(self.Fill, { BackgroundTransparency = Value and 0 or 1 }, 0.2)
		Tween(self.Knob, { Position = UDim2.new(0, Value and 16 or 2, 0.5, 0) }, 0.25)
		ThemeTween(self.Knob, "BackgroundColor3", Value and "Knob" or "KnobOff", 0.2)
		ThemeTween(self.Label, "TextColor3", Value and "Text" or "Inactive Text", 0.2)
		Library:_RefreshHotkeys()
		if Changed and not Silent then self:_Fire(Value) end
	end

	function ToggleClass:SetText(Text)
		self.Text = Text
		Library:SetText(self.Label, Text)
	end

	function ToggleClass:_ExtraOrder()
		self.ExtraCount += 1
		return 900 - self.ExtraCount
	end

	do
		local KeybindClass = Class("Keybind")

		local function CreateKeybox(Parent, LayoutOrder)
			local Box = Create("TextButton", {
				Name = "Keybind",
				Size = UDim2.fromOffset(0, 16),
				AutomaticSize = Enum.AutomaticSize.X,
				TextSize = 10,
				NoCase = true,
				Text = "",
				BackgroundTransparency = 0,
				Theme = { BackgroundColor3 = "Element", TextColor3 = "Inactive Text" },
				LayoutOrder = LayoutOrder or 0,
				Parent = Parent,
			})
			Corner(Box, 4)
			Shade(Box)
			Stroke(Box, "Outline")
			Padding(Box, 0, 0, 5, 5)
			Create("UISizeConstraint", { MinSize = Vector2.new(18, 16), Parent = Box })
			return Box, Box
		end

		local function NewKeybind(Config, Container_, Toggle)
			local Default = KeyFromName(Config.Default or Config.Key)
			local Self = setmetatable({
				Type = "Keybind",
				Text = Config.Text or Config.Name or (Toggle and Toggle.Text) or "Keybind",
				Name = Config.Name,
				Value = { Key = Default, Mode = Config.Mode or "Toggle" },
				Default = { Key = Default, Mode = Config.Mode or "Toggle" },
				Callback = Config.Callback,
				Toggle = Toggle,
				Container = Container_,
				Displays = {},
				Active = false,
				NoList = Config.NoList,
				OnPress = Config.OnPress,
			}, KeybindClass)
			Self.Flag = Config.Flag or NextFlag(((Container_ and Container_.Path) or "") .. "/" .. Self.Text .. "_Key")
			table.insert(Library.Keybinds, Self)
			RegisterFlag(Self)
			return Self
		end

		function KeybindClass:_AddDisplay(Box, Label, OpenEditor)
			table.insert(self.Displays, { Box = Box, Label = Label })
			Connect(Box.MouseButton1Click, function()
				if Library.Listening ~= self then self:Listen() end
			end)
			if OpenEditor then
				Connect(Box.MouseButton2Click, function()
					if Library.Listening == self then self:StopListening() end
					self:OpenEditor(Box)
				end)
			end
			Connect(Box.MouseEnter, function()
				if Library.Listening ~= self then ThemeTween(Label, "TextColor3", "Text", 0.12) end
			end)
			Connect(Box.MouseLeave, function()
				if Library.Listening ~= self then ThemeTween(Label, "TextColor3", "Inactive Text", 0.12) end
			end)
			self:_Draw()
		end

		function KeybindClass:_IsOverDisplay()
			for _, Display in self.Displays do
				if Display.Box.Visible and IsMouseOver(Display.Box) then return true end
			end
			return false
		end

		function KeybindClass:Listen()
			if Library.Listening then Library.Listening:StopListening() end
			Library.Listening = self
			for _, Display in self.Displays do
				Display.Label.Text = "..."
				ThemeTween(Display.Label, "TextColor3", "Accent", 0.12)
			end
		end

		function KeybindClass:StopListening()
			if Library.Listening == self then Library.Listening = nil end
			self:_Draw()
		end

		function KeybindClass:_Draw()
			local Name = KeyName(self.Value.Key)
			for _, Display in self.Displays do
				Display.Label.Text = Name == "NONE" and (Display.Editor and "None" or "-") or Name
				ThemeTween(Display.Label, "TextColor3", IsMouseOver(Display.Box) and "Text" or "Inactive Text", 0.12)
			end
		end

		function KeybindClass:Set(Value, Silent)
			if type(Value) ~= "table" then Value = { Key = Value, Mode = self.Value.Mode } end
			self.Value = { Key = KeyFromName(Value.Key), Mode = Value.Mode or self.Value.Mode or "Toggle" }
			if self.Flag then Library.Flags[self.Flag] = self.Value end
			self:_Draw()
			if self.Editor then self:_DrawModes() end
			Library:_RefreshHotkeys()
			if not Silent then
				for _, Callback in self.ChangedCallbacks or {} do SafeCall(Callback, self.Value) end
			end
		end

		function KeybindClass:SetMode(Mode)
			self.Value.Mode = Mode
			if self.Flag then Library.Flags[self.Flag] = self.Value end
			if self.Editor then self:_DrawModes() end
			Library:_RefreshHotkeys()
		end

		function KeybindClass:Serialize()
			return { Key = self.Value.Key and self.Value.Key.Name or "None", Mode = self.Value.Mode }
		end

		function KeybindClass:Deserialize(Value)
			if type(Value) == "table" then self:Set({ Key = Value.Key, Mode = Value.Mode }) end
		end

		function KeybindClass:IsActive()
			if self.Toggle then return self.Toggle.Value end
			return self.Active
		end

		function KeybindClass:_Pressed(Down)
			if self.OnPress then
				if Down then SafeCall(self.OnPress) end
				return
			end
			local Mode = self.Value.Mode
			if self.Toggle then
				if Mode == "Hold" then
					self.Toggle:Set(Down)
				elseif Down then
					self.Toggle:Set(not self.Toggle.Value)
				end
			else
				if Mode == "Hold" then
					self.Active = Down
					self:_Fire(Down)
				elseif Down then
					self.Active = not self.Active
					self:_Fire(self.Active)
				end
			end
			Library:_RefreshHotkeys()
		end

		function KeybindClass:_DrawModes(Instant)
			local Editor = self.Editor
			local Time = Instant and 0 or 0.22
			Tween(Editor.Pill, { Position = UDim2.fromScale(self.Value.Mode == "Hold" and 0.5 or 0, 0) }, Time)
			for Mode, Label in Editor.ModeLabels do
				ThemeTween(Label, "TextColor3", Mode == self.Value.Mode and "Text" or "Inactive Text", Time)
			end
		end

		local EDITOR_WIDTH = 190

		function KeybindClass:_BuildEditor()
			local Frame = PopupPanel(UDim2.fromOffset(EDITOR_WIDTH, 107), "KeybindEditor")
			Create("TextLabel", { Weight = "SemiBold", Position = UDim2.fromOffset(11, 10), Size = UDim2.new(1, -100, 0, 22), Text = self.Toggle and self.Toggle.Text or self.Text, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Text" }, Parent = Frame })
			local KeyButton = Create("TextButton", {
				AnchorPoint = Vector2.new(1, 0),
				Position = UDim2.new(1, -11, 0, 10),
				Size = UDim2.fromOffset(76, 22),
				TextSize = 11,
				NoCase = true,
				TextTruncate = Enum.TextTruncate.AtEnd,
				Theme = { BackgroundColor3 = "Element", TextColor3 = "Inactive Text" },
				Parent = Frame,
			})
			Corner(KeyButton, 5)
			Shade(KeyButton)
			Stroke(KeyButton, "Outline")

			local Switch = Create("Frame", { Position = UDim2.fromOffset(11, 40), Size = UDim2.new(1, -22, 0, 25), Theme = { BackgroundColor3 = "Element" }, Parent = Frame })
			Corner(Switch, 5)
			Shade(Switch)
			Stroke(Switch, "Outline")
			local Pill = Create("Frame", { Size = UDim2.fromScale(0.5, 1), Theme = { BackgroundColor3 = "ToggleFill" }, Parent = Switch })
			Corner(Pill, 5)
			Shade(Pill)
			local ModeLabels = {}
			for Index, Mode in { "Toggle", "Hold" } do
				local Button = Create("TextButton", { Position = UDim2.fromScale((Index - 1) * 0.5, 0), Size = UDim2.fromScale(0.5, 1), BackgroundTransparency = 1, ZIndex = 2, Parent = Switch })
				ModeLabels[Mode] = Create("TextLabel", { Weight = "SemiBold", Size = UDim2.fromScale(1, 1), Text = "On " .. Mode, TextSize = 12, Theme = { TextColor3 = "Inactive Text" }, ZIndex = 2, Parent = Button })
				Connect(Button.MouseButton1Click, function()
					if self.Toggle and self.Value.Mode == "Hold" and Mode ~= "Hold" then self.Toggle:Set(false) end
					self:SetMode(Mode)
				end)
			end

			local Buttons = Create("Frame", { Position = UDim2.fromOffset(11, 73), Size = UDim2.new(1, -22, 0, 24), BackgroundTransparency = 1, Parent = Frame })
			local function EditorButton(Text, Order, Glyph)
				local Button = Create("TextButton", { Position = UDim2.new((Order - 1) * 0.5, Order == 1 and 0 or 3, 0, 0), Size = UDim2.new(0.5, -3, 1, 0), Theme = { BackgroundColor3 = "Element" }, Parent = Buttons })
				Corner(Button, 5)
				Shade(Button)
				Stroke(Button, "Outline")
				local Inner = Create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromOffset(0, 14), AutomaticSize = Enum.AutomaticSize.X, BackgroundTransparency = 1, Parent = Button })
				ListLayout(Inner, 5, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Center, Enum.VerticalAlignment.Center)
				if Glyph then ResetGlyph(Inner, 10) end
				Create("TextLabel", { Weight = "SemiBold", Size = UDim2.fromOffset(0, 14), AutomaticSize = Enum.AutomaticSize.X, Text = Text, TextSize = 12, LayoutOrder = 2, Theme = { TextColor3 = "Text" }, Parent = Inner })
				Connect(Button.MouseEnter, function() ThemeTween(Button, "BackgroundColor3", "Hovered Element", 0.12) end)
				Connect(Button.MouseLeave, function() ThemeTween(Button, "BackgroundColor3", "Element", 0.12) end)
				return Button
			end
			local Clear = EditorButton("Clear", 1)
			local Reset = EditorButton("Reset", 2, true)
			Connect(Clear.MouseButton1Click, function()
				if Library.Listening == self then Library.Listening = nil end
				if self.Toggle and self.Value.Mode == "Hold" then self.Toggle:Set(false) end
				self:Set({ Key = nil })
			end)
			Connect(Reset.MouseButton1Click, function()
				if Library.Listening == self then Library.Listening = nil end
				local WasHold = self.Value.Mode == "Hold"
				self:Set({ Key = self.Default.Key, Mode = self.Default.Mode })
				if self.Toggle and WasHold and self.Default.Mode ~= "Hold" then self.Toggle:Set(false) end
			end)

			self.Editor = {
				Frame = Frame,
				Pill = Pill,
				ModeLabels = ModeLabels,
				Update = function(Popup) PlacePopup(Frame, Popup.Anchor, self.EditorOffset or 0, 6) end,
				OnClose = function()
					if Library.Listening == self then self:StopListening() end
					FadePopup(Frame, false)
				end,
			}
			self:_AddDisplay(KeyButton, KeyButton)
			self.Displays[#self.Displays].Editor = true
		end

		function KeybindClass:OpenEditor(Anchor, OffsetX)
			if not self.Editor then self:_BuildEditor() end
			local Editor = self.Editor
			if Editor.Open then
				Library:ClosePopup(Editor)
				if Editor.Anchor == Anchor then return end
			end
			Editor.Anchor = Anchor
			self.EditorOffset = OffsetX or 0
			self:_Draw()
			self:_DrawModes(true)
			Editor.ParentPopup = self.Container and self.Container.ParentPopup
			Library:OpenPopup(Editor)
			FadePopup(Editor.Frame, true)
			if not self.Value.Key then self:Listen() end
		end
		KeybindClass.OpenModes = KeybindClass.OpenEditor

		function ToggleClass:AddKeybind(Config)
			Config = Config or {}
			local Keybind = self.Keybind
			if not Keybind then
				Keybind = NewKeybind(Config, self.Container, self)
				self.Keybind = Keybind
				if Config.Flag == nil then
					Library.Elements[Keybind.Flag], Library.Flags[Keybind.Flag] = nil, nil
					Keybind.Flag = self.Flag .. "_Key"
					RegisterFlag(Keybind)
				end
				Connect(self.Row.MouseButton2Click, function()
					local OffsetX = math.floor(MousePosition().X - self.Row.AbsolutePosition.X - 12)
					Keybind:OpenEditor(self.Row, Clamp(OffsetX, 0, math.max(0, self.Row.AbsoluteSize.X - EDITOR_WIDTH)))
				end)
				return self
			end
			local Default = KeyFromName(Config.Default or Config.Key)
			Keybind.Default = { Key = Default, Mode = Config.Mode or "Toggle" }
			Keybind.Name = Config.Name or Keybind.Name
			Keybind.Callback = Config.Callback or Keybind.Callback
			if Config.NoList ~= nil then Keybind.NoList = Config.NoList end
			if Config.Flag and Config.Flag ~= Keybind.Flag then
				Library.Elements[Keybind.Flag], Library.Flags[Keybind.Flag] = nil, nil
				Keybind.Flag = Config.Flag
				RegisterFlag(Keybind)
			end
			Keybind:Set({ Key = Default, Mode = Keybind.Default.Mode }, true)
			return self
		end
		ToggleClass.AddKeyPicker = ToggleClass.AddKeybind
		ToggleClass.AddBind = ToggleClass.AddKeybind

		function ToggleClass:GetKeybind() return self.Keybind end

		function Container:AddKeybind(Config)
			Config = Config or {}
			local Row = self:_Row(16)
			local Label = Create("TextLabel", {
				Weight = "SemiBold",
				Size = UDim2.new(1, -60, 1, 0),
				Text = Config.Text or Config.Title or "Keybind",
				TextXAlignment = Enum.TextXAlignment.Left,
				Theme = { TextColor3 = "Text" },
				Parent = Row,
			})
			local Holder = Create("Frame", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, 0, 0.5, 0), Size = UDim2.new(0, 0, 1, 0), AutomaticSize = Enum.AutomaticSize.X, BackgroundTransparency = 1, Parent = Row })
			ListLayout(Holder, 0, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Right, Enum.VerticalAlignment.Center)
			local Box, Text = CreateKeybox(Holder, 1)
			local Keybind = NewKeybind(Config, self, nil)
			Keybind.Box, Keybind.Label = Box, Text
			Keybind:_AddDisplay(Box, Text, true)
			Keybind.Row, Keybind.TextLabel = Row, Label
			self:_Index(Keybind.Text, "Keybind", Row)
			return Keybind
		end
		Container.AddKeyPicker = Container.AddKeybind
		Container.AddBind = Container.AddKeybind

		Connect(UserInputService.InputBegan, function(Input, Processed)
			local Listening = Library.Listening
			if Listening then
				local Type = Input.UserInputType
				if Type == Enum.UserInputType.Keyboard then
					if Input.KeyCode == Enum.KeyCode.Escape then
						Listening:StopListening()
					elseif Input.KeyCode == Enum.KeyCode.Backspace or Input.KeyCode == Enum.KeyCode.Delete then
						Library.Listening = nil
						Listening:Set({ Key = nil })
					else
						Library.Listening = nil
						Listening:Set({ Key = Input.KeyCode })
					end
				elseif Type == Enum.UserInputType.MouseButton1 or Type == Enum.UserInputType.Touch then
					if not Listening:_IsOverDisplay() then Listening:StopListening() end
				elseif Type == Enum.UserInputType.MouseButton2 or Type == Enum.UserInputType.MouseButton3 then
					if not Listening:_IsOverDisplay() then
						Library.Listening = nil
						Listening:Set({ Key = Type })
					end
				end
				return
			end
			if UserInputService:GetFocusedTextBox() then return end
			for _, Keybind in Library.Keybinds do
				if Keybind.Value.Key and InputMatches(Input, Keybind.Value.Key) then
					Keybind:_Pressed(true)
				end
			end
		end)

		Connect(UserInputService.InputEnded, function(Input)
			for _, Keybind in Library.Keybinds do
				if Keybind.Value.Key and Keybind.Value.Mode == "Hold" and InputMatches(Input, Keybind.Value.Key) then
					Keybind:_Pressed(false)
				end
			end
		end)
	end

	do
		local PickerClass = Class("ColorPicker")
		local AnimationModes = { "None", "Rainbow", "Fade", "Fade Alpha" }

		local function NewPicker(Config, Swatch, Container_, Owner)
			local Default = Config.Default or Config.Color or Color3.new(1, 1, 1)
			local H, S, V = Default:ToHSV()
			local Self = setmetatable({
				Type = "ColorPicker",
				Text = Config.Text or Config.Title or "Color",
				Value = { Color = Default, Alpha = Config.Alpha or Config.Transparency or 0, Animation = Config.Animation or "None" },
				Hue = H, Sat = S, Val = V,
				Callback = Config.Callback,
				Container = Container_,
				Swatch = Swatch,
				Owner = Owner,
				Current = Default,
				CurrentAlpha = Config.Alpha or 0,
			}, PickerClass)
			Self.Flag = Config.Flag or NextFlag(((Container_ and Container_.Path) or "") .. "/" .. Self.Text .. "_Color")
			Self:_Draw()
			Connect(Swatch.MouseButton1Click, function() Self:Open() end)
			RegisterFlag(Self)
			if Self.Value.Animation ~= "None" then Library.AnimatedPickers[Self] = true end
			return Self
		end

		local function CreateSwatch(Parent, LayoutOrder)
			local Swatch = Create("TextButton", { Name = "Swatch", Size = UDim2.fromOffset(13, 13), BackgroundColor3 = Color3.new(1, 1, 1), LayoutOrder = LayoutOrder or 0, Parent = Parent })
			Corner(Swatch, 4)
			local SwatchStroke = Stroke(Swatch, "Outline")
			SwatchStroke.Transparency = 0.4
			return Swatch
		end

		function PickerClass:_Draw()
			local Color = Color3.fromHSV(self.Hue, self.Sat, self.Val)
			self.Value.Color = Color
			if not Library.AnimatedPickers[self] then
				self.Current = Color
				self.CurrentAlpha = self.Value.Alpha
				self.Swatch.BackgroundColor3 = Color
				self.Swatch.BackgroundTransparency = math.min(self.Value.Alpha, 0.85)
			end
			if not Library.AnimatedPickers[self] then self:_DrawKnobs(self.Hue, self.Sat, self.Val, self.Value.Alpha) end
		end

		function PickerClass:_DrawKnobs(H, S, V, Alpha, Instant)
			if not self.Popup then return end
			local P = self.Parts
			local Color = Color3.fromHSV(H, S, V)
			P.SV.BackgroundColor3 = Color3.fromHSV(H, 1, 1)
			P.SVKnob.BackgroundColor3 = Color
			P.HueKnob.BackgroundColor3 = Color3.fromHSV(H, 1, 1)
			P.AlphaColor.BackgroundColor3 = Color
			P.AlphaKnob.BackgroundColor3 = Color
			local Positions = {
				[P.SVKnob] = UDim2.fromScale(S, 1 - V),
				[P.HueKnob] = UDim2.new(0.5, 0, H, 0),
				[P.AlphaKnob] = UDim2.new(Alpha, 0, 0.5, 0),
			}
			for Knob, Position in Positions do
				if Instant then Knob.Position = Position else Tween(Knob, { Position = Position }, 0.08) end
			end
		end

		function PickerClass:Set(Value, Silent, Alpha)
			if typeof(Value) == "Color3" then
				Value = { Color = Value, Alpha = Alpha or self.Value.Alpha, Animation = self.Value.Animation }
			end
			if type(Value) ~= "table" then return end
			local Color = Value.Color
			if type(Color) == "string" then Color = Color3.fromHex(Color) end
			if typeof(Color) == "Color3" then
				self.Hue, self.Sat, self.Val = Color:ToHSV()
			end
			if Value.Alpha ~= nil then self.Value.Alpha = Clamp(tonumber(Value.Alpha) or 0, 0, 1) end
			if Value.Animation ~= nil then self:SetAnimation(Value.Animation, true) end
			self:_Draw()
			if self.Flag then Library.Flags[self.Flag] = self.Value end
			if not Silent then self:_Fire(self.Value.Color, self.Value.Alpha) end
		end

		function PickerClass:SetAnimation(Mode, Silent)
			if not table.find(AnimationModes, Mode) then Mode = "None" end
			self.Value.Animation = Mode
			Library.AnimatedPickers[self] = Mode ~= "None" or nil
			if Mode == "None" then self:_Draw() end
			if self.AnimationDropdown and not Silent then self.AnimationDropdown:Set(Mode, true) end
		end

		function PickerClass:GetColor() return self.Current, self.CurrentAlpha end

		function PickerClass:Serialize()
			return { Color = self.Value.Color:ToHex(), Alpha = self.Value.Alpha, Animation = self.Value.Animation }
		end

		function PickerClass:Deserialize(Value)
			if type(Value) == "table" then
				self:Set({ Color = Value.Color and Color3.fromHex(Value.Color), Alpha = Value.Alpha, Animation = Value.Animation })
			end
		end

		function PickerClass:_Build()
			local Frame = PopupPanel(UDim2.fromOffset(215, 269), "ColorPicker")
			local Parts = {}

			local SV = Create("TextButton", { Position = UDim2.fromOffset(11, 11), Size = UDim2.fromOffset(171, 167), BackgroundColor3 = Color3.new(1, 0, 0), Parent = Frame })
			Corner(SV, 4)
			local White = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.new(1, 1, 1), Parent = SV })
			Corner(White, 4)
			Create("UIGradient", { Transparency = NumberSequence.new(0, 1), Parent = White })
			local Black = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.new(0, 0, 0), Parent = SV })
			Corner(Black, 4)
			Create("UIGradient", { Rotation = 90, Transparency = NumberSequence.new(1, 0), Parent = Black })
			local SVKnob = Create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(12, 12), ZIndex = 3, Parent = SV })
			Corner(SVKnob, 6)
			Create("UIStroke", { Color = Color3.new(1, 1, 1), Thickness = 2, Parent = SVKnob })

			local Hue = Create("TextButton", { Position = UDim2.fromOffset(191, 11), Size = UDim2.fromOffset(13, 167), BackgroundColor3 = Color3.new(1, 1, 1), Parent = Frame })
			Corner(Hue, 6)
			local Keypoints = {}
			for Index = 0, 6 do
				table.insert(Keypoints, ColorSequenceKeypoint.new(Index / 6, Color3.fromHSV((Index / 6) % 1, 1, 1)))
			end
			Keypoints[7] = ColorSequenceKeypoint.new(1, Color3.fromHSV(0, 1, 1))
			Create("UIGradient", { Rotation = 90, Color = ColorSequence.new(Keypoints), Parent = Hue })
			local HueKnob = Create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(12, 12), ZIndex = 3, Parent = Hue })
			Corner(HueKnob, 6)
			Create("UIStroke", { Color = Color3.new(1, 1, 1), Thickness = 2, Parent = HueKnob })

			local Alpha = Create("TextButton", { Position = UDim2.fromOffset(11, 188), Size = UDim2.fromOffset(193, 12), BackgroundTransparency = 1, Parent = Frame })
			local Checker = Create("ImageLabel", { Size = UDim2.fromScale(1, 1), Image = Icons.Checker, ScaleType = Enum.ScaleType.Tile, TileSize = UDim2.fromOffset(12, 12), Parent = Alpha })
			Corner(Checker, 6)
			local AlphaColor = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.new(1, 1, 1), Parent = Alpha })
			Corner(AlphaColor, 6)
			Create("UIGradient", { Transparency = NumberSequence.new(0, 1), Parent = AlphaColor })
			local AlphaKnob = Create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(12, 12), ZIndex = 3, Parent = Alpha })
			Corner(AlphaKnob, 6)
			Create("UIStroke", { Color = Color3.new(1, 1, 1), Thickness = 2, Parent = AlphaKnob })

			local DropHolder = Create("Frame", { Position = UDim2.fromOffset(11, 213), Size = UDim2.fromOffset(193, 47), BackgroundTransparency = 1, Parent = Frame })
			ListLayout(DropHolder, 0)
			local Mini = NewContainer(DropHolder, { Path = "" })
			Mini.NoIndex = true
			self.Popup = {
				Frame = Frame,
				Owner = self.Swatch,
				Update = function() PlacePopup(Frame, self.Swatch, -8, 9) end,
				OnClose = function() FadePopup(Frame, false) end,
			}
			Mini.ParentPopup = self.Popup
			self.AnimationDropdown = Mini:AddDropdown({
				Text = "Animations",
				Options = AnimationModes,
				Default = self.Value.Animation,
				Flag = self.Flag .. "_Animation",
				Callback = function(Mode)
					self:SetAnimation(Mode, true)
					if self.Flag then Library.Flags[self.Flag] = self.Value end
				end,
			})
			Library.Elements[self.Flag .. "_Animation"] = nil

			Parts.SV, Parts.SVKnob, Parts.HueKnob, Parts.AlphaColor, Parts.AlphaKnob = SV, SVKnob, HueKnob, AlphaColor, AlphaKnob
			self.Parts = Parts

			local Dragging
			local function Update()
				local Point = MousePosition()
				if Dragging == SV then
					self.Sat = Clamp((Point.X - SV.AbsolutePosition.X) / SV.AbsoluteSize.X, 0, 1)
					self.Val = 1 - Clamp((Point.Y - SV.AbsolutePosition.Y) / SV.AbsoluteSize.Y, 0, 1)
				elseif Dragging == Hue then
					self.Hue = Clamp((Point.Y - Hue.AbsolutePosition.Y) / Hue.AbsoluteSize.Y, 0, 0.999)
				elseif Dragging == Alpha then
					self.Value.Alpha = Round(Clamp((Point.X - Alpha.AbsolutePosition.X) / Alpha.AbsoluteSize.X, 0, 1), 0.01)
				end
				self:_Draw()
				if self.Flag then Library.Flags[self.Flag] = self.Value end
				self:_Fire(self.Value.Color, self.Value.Alpha)
			end
			for _, Area in { SV, Hue, Alpha } do
				Connect(Area.InputBegan, function(Input)
					if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
						Dragging = Area
						Update()
					end
				end)
			end
			Connect(UserInputService.InputChanged, function(Input)
				if Dragging and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then Update() end
			end)
			Connect(UserInputService.InputEnded, function(Input)
				if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then Dragging = nil end
			end)
		end

		function PickerClass:Open()
			if not self.Popup then self:_Build() end
			if self.Popup.Open then
				Library:ClosePopup(self.Popup)
				return
			end
			self.Popup.ParentPopup = self.Container and self.Container.ParentPopup
			self:_Draw()
			Library:OpenPopup(self.Popup)
			FadePopup(self.Popup.Frame, true)
		end

		function ToggleClass:AddColorPicker(Config)
			Config = Config or {}
			local Swatch = CreateSwatch(self.Extras, self:_ExtraOrder())
			local Picker = NewPicker(Config, Swatch, self.Container, self)
			self.ColorPickers = self.ColorPickers or {}
			table.insert(self.ColorPickers, Picker)
			return self
		end
		ToggleClass.AddColorpicker = ToggleClass.AddColorPicker

		function Container:AddColorPicker(Config)
			Config = Config or {}
			local Row = self:_Row(16)
			local Label = Create("TextLabel", {
				Weight = "SemiBold",
				Size = UDim2.new(1, -24, 1, 0),
				Text = Config.Text or Config.Title or "Color",
				TextXAlignment = Enum.TextXAlignment.Left,
				Theme = { TextColor3 = "Text" },
				Parent = Row,
			})
			local Holder = Create("Frame", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, 0, 0.5, 0), Size = UDim2.new(0, 0, 1, 0), AutomaticSize = Enum.AutomaticSize.X, BackgroundTransparency = 1, Parent = Row })
			ListLayout(Holder, 8, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Right, Enum.VerticalAlignment.Center)
			local Swatch = CreateSwatch(Holder, 100)
			local Picker = NewPicker(Config, Swatch, self, nil)
			Picker.Row, Picker.Label = Row, Label
			self:_Index(Picker.Text, "Colorpicker", Row)
			return Picker
		end
		Container.AddColorpicker = Container.AddColorPicker

		Connect(RunService.Heartbeat, function()
			local Now = os.clock()
			for Picker in Library.AnimatedPickers do
				local Mode = Picker.Value.Animation
				local Wave = 0.5 + 0.5 * math.sin(Now * 3)
				local H, S, V, Alpha = Picker.Hue, Picker.Sat, Picker.Val, Picker.Value.Alpha
				if Mode == "Rainbow" then
					H, S, V = (Now * 0.12) % 1, math.max(S, 0.6), math.max(V, 0.6)
				elseif Mode == "Fade" then
					V = V * (0.25 + 0.75 * Wave)
				elseif Mode == "Fade Alpha" then
					Alpha = Alpha + (1 - Alpha) * Wave
				end
				local Color = Color3.fromHSV(H, S, V)
				Picker.Current, Picker.CurrentAlpha = Color, Alpha
				if Picker.Popup and Picker.Popup.Open then Picker:_DrawKnobs(H, S, V, Alpha, true) end
				Picker.Swatch.BackgroundColor3 = Color
				Picker.Swatch.BackgroundTransparency = math.min(Alpha, 0.85)
				if Picker.Callback then SafeCall(Picker.Callback, Color, Alpha) end
			end
		end)
	end

	do
		function ToggleClass:AddSettings(Config)
			if self.SettingsContainer then return self.SettingsContainer end
			Config = Config or {}
			local Gear = Create("ImageButton", {
				Name = "Settings",
				Size = UDim2.fromOffset(13, 13),
				Theme = { ImageColor3 = "Inactive Text" },
				LayoutOrder = self:_ExtraOrder() - 100,
				Parent = self.Extras,
			})
			SetIcon(Gear, "Gear")
			local Frame = PopupPanel(UDim2.fromOffset(Config.Width or 206, 0), "ToggleSettings")
			Frame.AutomaticSize = Enum.AutomaticSize.Y
			local Items = Create("Frame", { Size = UDim2.new(1, 0, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, Parent = Frame })
			Padding(Items, 11, 11, 11, 11)
			ListLayout(Items, 6)
			local Settings = NewContainer(Items, { Section = self.Container.Section, Tab = self.Container.Tab, Window = self.Container.Window, Path = (self.Container.Path or "") .. " / " .. self.Text })
			if Config.Title ~= false then
				Settings.Counter += 1
				local Title = Create("Frame", { Size = UDim2.new(1, 0, 0, 16), BackgroundTransparency = 1, LayoutOrder = Settings.Counter, Parent = Items })
				local TitleIcon = Create("ImageLabel", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 0, 0.5, 0), Size = UDim2.fromOffset(12, 12), Theme = { ImageColor3 = "Inactive Text" }, Parent = Title })
				SetIcon(TitleIcon, "Gear")
				Create("TextLabel", { Weight = "SemiBold", Position = UDim2.fromOffset(19, 0), Size = UDim2.new(1, -19, 1, 0), Text = Config.Title or (self.Text .. " Settings"), TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Inactive Text" }, Parent = Title })
			end
			local Popup = {
				Frame = Frame,
				Owner = Gear,
				Update = function() PlacePopup(Frame, Gear, -8, 9) end,
				OnClose = function()
					FadePopup(Frame, false)
					ThemeTween(Gear, "ImageColor3", "Inactive Text", 0.15)
				end,
			}
			Settings.ParentPopup = Popup
			Connect(Gear.MouseEnter, function() ThemeTween(Gear, "ImageColor3", "Text", 0.15) end)
			Connect(Gear.MouseLeave, function() if not Popup.Open then ThemeTween(Gear, "ImageColor3", "Inactive Text", 0.15) end end)
			Connect(Gear.MouseButton1Click, function()
				if Popup.Open then Library:ClosePopup(Popup) return end
				Popup.ParentPopup = self.Container.ParentPopup
				Library:OpenPopup(Popup)
				FadePopup(Frame, true)
				ThemeTween(Gear, "ImageColor3", "Accent", 0.15)
			end)
			self.SettingsContainer = Settings
			return Settings
		end
		ToggleClass.Settings = ToggleClass.AddSettings
		ToggleClass.AddSetting = ToggleClass.AddSettings
	end

	do
		function Container:AddSeparator()
			local Row = self:_Row(15)
			local Line = Create("Frame", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.fromScale(0, 0.5), Size = UDim2.new(1, 0, 0, 8), BackgroundTransparency = 1, Parent = Row })
			Corner(Line, 4)
			Stroke(Line, "Outline")
			return { Row = Row, SetVisible = function(_, Visible) Row.Visible = Visible end }
		end
		Container.AddDivider = Container.AddSeparator
	end

	do
		local SliderClass = Class("Slider")

		function Container:AddSlider(Config)
			Config = Config or {}
			local Min, Max = Config.Min or 0, Config.Max or 100
			local Increment = Config.Increment or Config.Rounding or (Config.Decimals and 10 ^ -Config.Decimals) or Config.Decimal or 1
			local Self = setmetatable({
				Type = "Slider",
				Text = Config.Text or Config.Title or "Slider",
				Min = Min, Max = Max, Increment = Increment,
				Suffix = Config.Suffix or "",
				Prefix = Config.Prefix or "",
				Value = Clamp(Config.Default or Config.Value or Min, Min, Max),
				Callback = Config.Callback,
				Format = Config.Format,
				Container = self,
			}, SliderClass)
			Self.Flag = Config.Flag or NextFlag((self.Path or "") .. "/" .. Self.Text)

			local Row = self:_Row(32)
			local Label = Create("TextLabel", { Weight = "SemiBold", Size = UDim2.new(1, -60, 0, 14), Text = Self.Text, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Row })
			local ValueBox = Create("TextBox", {
				AnchorPoint = Vector2.new(1, 0.5),
				Position = UDim2.new(1, 0, 0, 7),
				Size = UDim2.fromOffset(0, 17),
				AutomaticSize = Enum.AutomaticSize.X,
				TextSize = 10,
				ClearTextOnFocus = false,
				Theme = { BackgroundColor3 = "Element", TextColor3 = "Inactive Text" },
				BackgroundTransparency = 0,
				Parent = Row,
			})
			Corner(ValueBox, 4)
			Shade(ValueBox)
			Stroke(ValueBox, "Outline")
			Padding(ValueBox, 0, 0, 5, 5)
			Create("UISizeConstraint", { MinSize = Vector2.new(22, 17), Parent = ValueBox })
			local Track = Create("TextButton", { Position = UDim2.fromOffset(0, 21), Size = UDim2.new(1, 0, 0, 10), Theme = { BackgroundColor3 = "Element" }, Parent = Row })
			Corner(Track, 5)
			Shade(Track)
			Stroke(Track, "Outline")
			local Fill = Create("Frame", { Size = UDim2.new(0, 10, 1, 0), Theme = { BackgroundColor3 = "ToggleFill" }, Parent = Track })
			Corner(Fill, 5)
			Shade(Fill)
			local Knob = Create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(10, 10), Theme = { BackgroundColor3 = "Knob" }, ZIndex = 2, Parent = Track })
			Corner(Knob, 5)

			Self.Row, Self.Label, Self.ValueBox, Self.Track, Self.Fill, Self.Knob = Row, Label, ValueBox, Track, Fill, Knob
			Self:_Draw(true)

			local Dragging = false
			local function UpdateFromMouse()
				local Percent = Clamp((MousePosition().X - Track.AbsolutePosition.X - 5) / math.max(1, Track.AbsoluteSize.X - 10), 0, 1)
				Self:Set(Min + (Max - Min) * Percent)
			end
			Connect(Track.InputBegan, function(Input)
				if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
					Dragging = true
					UpdateFromMouse()
				end
			end)
			Connect(UserInputService.InputChanged, function(Input)
				if Dragging and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then UpdateFromMouse() end
			end)
			Connect(UserInputService.InputEnded, function(Input)
				if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then Dragging = false end
			end)
			Connect(ValueBox.FocusLost, function()
				local Number = tonumber((ValueBox.Text:gsub("[^%d%.%-]", "")))
				if Number then Self:Set(Number) else Self:_Draw() end
			end)

			RegisterFlag(Self)
			self:_Index(Self.Text, "Slider", Row)
			task.defer(Self._Fire, Self, Self.Value)
			return Self
		end

		function SliderClass:_Text()
			if self.Format then return self.Format(self.Value) end
			local Value = self.Value
			local Text
			if self.Increment >= 1 then
				Text = tostring(math.floor(Value + 0.5))
			else
				local Decimals = math.max(0, math.ceil(-math.log10(self.Increment) - 1e-9))
				Text = string.format("%." .. Decimals .. "f", Value)
			end
			return self.Prefix .. Text .. self.Suffix
		end

		function SliderClass:_Draw(Instant)
			local Percent = (self.Value - self.Min) / math.max(1e-9, self.Max - self.Min)
			local Time = Instant and 0 or 0.12
			Tween(self.Fill, { Size = UDim2.new(Percent, 10 - 10 * Percent, 1, 0) }, Time)
			Tween(self.Knob, { Position = UDim2.new(Percent, 5 - 10 * Percent, 0.5, 0) }, Time)
			self.ValueBox.Text = self:_Text()
		end

		function SliderClass:Set(Value, Silent)
			Value = tonumber(Value) or self.Value
			Value = Clamp(Round(Value, self.Increment), self.Min, self.Max)
			Value = tonumber(string.format("%.6f", Value))
			local Changed = Value ~= self.Value
			self.Value = Value
			if self.Flag then Library.Flags[self.Flag] = Value end
			self:_Draw()
			if Changed and not Silent then self:_Fire(Value) end
		end

		function SliderClass:SetMax(Max) self.Max = Max; self:Set(self.Value) end
		function SliderClass:SetMin(Min) self.Min = Min; self:Set(self.Value) end
	end

	do
		local RangeClass = Class("RangeSlider")

		function Container:AddRangeSlider(Config)
			Config = Config or {}
			local Min, Max = Config.Min or 0, Config.Max or 100
			local Default = Config.Default or { Min, Max }
			local Self = setmetatable({
				Type = "RangeSlider",
				Text = Config.Text or Config.Title or "Range",
				Min = Min, Max = Max,
				Increment = Config.Increment or Config.Rounding or 1,
				Suffix = Config.Suffix or "",
				Value = { Clamp(Default[1] or Default.Min or Min, Min, Max), Clamp(Default[2] or Default.Max or Max, Min, Max) },
				Callback = Config.Callback,
				Container = self,
			}, RangeClass)
			Self.Flag = Config.Flag or NextFlag((self.Path or "") .. "/" .. Self.Text)

			local Row = self:_Row(32)
			Create("TextLabel", { Weight = "SemiBold", Size = UDim2.new(1, -90, 0, 14), Text = Self.Text, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Row })
			local ValueBox = Create("TextLabel", {
				AnchorPoint = Vector2.new(1, 0.5),
				Position = UDim2.new(1, 0, 0, 7),
				Size = UDim2.fromOffset(0, 17),
				AutomaticSize = Enum.AutomaticSize.X,
				TextSize = 10,
				NoCase = true,
				BackgroundTransparency = 0,
				Theme = { BackgroundColor3 = "Element", TextColor3 = "Inactive Text" },
				Parent = Row,
			})
			Corner(ValueBox, 4)
			Shade(ValueBox)
			Stroke(ValueBox, "Outline")
			Padding(ValueBox, 0, 0, 5, 5)
			local Track = Create("TextButton", { Position = UDim2.fromOffset(0, 21), Size = UDim2.new(1, 0, 0, 10), Theme = { BackgroundColor3 = "Element" }, Parent = Row })
			Corner(Track, 5)
			Shade(Track)
			Stroke(Track, "Outline")
			local Fill = Create("Frame", { Theme = { BackgroundColor3 = "ToggleFill" }, Parent = Track })
			Corner(Fill, 5)
			Shade(Fill)
			local Knobs = {}
			for Index = 1, 2 do
				Knobs[Index] = Create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(10, 10), Theme = { BackgroundColor3 = "Knob" }, ZIndex = 2, Parent = Track })
				Corner(Knobs[Index], 5)
			end
			Self.Row, Self.ValueBox, Self.Track, Self.Fill, Self.Knobs = Row, ValueBox, Track, Fill, Knobs
			Self:_Draw(true)

			local Dragging
			local function Percent()
				return Clamp((MousePosition().X - Track.AbsolutePosition.X - 5) / math.max(1, Track.AbsoluteSize.X - 10), 0, 1)
			end
			local function Update()
				local Value = Min + (Max - Min) * Percent()
				local New = table.clone(Self.Value)
				New[Dragging] = Value
				if New[1] > New[2] then
					New[1], New[2] = New[2], New[1]
					Dragging = 3 - Dragging
				end
				Self:Set(New)
			end
			Connect(Track.InputBegan, function(Input)
				if Input.UserInputType ~= Enum.UserInputType.MouseButton1 and Input.UserInputType ~= Enum.UserInputType.Touch then return end
				local Value = Min + (Max - Min) * Percent()
				Dragging = math.abs(Value - Self.Value[1]) <= math.abs(Value - Self.Value[2]) and 1 or 2
				Update()
			end)
			Connect(UserInputService.InputChanged, function(Input)
				if Dragging and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then Update() end
			end)
			Connect(UserInputService.InputEnded, function(Input)
				if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then Dragging = nil end
			end)
			RegisterFlag(Self)
			self:_Index(Self.Text, "Range slider", Row)
			task.defer(Self._Fire, Self, Self.Value)
			return Self
		end

		function RangeClass:_Format(Value)
			if self.Increment >= 1 then return tostring(math.floor(Value + 0.5)) end
			local Decimals = math.max(0, math.ceil(-math.log10(self.Increment) - 1e-9))
			return string.format("%." .. Decimals .. "f", Value)
		end

		function RangeClass:_Draw(Instant)
			local Span = math.max(1e-9, self.Max - self.Min)
			local A, B = (self.Value[1] - self.Min) / Span, (self.Value[2] - self.Min) / Span
			local Time = Instant and 0 or 0.12
			Tween(self.Knobs[1], { Position = UDim2.new(A, 5 - 10 * A, 0.5, 0) }, Time)
			Tween(self.Knobs[2], { Position = UDim2.new(B, 5 - 10 * B, 0.5, 0) }, Time)
			Tween(self.Fill, { Position = UDim2.new(A, -10 * A, 0, 0), Size = UDim2.new(B - A, 10 + 10 * A - 10 * B, 1, 0) }, Time)
			self.ValueBox.Text = self:_Format(self.Value[1]) .. self.Suffix .. " - " .. self:_Format(self.Value[2]) .. self.Suffix
		end

		function RangeClass:Set(Value, Silent)
			if type(Value) ~= "table" then return end
			local A = Clamp(Round(tonumber(Value[1] or Value.Min) or self.Value[1], self.Increment), self.Min, self.Max)
			local B = Clamp(Round(tonumber(Value[2] or Value.Max) or self.Value[2], self.Increment), self.Min, self.Max)
			if A > B then A, B = B, A end
			A, B = tonumber(string.format("%.6f", A)), tonumber(string.format("%.6f", B))
			local Changed = A ~= self.Value[1] or B ~= self.Value[2]
			self.Value = { A, B }
			if self.Flag then Library.Flags[self.Flag] = self.Value end
			self:_Draw()
			if Changed and not Silent then self:_Fire(self.Value) end
		end
	end

	local OptionRow; do
		local DropdownClass = Class("Dropdown")

		function OptionRow(Parent, Text, Order)
			local Option = Create("TextButton", {
				Name = "Option",
				Size = UDim2.new(1, 0, 0, 24),
				BackgroundTransparency = 1,
				Theme = { BackgroundColor3 = "Tab" },
				LayoutOrder = Order or 0,
				Parent = Parent,
			})
			local Bar = Create("Frame", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 7, 0.5, 0), Size = UDim2.fromOffset(3, 12), Theme = { BackgroundColor3 = "Accent" }, BackgroundTransparency = 1, Parent = Option })
			Corner(Bar, 1)
			local Label = Create("TextLabel", {
				Weight = "SemiBold",
				Position = UDim2.fromOffset(8, 0),
				Size = UDim2.new(1, -16, 1, 0),
				Text = Text,
				TextXAlignment = Enum.TextXAlignment.Left,
				TextTruncate = Enum.TextTruncate.AtEnd,
				Theme = { TextColor3 = "Inactive Text" },
				Parent = Option,
			})
			local Self = { Button = Option, Bar = Bar, Label = Label, Value = Text, Selected = false }
			function Self.SetSelected(_, Selected, Instant)
				Self.Selected = Selected
				local Time = Instant and 0 or 0.18
				Tween(Option, { BackgroundTransparency = Selected and 0 or 1 }, Time)
				Tween(Bar, { BackgroundTransparency = Selected and 0 or 1 }, Time)
				Tween(Label, { Position = UDim2.fromOffset(Selected and 18 or 8, 0) }, Time)
				ThemeTween(Label, "TextColor3", Selected and "Text" or "Inactive Text", Time)
			end
			Connect(Option.MouseEnter, function()
				if not Self.Selected then Tween(Option, { BackgroundTransparency = 0.6 }, 0.15) end
			end)
			Connect(Option.MouseLeave, function()
				if not Self.Selected then Tween(Option, { BackgroundTransparency = 1 }, 0.15) end
			end)
			return Self
		end

		local function NormalizeOptions(Options)
			local Values, Names = {}, {}
			for _, Option in Options or {} do
				local Value, Name = Option, tostring(Option)
				if type(Option) == "table" then
					Value = Option.Value ~= nil and Option.Value or Option.Name
					Name = tostring(Option.Name or Option.Value)
				end
				table.insert(Values, Value)
				Names[Value] = Name
			end
			return Values, Names
		end

		function Container:AddDropdown(Config)
			Config = Config or {}
			local Multi = Config.Multi == true
			local Values, Names = NormalizeOptions(Config.Options or Config.Values)
			local Default = Config.Default
			if Multi then
				Default = type(Default) == "table" and table.clone(Default) or (Default ~= nil and { Default } or {})
			elseif Default == nil and not Config.AllowNone then
				Default = Values[1]
			end
			local Self = setmetatable({
				Type = "Dropdown",
				Text = Config.Text or Config.Title or Config.Name,
				Options = Values,
				Names = Names,
				Multi = Multi,
				Value = Default,
				Callback = Config.Callback,
				Searchable = Config.Search or Config.Searchable,
				MaxVisible = Config.MaxVisible or 8,
				Container = self,
				OptionRows = {},
			}, DropdownClass)
			Self.Flag = Config.Flag or NextFlag((self.Path or "") .. "/" .. (Self.Text or "Dropdown"))

			local HasLabel = Self.Text ~= nil and Self.Text ~= ""
			local Row = self:_Row(HasLabel and 47 or 25)
			if HasLabel then
				Self.Label = Create("TextLabel", { Weight = "SemiBold", Size = UDim2.new(1, 0, 0, 14), Text = Self.Text, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Row })
			end
			local Box = Create("TextButton", {
				Position = UDim2.fromOffset(0, HasLabel and 21 or 0),
				Size = UDim2.new(1, 0, 0, 25),
				Theme = { BackgroundColor3 = "Element" },
				Parent = Row,
			})
			Corner(Box, 5)
			Shade(Box)
			Stroke(Box, "Outline")
			local ValueLabel = Create("TextLabel", {
				Weight = "SemiBold",
				Position = UDim2.fromOffset(8, 0),
				Size = UDim2.new(1, -30, 1, 0),
				TextXAlignment = Enum.TextXAlignment.Left,
				TextTruncate = Enum.TextTruncate.AtEnd,
				Theme = { TextColor3 = "Inactive Text" },
				Parent = Box,
			})
			LayoutGlyph(Box)
			Self.Row, Self.Box, Self.ValueLabel = Row, Box, ValueLabel

			Self:_DrawValue()
			Connect(Box.MouseEnter, function() ThemeTween(ValueLabel, "TextColor3", "Text", 0.12) end)
			Connect(Box.MouseLeave, function() ThemeTween(ValueLabel, "TextColor3", "Inactive Text", 0.12) end)
			Connect(Box.MouseButton1Click, function() Self:Toggle() end)
			RegisterFlag(Self)
			if Self.Text then self:_Index(Self.Text, "Dropdown", Row) end
			task.defer(function() if Self.Value ~= nil then Self:_Fire(Self.Value) end end)
			return Self
		end

		function Container:AddMultiDropdown(Config)
			Config = Config or {}
			Config.Multi = true
			return self:AddDropdown(Config)
		end

		function DropdownClass:_Name(Value)
			return self.Names[Value] or tostring(Value)
		end

		function DropdownClass:_DrawValue()
			local Text
			if self.Multi then
				local Shown = {}
				for _, Value in self.Value do table.insert(Shown, self:_Name(Value)) end
				Text = #Shown > 0 and table.concat(Shown, ", ") or "None"
			else
				Text = self.Value ~= nil and self:_Name(self.Value) or "None"
			end
			Library:SetText(self.ValueLabel, Text)
		end

		function DropdownClass:IsSelected(Option)
			if self.Multi then return table.find(self.Value, Option) ~= nil end
			return self.Value == Option
		end

		function DropdownClass:_BuildList()
			if self.Popup then self.Popup.Frame:Destroy() end
			local Frame = PopupPanel(UDim2.fromOffset(100, 100), "DropdownList", 5)
			local Search
			local Top = 1
			if self.Searchable then
				Search = Create("TextBox", {
					Weight = "SemiBold",
					Position = UDim2.fromOffset(6, 6),
					Size = UDim2.new(1, -12, 0, 22),
					PlaceholderText = "Search...",
					Text = "",
					ClearTextOnFocus = false,
					TextXAlignment = Enum.TextXAlignment.Left,
					Theme = { BackgroundColor3 = "Element", TextColor3 = "Text", PlaceholderColor3 = "Inactive Text" },
					BackgroundTransparency = 0,
					Parent = Frame,
				})
				Corner(Search, 4)
				Stroke(Search, "Outline")
				Padding(Search, 0, 0, 7, 7)
				Top = 32
			end
			local List = Create("ScrollingFrame", {
				Position = UDim2.fromOffset(1, Top),
				Size = UDim2.new(1, -2, 1, -(Top + 1)),
				ScrollBarThickness = 2,
				ScrollBarImageTransparency = 0,
				Theme = { ScrollBarImageColor3 = "Accent" },
				Parent = Frame,
			})
			ListLayout(List, 0)
			self.OptionRows = {}
			for Index, Option in self.Options do
				local Option_ = OptionRow(List, self:_Name(Option), Index)
				Option_.Value = Option
				Option_:SetSelected(self:IsSelected(Option), true)
				Connect(Option_.Button.MouseButton1Click, function() self:_Choose(Option) end)
				table.insert(self.OptionRows, Option_)
			end
			if Search then
				Connect(Search:GetPropertyChangedSignal("Text"), function()
					local Query = Search.Text:lower()
					local Count = 0
					for _, Option_ in self.OptionRows do
						local Match = Query == "" or self:_Name(Option_.Value):lower():find(Query, 1, true) ~= nil
						Option_.Button.Visible = Match
						if Match then Count += 1 end
					end
					self:_ResizeList(Count)
				end)
			end
			self.ListFrame, self.ListScroll, self.ListTop, self.SearchBox = Frame, List, Top, Search
			self.Popup = {
				Frame = Frame,
				Owner = self.Box,
				Update = function()
					Frame.Size = UDim2.fromOffset(self.Box.AbsoluteSize.X, Frame.Size.Y.Offset)
					PlacePopup(Frame, self.Box, 0, 8)
				end,
				OnClose = function() FadePopup(Frame, false) end,
			}
			self:_ResizeList(#self.Options)
		end

		function DropdownClass:_ResizeList(Count)
			local Visible = math.min(math.max(Count, 1), self.MaxVisible)
			self.ListFrame.Size = UDim2.fromOffset(self.Box.AbsoluteSize.X, Visible * 24 + 2 + (self.ListTop - 1))
		end

		function DropdownClass:_Choose(Option)
			if self.Multi then
				local Value = table.clone(self.Value)
				local Index = table.find(Value, Option)
				if Index then table.remove(Value, Index) else table.insert(Value, Option) end
				self:Set(Value)
			else
				self:Set(Option)
				if self.Popup then Library:ClosePopup(self.Popup) end
			end
		end

		function DropdownClass:Toggle()
			if not self.Popup or self._Dirty then
				self:_BuildList()
				self._Dirty = false
			end
			if self.Popup.Open then
				Library:ClosePopup(self.Popup)
				return
			end
			for _, Option_ in self.OptionRows do Option_:SetSelected(self:IsSelected(Option_.Value), true) end
			if self.SearchBox then self.SearchBox.Text = "" end
			self.Popup.ParentPopup = self.Container and self.Container.ParentPopup
			Library:OpenPopup(self.Popup)
			FadePopup(self.ListFrame, true, 4)
		end

		function DropdownClass:Set(Value, Silent)
			if self.Multi then
				if type(Value) ~= "table" then Value = Value ~= nil and { Value } or {} end
				local Clean = {}
				for _, Option in Value do
					if table.find(self.Options, Option) and not table.find(Clean, Option) then table.insert(Clean, Option) end
				end
				self.Value = Clean
			else
				if Value ~= nil and not table.find(self.Options, Value) then return end
				self.Value = Value
			end
			if self.Flag then Library.Flags[self.Flag] = self.Value end
			self:_DrawValue()
			for _, Option_ in self.OptionRows do Option_:SetSelected(self:IsSelected(Option_.Value)) end
			if not Silent then self:_Fire(self.Value) end
		end

		function DropdownClass:SetOptions(Options, Keep)
			self.Options, self.Names = NormalizeOptions(Options)
			self._Dirty = true
			if self.Popup and self.Popup.Open then
				Library:ClosePopup(self.Popup)
			end
			if not Keep then
				if self.Multi then self:Set({}, true) else self:Set(self.Options[1], true) end
			else
				self:Set(self.Value, true)
			end
		end
		DropdownClass.Refresh = DropdownClass.SetOptions
	end

	do
		local ButtonClass = Class("Button")

		local function CreateButton(Parent, Config, Container_)
			local Self = setmetatable({ Type = "Button", Text = Config.Text or Config.Title or "Button", Callback = Config.Callback, Container = Container_, Confirm = Config.Confirm or Config.Confirmation }, ButtonClass)
			local Button = Create("TextButton", { Size = UDim2.new(1, 0, 1, 0), Theme = { BackgroundColor3 = "Element" }, Parent = Parent })
			Corner(Button, 5)
			Shade(Button)
			Stroke(Button, "Outline")
			local Label = Create("TextLabel", { Weight = "SemiBold", Size = UDim2.fromScale(1, 1), Text = Self.Text, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Text" }, Parent = Button })
			Self.Button, Self.Label = Button, Label
			local Pending = false
			Connect(Button.MouseEnter, function() ThemeTween(Button, "BackgroundColor3", "Hovered Element", 0.15) end)
			Connect(Button.MouseLeave, function() ThemeTween(Button, "BackgroundColor3", "Element", 0.15) end)
			Connect(Button.MouseButton1Down, function() Tween(Label, { TextTransparency = 0.35 }, 0.08) end)
			Connect(Button.MouseButton1Up, function() Tween(Label, { TextTransparency = 0 }, 0.15) end)
			Connect(Button.MouseButton1Click, function()
				if Self.Confirm and not Pending then
					Pending = true
					Library:SetText(Label, "Are you sure?")
					ThemeTween(Label, "TextColor3", "Accent", 0.15)
					task.delay(2.5, function()
						if Pending then
							Pending = false
							Library:SetText(Label, Self.Text)
							ThemeTween(Label, "TextColor3", "Text", 0.15)
						end
					end)
					return
				end
				if Pending then
					Pending = false
					Library:SetText(Label, Self.Text)
					ThemeTween(Label, "TextColor3", "Text", 0.15)
				end
				Self:_Fire()
			end)
			return Self
		end

		function Container:AddButton(Config, Callback)
			if type(Config) == "string" then Config = { Text = Config, Callback = Callback } end
			Config = Config or {}
			local Row = self:_Row(28)
			local Layout = ListLayout(Row, 6, Enum.FillDirection.Horizontal)
			pcall(function() Layout.HorizontalFlex = Enum.UIFlexAlignment.Fill end)
			local Self = CreateButton(Row, Config, self)
			Self.Row = Row
			Self.Button.Size = UDim2.new(1, 0, 1, 0)
			self:_Index(Self.Text, "Button", Row)
			return Self
		end

		function ButtonClass:AddButton(Config)
			Config = Config or {}
			local Other = CreateButton(self.Row, Config, self.Container)
			Other.Row = self.Row
			local Count = 0
			for _, Child in self.Row:GetChildren() do if Child:IsA("TextButton") then Count += 1 end end
			for _, Child in self.Row:GetChildren() do
				if Child:IsA("TextButton") then Child.Size = UDim2.new(1 / Count, -6 * (Count - 1) / Count, 1, 0) end
			end
			if self.Container then self.Container:_Index(Other.Text, "Button", self.Row) end
			return Other
		end

		function ButtonClass:SetText(Text)
			self.Text = Text
			Library:SetText(self.Label, Text)
		end
	end

	do
		local InputClass = Class("Input")

		function Container:AddInput(Config)
			Config = Config or {}
			local Self = setmetatable({
				Type = "Input",
				Text = Config.Text or Config.Title,
				Value = tostring(Config.Default or Config.Value or ""),
				Callback = Config.Callback,
				Numeric = Config.Numeric,
				Finished = Config.Finished ~= false and not Config.Live,
				Container = self,
			}, InputClass)
			Self.Flag = Config.Flag or NextFlag((self.Path or "") .. "/" .. (Self.Text or Config.Placeholder or "Input"))
			local HasLabel = Self.Text ~= nil and Self.Text ~= ""
			local Row = self:_Row(HasLabel and 46 or 25)
			if HasLabel then
				Create("TextLabel", { Weight = "SemiBold", Size = UDim2.new(1, 0, 0, 14), Text = Self.Text, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Row })
			end
			local Box = Create("TextBox", {
				Weight = "SemiBold",
				Position = UDim2.fromOffset(0, HasLabel and 21 or 0),
				Size = UDim2.new(1, 0, 0, 25),
				Text = Self.Value,
				PlaceholderText = Config.Placeholder or Config.PlaceHolder or "",
				ClearTextOnFocus = Config.ClearTextOnFocus == true,
				TextXAlignment = Enum.TextXAlignment.Left,
				TextTruncate = Enum.TextTruncate.AtEnd,
				Theme = { BackgroundColor3 = "Element", TextColor3 = "Text", PlaceholderColor3 = "Inactive Text" },
				BackgroundTransparency = 0,
				Parent = Row,
			})
			Corner(Box, 5)
			Shade(Box)
			Stroke(Box, "Outline")
			Padding(Box, 0, 0, 8, 8)
			Self.Row, Self.Box = Row, Box

			local function Commit()
				local Text = Box.Text
				if Self.Numeric then
					Text = Text:gsub("[^%d%.%-]", "")
					Box.Text = Text
				end
				Self.Value = Text
				if Self.Flag then Library.Flags[Self.Flag] = Text end
				Self:_Fire(Text)
			end
			if Self.Finished then
				Connect(Box.FocusLost, Commit)
			else
				Connect(Box:GetPropertyChangedSignal("Text"), Commit)
			end
			RegisterFlag(Self)
			self:_Index(Self.Text or Config.Placeholder or "Input", "Input", Row)
			return Self
		end
		Container.AddTextbox = Container.AddInput

		function InputClass:Set(Value, Silent)
			Value = tostring(Value or "")
			self.Value = Value
			self.Box.Text = Value
			if self.Flag then Library.Flags[self.Flag] = Value end
			if not Silent then self:_Fire(Value) end
		end
	end

	do
		function Container:AddLabel(Config)
			if type(Config) == "string" then Config = { Text = Config } end
			Config = Config or {}
			self.Counter += 1
			local Label = Create("TextLabel", {
				Weight = "SemiBold",
				Name = "Label",
				Size = UDim2.new(1, 0, 0, 0),
				AutomaticSize = Enum.AutomaticSize.Y,
				Text = Config.Text or "",
				TextWrapped = true,
				TextXAlignment = Enum.TextXAlignment.Left,
				Theme = { TextColor3 = Config.Color or (Config.Muted == false and "Text" or "Inactive Text") },
				LayoutOrder = self.Counter,
				Parent = self.Holder,
			})
			local Self = { Type = "Label", Row = Label, Label = Label }
			function Self.SetText(_, Text) Library:SetText(Label, Text) end
			function Self.SetVisible(_, Visible) Label.Visible = Visible end
			return Self
		end
		Container.AddParagraph = Container.AddLabel
	end

	do
		local ListClass = Class("List")

		function Container:AddList(Config)
			Config = Config or {}
			local Multi = Config.Multi == true
			local Default = Config.Default
			if Multi then Default = type(Default) == "table" and table.clone(Default) or (Default ~= nil and { Default } or {}) end
			local Self = setmetatable({
				Type = "List",
				Text = Config.Text or Config.Title,
				Options = table.clone(Config.Options or Config.Values or {}),
				Multi = Multi,
				Value = Default,
				Callback = Config.Callback,
				Container = self,
				Rows = {},
				Query = "",
			}, ListClass)
			Self.Flag = Config.Flag or NextFlag((self.Path or "") .. "/" .. (Self.Text or "List"))
			local Height = Config.Height or Config.Size or 178
			local HasLabel = Self.Text ~= nil and Self.Text ~= ""
			local Searchable = Config.Search or Config.Searchable
			local Top = HasLabel and 21 or 0
			local Row = self:_Row(Top + Height + (Searchable and 31 or 0))
			if HasLabel then
				Create("TextLabel", { Weight = "SemiBold", Size = UDim2.new(1, 0, 0, 14), Text = Self.Text, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Row })
			end
			if Searchable then
				local Search = Create("TextBox", {
					Weight = "SemiBold",
					Position = UDim2.fromOffset(0, Top),
					Size = UDim2.new(1, 0, 0, 25),
					PlaceholderText = "Search...",
					Text = "",
					ClearTextOnFocus = false,
					TextXAlignment = Enum.TextXAlignment.Left,
					Theme = { BackgroundColor3 = "Element", TextColor3 = "Text", PlaceholderColor3 = "Inactive Text" },
					BackgroundTransparency = 0,
					Parent = Row,
				})
				Corner(Search, 5)
				Shade(Search)
				Stroke(Search, "Outline")
				Padding(Search, 0, 0, 8, 8)
				Connect(Search:GetPropertyChangedSignal("Text"), function()
					Self.Query = Search.Text:lower()
					Self:_Filter()
				end)
				Top += 31
			end
			local Box = Create("Frame", { Position = UDim2.fromOffset(0, Top), Size = UDim2.new(1, 0, 0, Height), Theme = { BackgroundColor3 = "Element" }, Parent = Row })
			Corner(Box, 5)
			Stroke(Box, "Outline")
			local Scroll = Create("ScrollingFrame", {
				Position = UDim2.fromOffset(1, 1),
				Size = UDim2.new(1, -2, 1, -2),
				ScrollBarThickness = 2,
				Theme = { ScrollBarImageColor3 = "Accent" },
				Parent = Box,
			})
			Padding(Scroll, 8, 8, 9, 9)
			ListLayout(Scroll, 0)
			Self.Row, Self.Box, Self.Scroll = Row, Box, Scroll
			Self:_Build()
			RegisterFlag(Self)
			if Self.Text then self:_Index(Self.Text, "List", Row) end
			return Self
		end
		Container.AddListbox = Container.AddList

		function ListClass:IsSelected(Option)
			if self.Multi then return table.find(self.Value, Option) ~= nil end
			return self.Value == Option
		end

		function ListClass:_Build()
			for _, Row in self.Rows do Row.Button:Destroy() end
			self.Rows = {}
			for Index, Option in self.Options do
				local Row = OptionRow(self.Scroll, tostring(Option), Index)
				Row.Value = Option
				Row:SetSelected(self:IsSelected(Option), true)
				Connect(Row.Button.MouseButton1Click, function()
					if self.Multi then
						local Value = table.clone(self.Value)
						local Found = table.find(Value, Option)
						if Found then table.remove(Value, Found) else table.insert(Value, Option) end
						self:Set(Value)
					else
						self:Set(Option)
					end
				end)
				table.insert(self.Rows, Row)
			end
			self:_Filter()
		end

		function ListClass:_Filter()
			for _, Row in self.Rows do
				Row.Button.Visible = self.Query == "" or tostring(Row.Value):lower():find(self.Query, 1, true) ~= nil
			end
		end

		function ListClass:Set(Value, Silent)
			if self.Multi then
				if type(Value) ~= "table" then Value = Value ~= nil and { Value } or {} end
				self.Value = table.clone(Value)
			else
				self.Value = Value
			end
			if self.Flag then Library.Flags[self.Flag] = self.Value end
			for _, Row in self.Rows do Row:SetSelected(self:IsSelected(Row.Value)) end
			if not Silent then self:_Fire(self.Value) end
		end

		function ListClass:SetOptions(Options)
			self.Options = table.clone(Options or {})
			if self.Multi then
				local Keep = {}
				for _, Option in self.Value do if table.find(self.Options, Option) then table.insert(Keep, Option) end end
				self.Value = Keep
			elseif self.Value ~= nil and not table.find(self.Options, self.Value) then
				self.Value = nil
			end
			self:_Build()
		end
		ListClass.Refresh = ListClass.SetOptions
	end

	do
		local PartPickerClass = Class("PartPicker")

		function Container:AddPartPicker(Config)
			Config = Config or {}
			local Self = setmetatable({ Type = "PartPicker", Text = Config.Text or "Part", Value = nil, Callback = Config.Callback, Container = self, Filter = Config.Filter }, PartPickerClass)
			local Row = self:_Row(47)
			Create("TextLabel", { Weight = "SemiBold", Size = UDim2.new(1, 0, 0, 14), Text = Self.Text, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Row })
			local Box = Create("TextButton", { Position = UDim2.fromOffset(0, 21), Size = UDim2.new(1, 0, 0, 25), Theme = { BackgroundColor3 = "Element" }, Parent = Row })
			Corner(Box, 5)
			Shade(Box)
			Stroke(Box, "Outline")
			local ValueLabel = Create("TextLabel", { Weight = "SemiBold", Position = UDim2.fromOffset(8, 0), Size = UDim2.new(1, -30, 1, 0), Text = "None", NoCase = true, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Inactive Text" }, Parent = Box })
			local Crosshair = Create("ImageLabel", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -7, 0.5, 0), Size = UDim2.fromOffset(12, 12), Theme = { ImageColor3 = "Inactive Text" }, Parent = Box })
			SetIcon(Crosshair, "Bullseye")
			Self.Row, Self.Box, Self.ValueLabel = Row, Box, ValueLabel

			Connect(Box.MouseButton1Click, function() Self:Pick() end)
			self:_Index(Self.Text, "Part picker", Row)
			return Self
		end

		function PartPickerClass:Pick()
			if Library.Picking then return end
			Library.Picking = self
			self.ValueLabel.Text = "Click a part... (Esc to cancel)"
			ThemeTween(self.ValueLabel, "TextColor3", "Accent", 0.15)
			local Highlight = Instance.new("Highlight")
			Highlight.FillTransparency = 0.6
			Highlight.OutlineTransparency = 0
			Highlight.FillColor = Theme.Accent
			Highlight.OutlineColor = Theme.Accent
			Highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
			local Camera = Workspace.CurrentCamera
			local Params = RaycastParams.new()
			Params.FilterType = Enum.RaycastFilterType.Exclude
			Params.FilterDescendantsInstances = { LocalPlayer.Character }
			local Hovered
			local Window_ = Library.Window
			local WasOpen = Window_ and Window_.Open
			if Window_ then Window_:SetOpen(false) end
			local Step, Click
			local function Finish(Part)
				if Step then Step:Disconnect() end
				if Click then Click:Disconnect() end
				Highlight:Destroy()
				Library.Picking = nil
				if Window_ and WasOpen then Window_:SetOpen(true) end
				ThemeTween(self.ValueLabel, "TextColor3", "Inactive Text", 0.15)
				if Part then self:Set(Part) else self.ValueLabel.Text = self.Value and self.Value.Name or "None" end
			end
			Step = RunService.RenderStepped:Connect(function()
				local Point = MousePosition()
				local Ray = Camera:ScreenPointToRay(Point.X, Point.Y)
				local Result = Workspace:Raycast(Ray.Origin, Ray.Direction * 5000, Params)
				local Part = Result and Result.Instance
				if Part and self.Filter and not self.Filter(Part) then Part = nil end
				if Part ~= Hovered then
					Hovered = Part
					Highlight.Adornee = Part
					Highlight.Parent = Part and Library.HudGui or nil
				end
			end)
			Click = UserInputService.InputBegan:Connect(function(Input)
				if Input.UserInputType == Enum.UserInputType.MouseButton1 then
					Finish(Hovered)
				elseif Input.KeyCode == Enum.KeyCode.Escape then
					Finish(nil)
				end
			end)
		end

		function PartPickerClass:Set(Part, Silent)
			self.Value = Part
			self.ValueLabel.Text = Part and Part:GetFullName():gsub("^Workspace%.", "") or "None"
			if not Silent then self:_Fire(Part) end
		end
	end

	do
		function Library:_Index(Entry)
			table.insert(Library.SearchIndex, Entry)
		end

		function Window:_BuildSearch()
			local Canvas = self.Canvas
			local Dim = Create("TextButton", { Name = "SearchDim", Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.new(0, 0, 0), BackgroundTransparency = 1, Visible = false, ZIndex = 40, Parent = Canvas })
			local Modal = Create("CanvasGroup", {
				Name = "Search",
				Active = true,
				AnchorPoint = Vector2.new(0.5, 0),
				Position = UDim2.new(0.5, 0, 0, 61),
				Size = UDim2.fromOffset(421, 340),
				Theme = { BackgroundColor3 = "Popup" },
				GroupTransparency = 1,
				Visible = false,
				ZIndex = 41,
				Parent = Canvas,
			})
			Corner(Modal, 8)
			Stroke(Modal, "Outline")
			local Title = Create("TextLabel", { Position = UDim2.fromOffset(18, 13), Size = UDim2.new(1, -36, 0, 24), Text = "Search", TextSize = 17, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Modal })
			local InputFrame = Create("Frame", { Position = UDim2.fromOffset(17, 52), Size = UDim2.new(1, -34, 0, 36), Theme = { BackgroundColor3 = "Tab" }, Parent = Modal })
			Corner(InputFrame, 8)
			Stroke(InputFrame, "Outline")
			local Icon = Create("ImageLabel", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 12, 0.5, 0), Size = UDim2.fromOffset(14, 14), Theme = { ImageColor3 = "Inactive Text" }, Parent = InputFrame })
			SetIcon(Icon, "Search")
			local Box = Create("TextBox", {
				Position = UDim2.fromOffset(34, 0),
				Size = UDim2.new(1, -44, 1, 0),
				PlaceholderText = "Type to search...",
				Text = "",
				ClearTextOnFocus = false,
				TextXAlignment = Enum.TextXAlignment.Left,
				Theme = { TextColor3 = "Text", PlaceholderColor3 = "Inactive Text" },
				Parent = InputFrame,
			})
			local Results = Create("ScrollingFrame", {
				Position = UDim2.fromOffset(17, 100),
				Size = UDim2.new(1, -30, 1, -110),
				ScrollBarThickness = 2,
				Theme = { ScrollBarImageColor3 = "Accent" },
				Parent = Modal,
			})
			ListLayout(Results, 6)
			Padding(Results, 0, 6, 0, 6)

			self.SearchParts = { Dim = Dim, Modal = Modal, Title = Title, Box = Box, Results = Results }

			local function Render(Query)
				for _, Child in Results:GetChildren() do
					if Child:IsA("GuiObject") then Child:Destroy() end
				end
				Library:SetText(Title, Query ~= "" and Query or "Search")
				if Query ~= "" then
					self.SearchText.Text = Query
					ThemeTween(self.SearchText, "TextColor3", "Text", 0.1)
				else
					self.SearchText.Text = "Search..."
					ThemeTween(self.SearchText, "TextColor3", "Inactive Text", 0.1)
				end
				if Query == "" then return end
				local Lower = Query:lower()
				local Matches = {}
				for _, Entry in Library.SearchIndex do
					if Entry.Tab and Entry.Tab.Window == self then
						local Title_ = tostring(Entry.Title or ""):lower()
						local Start = Title_:find(Lower, 1, true)
						if Start then table.insert(Matches, { Entry = Entry, Score = Start + (Entry.Type == "Section" and -0.5 or 0) }) end
					end
				end
				table.sort(Matches, function(A, B) return A.Score < B.Score end)
				for Index = 1, math.min(#Matches, 40) do
					local Entry = Matches[Index].Entry
					local Row = Create("CanvasGroup", { Size = UDim2.new(1, 0, 0, 42), Theme = { BackgroundColor3 = "Tab" }, GroupTransparency = 1, LayoutOrder = Index, Parent = Results })
					Corner(Row, 6)
					Stroke(Row, "Outline")
					local Bar = Create("Frame", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 6, 0.5, 0), Size = UDim2.fromOffset(3, 27), Theme = { BackgroundColor3 = "Accent" }, Parent = Row })
					Corner(Bar, 1)
					Create("TextLabel", { Position = UDim2.fromOffset(17, 6), Size = UDim2.new(1, -24, 0, 16), Text = Entry.Title, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Row })
					Create("TextLabel", { Position = UDim2.fromOffset(17, 21), Size = UDim2.new(1, -24, 0, 14), Text = (Entry.Path or "") .. "  ·  " .. (Entry.Type or ""), TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Inactive Text" }, Parent = Row })
					local Click = Create("TextButton", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, ZIndex = 3, Parent = Row })
					Connect(Click.MouseEnter, function() ThemeTween(Row, "BackgroundColor3", "Hovered Element", 0.15) end)
					Connect(Click.MouseLeave, function() ThemeTween(Row, "BackgroundColor3", "Tab", 0.15) end)
					Connect(Click.MouseButton1Click, function() self:_GoTo(Entry) end)
					task.delay((Index - 1) * 0.03, function()
						if Row.Parent then Tween(Row, { GroupTransparency = 0 }, 0.25) end
					end)
				end
			end
			Connect(Box:GetPropertyChangedSignal("Text"), function() Render(Box.Text) end)
			Connect(Dim.MouseButton1Click, function() self:CloseSearch() end)
			Connect(UserInputService.InputBegan, function(Input)
				if Input.KeyCode == Enum.KeyCode.Escape and self.SearchOpen then self:CloseSearch() end
			end)
		end

		function Window:OpenSearch()
			local Parts = self.SearchParts
			if self.SearchOpen then return end
			self.SearchOpen = true
			Library:CloseAllPopups()
			Parts.Dim.Visible = true
			Parts.Modal.Visible = true
			Tween(Parts.Dim, { BackgroundTransparency = 0.45 }, 0.2)
			Parts.Modal.Position = UDim2.new(0.5, 0, 0, 69)
			Tween(Parts.Modal, { GroupTransparency = 0, Position = UDim2.new(0.5, 0, 0, 61) }, 0.25)
			task.defer(function() Parts.Box:CaptureFocus() end)
		end

		function Window:CloseSearch()
			local Parts = self.SearchParts
			if not Parts or not self.SearchOpen then return end
			self.SearchOpen = false
			Parts.Box:ReleaseFocus()
			Tween(Parts.Dim, { BackgroundTransparency = 1 }, 0.2)
			local Fade = Tween(Parts.Modal, { GroupTransparency = 1 }, 0.2)
			Fade.Completed:Connect(function()
				if self.SearchOpen then return end
				Parts.Dim.Visible = false
				Parts.Modal.Visible = false
				Parts.Box.Text = ""
			end)
		end

		function Window:_GoTo(Entry)
			self:CloseSearch()
			if Entry.Tab then Entry.Tab:Select() end
			local Target = Entry.Target
			if not Target then return end
			task.delay(0.05, function()
				local Column = Target:FindFirstAncestorWhichIsA("ScrollingFrame")
				if Column and Column.Parent == Entry.Tab.Page then
					local Offset = Target.AbsolutePosition.Y - Column.AbsolutePosition.Y + Column.CanvasPosition.Y - 30
					local MaxY = math.max(0, Column.AbsoluteCanvasSize.Y - Column.AbsoluteWindowSize.Y)
					Tween(Column, { CanvasPosition = Vector2.new(0, Clamp(Offset, 0, MaxY)) }, 0.35)
				end
				task.wait(0.3)
				local Content = Target:IsDescendantOf(self.Content) and self.Content or Target:FindFirstAncestorWhichIsA("LayerCollector")
				if not Content then return end
				local Flash = Create("Frame", { Theme = { BackgroundColor3 = "Accent" }, BackgroundTransparency = 0.82, ZIndex = 50, Parent = Content })
				Corner(Flash, 6)
				local function Follow()
					local Position = Target.AbsolutePosition - Content.AbsolutePosition
					Flash.Position = UDim2.fromOffset(Position.X - 4, Position.Y - 3)
					Flash.Size = UDim2.fromOffset(Target.AbsoluteSize.X + 8, Target.AbsoluteSize.Y + 6)
				end
				Follow()
				local Following = RunService.RenderStepped:Connect(Follow)
				Tween(Flash, { BackgroundTransparency = 1 }, 1.2).Completed:Connect(function()
					Following:Disconnect()
					Flash:Destroy()
				end)
			end)
		end
	end

	local function HudPanel(Properties)
		Properties.Theme = Properties.Theme or { BackgroundColor3 = "Popup" }
		local Frame = Create("Frame", Properties)
		Corner(Frame, 6)
		Stroke(Frame, "Outline")
		return Frame
	end

	do
		local NotifyHolder = Create("Frame", { Name = "Notifications", Position = UDim2.fromOffset(15, 15), Size = UDim2.new(0, 400, 1, -30), BackgroundTransparency = 1, Parent = Library.HudGui })
		ListLayout(NotifyHolder, 6)
		local NotifyCounter = 0
		local NotifyColors = {
			Success = Rgb(76, 214, 128),
			Info = nil,
			Warning = Rgb(242, 188, 72),
			Error = Rgb(240, 84, 84),
		}
		local NotifyIcons = { Success = "Check", Info = "Info", Warning = "Warning", Error = "Error" }

		function Library:Notify(Config, Duration, Kind)
			if type(Config) ~= "table" then Config = { Text = tostring(Config), Duration = Duration, Type = Kind } end
			Kind = Config.Type or Config.Kind or "Success"
			Duration = Config.Duration or Config.Lifetime or Config.Time or 4
			NotifyCounter += 1

			local Holder = Create("Frame", { Size = UDim2.fromOffset(0, 30), AutomaticSize = Enum.AutomaticSize.X, BackgroundTransparency = 1, LayoutOrder = -NotifyCounter, Parent = NotifyHolder })
			local Panel = Create("CanvasGroup", { Position = UDim2.fromOffset(-20, 0), Size = UDim2.fromOffset(0, 30), AutomaticSize = Enum.AutomaticSize.X, Theme = { BackgroundColor3 = "Popup" }, GroupTransparency = 1, Parent = Holder })
			Corner(Panel, 6)
			Stroke(Panel, "Outline")
			local Color = NotifyColors[Kind]
			local Bar = Create("Frame", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 1, 0.5, 0), Size = UDim2.fromOffset(2, 15), BackgroundColor3 = Color or Theme.Accent, Parent = Panel })
			local Icon = Create("ImageLabel", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 12, 0.5, 0), Size = UDim2.fromOffset(10, 10), ImageColor3 = Color or Theme.Accent, Parent = Panel })
			if not Color then
				Library:Theme(Bar, "BackgroundColor3", "Accent")
				Library:Theme(Icon, "ImageColor3", "Accent")
			end
			SetIcon(Icon, Config.Icon or NotifyIcons[Kind] or "Check")
			local Label = Create("TextLabel", { Position = UDim2.fromOffset(31, 0), Size = UDim2.new(0, 0, 1, 0), AutomaticSize = Enum.AutomaticSize.X, Text = Config.Text or Config.Title or "", TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Panel })
			Padding(Label, 0, 0, 0, 12)

			Tween(Panel, { Position = UDim2.fromOffset(0, 0), GroupTransparency = 0 }, 0.3)
			local Entry = { Holder = Holder }
			table.insert(Library.Notifications, Entry)
			task.delay(Duration, function()
				if not Holder.Parent then return end
				Tween(Panel, { Position = UDim2.fromOffset(-20, 0), GroupTransparency = 1 }, 0.3).Completed:Wait()
				Tween(Holder, { Size = UDim2.fromOffset(0, 0) }, 0.15).Completed:Wait()
				Holder:Destroy()
				local Index = table.find(Library.Notifications, Entry)
				if Index then table.remove(Library.Notifications, Index) end
			end)
			return Entry
		end
	end

	local HudDraggable; do
		function HudDraggable(Handle, Target, Key)
			Layout.TrackPosition(Key, Target)
			local Dragging, Start, From
			Connect(Handle.InputBegan, function(Input)
				if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
					Dragging, Start, From = true, MousePosition(), Target.Position
				end
			end)
			Connect(UserInputService.InputChanged, function(Input)
				if Dragging and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then
					local Delta = MousePosition() - Start
					Target.Position = UDim2.new(From.X.Scale, From.X.Offset + Delta.X, From.Y.Scale, From.Y.Offset + Delta.Y)
				end
			end)
			Connect(UserInputService.InputEnded, function(Input)
				if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
					if Dragging then Library:SaveLayout() end
					Dragging = false
				end
			end)
		end

		local Hotkeys = {
			Visible = true,
			Mode = "Active",
			ShowMode = false,
			Rows = {},
		}
		Library.Hotkeys = Hotkeys

		local HotkeyHolder = Create("Frame", { Name = "Hotkeys", Position = UDim2.new(0, 15, 0.5, -12), Size = UDim2.fromOffset(200, 25), BackgroundTransparency = 1, Parent = Library.HudGui })
		local HotkeyHeader = HudPanel({ Size = UDim2.fromOffset(0, 25), AutomaticSize = Enum.AutomaticSize.X, Active = true, Parent = HotkeyHolder })
		do
			local Glyph = Create("Frame", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 10, 0.5, 0), Size = UDim2.fromOffset(14, 14), BackgroundTransparency = 1, Parent = HotkeyHeader })
			local Ball = Create("Frame", { Position = UDim2.fromOffset(0, 6), Size = UDim2.fromOffset(8, 8), Theme = { BackgroundColor3 = "Accent" }, Parent = Glyph })
			Corner(Ball, 4)
			local Stick = Create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromOffset(8.5, 5.5), Size = UDim2.fromOffset(8, 1.6), Rotation = -45, Theme = { BackgroundColor3 = "Accent" }, Parent = Glyph })
			Corner(Stick, 1)
			local Tip = Create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromOffset(11.5, 2.5), Size = UDim2.fromOffset(5, 3), Rotation = -45, Theme = { BackgroundColor3 = "Accent" }, Parent = Glyph })
			Corner(Tip, 2)
			Hotkeys.Title = Create("TextLabel", { Weight = "SemiBold", Position = UDim2.fromOffset(31, 0), Size = UDim2.new(0, 0, 1, 0), AutomaticSize = Enum.AutomaticSize.X, Text = "Hotkeys", TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = HotkeyHeader })
			Padding(Hotkeys.Title, 0, 0, 0, 10)
		end
		HudDraggable(HotkeyHeader, HotkeyHolder, "Hotkeys")
		local HotkeyList = Create("Frame", { Position = UDim2.fromOffset(0, 30), Size = UDim2.fromOffset(260, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, Parent = HotkeyHolder })
		ListLayout(HotkeyList, 0)
		Hotkeys.Holder, Hotkeys.List = HotkeyHolder, HotkeyList
		Library.HotkeysVisible = true

		function Library:SetHotkeysVisible(Visible)
			Library.HotkeysVisible = Visible
			Hotkeys.Visible = Visible
			HotkeyHolder.Visible = Visible
		end

		function Hotkeys:SetMode(Mode)
			self.Mode = Mode == "All" and "All" or "Active"
			Library:_RefreshHotkeys()
		end

		function Hotkeys:SetShowMode(Show)
			self.ShowMode = Show
			Library:_RefreshHotkeys()
		end

		function Hotkeys:SetTitle(Text)
			Library:SetText(self.Title, Text)
		end

		local function KeybindDisplayName(Keybind)
			local Name = Keybind.Name
			if not Name and Keybind.Toggle then
				local Toggle_ = Keybind.Toggle
				local Section_ = Toggle_.Container and Toggle_.Container.Section
				Name = (Toggle_.Text == "Enabled" and Section_ and Section_.Title) or Toggle_.Text
			end
			return Name or Keybind.Text
		end

		local ROW_HEIGHT, ROW_GAP, ROW_SLIDE = 23, 5, 10

		local function HotkeyRow(Keybind)
			local Row = Hotkeys.Rows[Keybind]
			if Row then return Row end
			local Holder = Create("Frame", { Size = UDim2.fromOffset(0, 0), AutomaticSize = Enum.AutomaticSize.X, BackgroundTransparency = 1, Visible = false, Parent = HotkeyList })
			local Panel = Create("Frame", { Position = UDim2.fromOffset(-ROW_SLIDE, 0), Size = UDim2.fromOffset(0, ROW_HEIGHT), AutomaticSize = Enum.AutomaticSize.X, BackgroundTransparency = 1, Theme = { BackgroundColor3 = "Popup" }, Parent = Holder })
			Corner(Panel, 6)
			local Outline = Stroke(Panel, "Outline")
			Outline.Transparency = 1
			local Label = Create("TextLabel", { Weight = "SemiBold", Size = UDim2.new(0, 0, 1, 0), AutomaticSize = Enum.AutomaticSize.X, TextXAlignment = Enum.TextXAlignment.Left, TextTransparency = 1, Theme = { TextColor3 = "Text" }, Parent = Panel })
			Padding(Label, 0, 0, 9, 9)
			Row = { Holder = Holder, Panel = Panel, Outline = Outline, Label = Label, Shown = false }
			Hotkeys.Rows[Keybind] = Row
			return Row
		end

		local function ShowRow(Row, Show)
			if Row.Shown == Show then return end
			Row.Shown = Show
			Row.Token = (Row.Token or 0) + 1
			local Token = Row.Token
			local Alpha = Show and 0 or 1
			local Time, Style, Direction = Show and 0.22 or 0.16, Enum.EasingStyle.Quint, Show and Enum.EasingDirection.Out or Enum.EasingDirection.In
			if Show then
				Row.Holder.Visible = true
				Row.Panel.Position = UDim2.fromOffset(-ROW_SLIDE, 0)
			end
			Tween(Row.Holder, { Size = UDim2.fromOffset(0, Show and ROW_HEIGHT + ROW_GAP or 0) }, Show and 0.2 or 0.22, Enum.EasingStyle.Quint, Enum.EasingDirection.Out)
			Tween(Row.Panel, { Position = UDim2.fromOffset(Show and 0 or -ROW_SLIDE, 0), BackgroundTransparency = Alpha }, Time, Style, Direction)
			Tween(Row.Outline, { Transparency = Alpha }, Time, Style, Direction)
			Tween(Row.Label, { TextTransparency = Alpha }, Time, Style, Direction).Completed:Connect(function()
				if not Show and Row.Token == Token then Row.Holder.Visible = false end
			end)
		end

		function Library:_RefreshHotkeys()
			for Index, Keybind in Library.Keybinds do
				local Listed = Keybind.Value.Key and not Keybind.NoList and not Keybind.OnPress
				local Active = Listed and Keybind:IsActive()
				local Show = Listed and (Active or Hotkeys.Mode == "All")
				if Show or Hotkeys.Rows[Keybind] then
					local Row = HotkeyRow(Keybind)
					Row.Holder.LayoutOrder = Index
					if Listed then
						local Key = Keybind.Value.Key
						local KeyText = Key.EnumType == Enum.KeyCode and Key.Name or Key.Name:gsub("MouseButton", "MB")
						local Text = KeybindDisplayName(Keybind) .. " - " .. KeyText
						if Hotkeys.ShowMode then Text ..= " [" .. Keybind.Value.Mode .. "]" end
						Library:SetText(Row.Label, Text)
					end
					ThemeTween(Row.Label, "TextColor3", Active and "Text" or "Inactive Text", 0.15)
					ShowRow(Row, Show)
				end
			end
		end
	end

	local GetPing; do
		local WatermarkHolder = Create("Frame", { Name = "Watermark", AnchorPoint = Vector2.new(0.5, 1), Position = UDim2.new(0.5, 0, 1, -20), Size = UDim2.fromOffset(0, 27), AutomaticSize = Enum.AutomaticSize.X, BackgroundTransparency = 1, Parent = Library.HudGui })
		local WatermarkFrame = HudPanel({ Size = UDim2.fromOffset(0, 27), AutomaticSize = Enum.AutomaticSize.X, Active = true, Parent = WatermarkHolder })
		ListLayout(WatermarkFrame, 7, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Center, Enum.VerticalAlignment.Center)
		Padding(WatermarkFrame, 0, 0, 10, 10)
		HudDraggable(WatermarkFrame, WatermarkHolder, "Watermark")
		Library.WatermarkFrame = WatermarkFrame

		local GameName = "Roblox"
		task.spawn(function()
			pcall(function() GameName = game:GetService("MarketplaceService"):GetProductInfo(game.PlaceId).Name end)
		end)

		local FrameRate = 60
		do
			local Frames, Last = 0, os.clock()
			Connect(RunService.RenderStepped, function()
				Frames += 1
				local Now = os.clock()
				if Now - Last >= 0.5 then
					FrameRate = math.floor(Frames / (Now - Last) + 0.5)
					Frames, Last = 0, Now
				end
			end)
		end

		function GetPing()
			local Ok, Value = pcall(function() return Stats.Network.ServerStatsItem["Data Ping"]:GetValue() end)
			if Ok and Value then return math.floor(Value + 0.5) end
			Ok, Value = pcall(function() return LocalPlayer:GetNetworkPing() * 1000 end)
			return Ok and math.floor(Value + 0.5) or 0
		end

		local Watermark = {
			Title = "Swift",
			Items = { "GameName", "PlayerName" },
			Providers = {
				FPS = function() return FrameRate .. " fps" end,
				Ping = function() return GetPing() .. " ms" end,
				GameName = function() return GameName end,
				PlayerName = { Icon = "User", IconSize = 12, Text = function() return Library.AnonymousMode and Library.AnonymousName or LocalPlayer and (LocalPlayer.DisplayName .. " (@" .. LocalPlayer.Name .. ")") or "Player" end },
				Time = function() return os.date("%H:%M:%S") end,
				Date = function() return os.date("%d/%m/%Y") end,
			},
			Labels = {},
		}
		Library.Watermark = Watermark

		function Watermark:_Render()
			for _, Child in WatermarkFrame:GetChildren() do
				if Child:IsA("GuiObject") then Child:Destroy() end
			end
			self.Labels = {}
			local Segments = { { Logo = true, Text = self.Title } }
			for _, Item in self.Items do
				local Provider = type(Item) == "string" and self.Providers[Item] or Item
				if Provider and not (type(Item) == "table" and Item.Visible == false) then table.insert(Segments, Provider) end
			end
			local Order = 0
			for Index, Segment in Segments do
				if type(Segment) == "function" or type(Segment) == "string" then Segment = { Text = Segment } end
				if Index > 1 then
					Order += 1
					Create("Frame", { Size = UDim2.fromOffset(1, 14), Theme = { BackgroundColor3 = "Outline" }, LayoutOrder = Order, Parent = WatermarkFrame })
				end
				Order += 1
				local Group = Create("Frame", { Size = UDim2.fromOffset(0, 27), AutomaticSize = Enum.AutomaticSize.X, BackgroundTransparency = 1, LayoutOrder = Order, Parent = WatermarkFrame })
				ListLayout(Group, 8, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Left, Enum.VerticalAlignment.Center)
				if Segment.Logo then
					Library:Logo(Group, 15)
				elseif Segment.Icon then
					local Image = Create("ImageLabel", { Size = UDim2.fromOffset(Segment.IconSize or 14, Segment.IconSize or 14), Theme = { ImageColor3 = Segment.IconColor or "Text" }, Parent = Group })
					SetIcon(Image, Segment.Icon)
				end
				local Label = Create("TextLabel", { Weight = "SemiBold", Size = UDim2.fromOffset(0, 27), AutomaticSize = Enum.AutomaticSize.X, LayoutOrder = 2, Theme = { TextColor3 = "Text" }, Parent = Group })
				local Text = Segment.Text
				if type(Text) == "function" then
					table.insert(self.Labels, { Label = Label, Get = Text })
					local Ok, Value = pcall(Text)
					Library:SetText(Label, Ok and Value or "")
				else
					Library:SetText(Label, Text or "")
				end
			end
		end

		function Watermark:SetItems(Items)
			self.Items = Items or {}
			self:_Render()
		end

		function Watermark:SetTitle(Title)
			self.Title = Title
			self:_Render()
		end

		function Watermark:AddProvider(Name, Provider)
			self.Providers[Name] = Provider
		end

		task.spawn(function()
			while not Library.Unloaded do
				for _, Entry in Watermark.Labels do
					if Entry.Label.Parent then
						local Ok, Value = pcall(Entry.Get)
						if Ok then Library:SetText(Entry.Label, Value) end
					end
				end
				task.wait(0.5)
			end
		end)
		Watermark:_Render()

		function Library:SetWatermark(Segments)
			local Items = {}
			for Index, Segment in Segments do
				if Index == 1 and type(Segment) == "string" then
					Watermark.Title = Segment
				elseif Index == 1 and type(Segment) == "table" and Segment.Icon == "Logo" then
					Watermark.Title = Segment.Text or Watermark.Title
				else
					table.insert(Items, Segment)
				end
			end
			Watermark:SetItems(Items)
		end

		function Library:SetWatermarkVisible(Visible)
			WatermarkHolder.Visible = Visible
		end
	end

	do
		Library.BlurEnabled = false
		function Library:_UpdateBlur()
			local Open = false
			for _, Window_ in Library.Windows do
				if Window_.Open then Open = true end
			end
			local Wanted = Library.BlurEnabled and Open and 14 or 0
			if not Library.Blur then
				if Wanted == 0 then return end
				Library.Blur = Instance.new("BlurEffect")
				Library.Blur.Name = "SwiftBlur"
				Library.Blur.Size = 0
				Library.Blur.Parent = Workspace.CurrentCamera or Lighting
			end
			Tween(Library.Blur, { Size = Wanted }, 0.25)
		end

		function Library:SetBlur(Enabled)
			Library.BlurEnabled = Enabled
			Library:_UpdateBlur()
		end
	end

	do
		local CONFIG_FOLDER = Library.Folder .. "/configs"

		function Library:GetConfig()
			local Data = {}
			for Flag, Element in Library.Elements do
				if type(Flag) == "string" and Flag:sub(1, 2) ~= "__" and Element.Serialize and not Element.NoSave then
					local Ok, Value = pcall(Element.Serialize, Element)
					if Ok then Data[Flag] = Value end
				end
			end
			for _, Extra in Library.ConfigExtras or {} do
				local Ok, Key, Value = pcall(Extra.Save)
				if Ok and Key then Data[Key] = Value end
			end
			return HttpService:JSONEncode(Data)
		end

		function Library:LoadConfigString(Json)
			local Ok, Data = pcall(HttpService.JSONDecode, HttpService, Json)
			if not Ok or type(Data) ~= "table" then return false end
			if Data.__ThemeName and Themes[Data.__ThemeName] then Library:SetTheme(Data.__ThemeName) end
			for Flag, Value in Data do
				local Element = Library.Elements[Flag]
				if Element and Element.Deserialize then
					pcall(Element.Deserialize, Element, Value)
				end
			end
			for _, Extra in Library.ConfigExtras or {} do
				pcall(Extra.Load, Data)
			end
			return true
		end

		function Library:AddConfigExtra(Save, Load)
			Library.ConfigExtras = Library.ConfigExtras or {}
			table.insert(Library.ConfigExtras, { Save = Save, Load = Load })
		end
		Library:AddConfigExtra(function() return "__Layout", Library:GetLayout() end, function(Data)
			if Data.__Layout and Library:LoadLayout(Data.__Layout) then Library:SaveLayout() end
		end)

		function Library:ListConfigs()
			local Out = {}
			for _, File in FS.List(CONFIG_FOLDER) do
				local Name = File:match("^(.*)%.json$")
				if Name then table.insert(Out, Name) end
			end
			return Out
		end

		function Library:SaveConfig(Name)
			if not Name or Name == "" then return false end
			FS.Write(CONFIG_FOLDER .. "/" .. Name .. ".json", Library:GetConfig())
			return true
		end

		function Library:LoadConfig(Name)
			local Content = Name and FS.Read(CONFIG_FOLDER .. "/" .. Name .. ".json")
			if not Content then return false end
			return Library:LoadConfigString(Content)
		end

		function Library:DeleteConfig(Name)
			if not Name then return false end
			FS.Delete(CONFIG_FOLDER .. "/" .. Name .. ".json")
			return true
		end

		function Library:SetAutoload(Name)
			if Name then FS.Write(Library.Folder .. "/autoload.txt", Name) else FS.Delete(Library.Folder .. "/autoload.txt") end
		end

		function Library:GetAutoload()
			return FS.Read(Library.Folder .. "/autoload.txt")
		end
	end

	do
		function Window:AddSettingsTab(Config)
			Config = Config or {}
			local Settings = self:AddTab({ Title = Config.Title or "Settings", Icon = Config.Icon or "Gear", Category = Config.Category })
			local Window_ = self

			local Profiles = Settings:AddSection({ Title = "Profiles", Icon = "Cube", Side = 1 })
			local NameBox
			local ConfigList = Profiles:AddList({
				Text = "Configs",
				Height = 178,
				Flag = "__ConfigList",
				Options = Library:ListConfigs(),
				Callback = function(Name) if NameBox and Name then NameBox:Set(Name, true) end end,
			})
			NameBox = Profiles:AddInput({ Placeholder = "Config name", Flag = "__ConfigName" })
			local function Refresh() ConfigList:SetOptions(Library:ListConfigs()) end
			local function Selected()
				local Name = NameBox.Value ~= "" and NameBox.Value or ConfigList.Value
				return Name
			end
			Profiles:AddButton({ Text = "Create", Callback = function()
				local Name = NameBox.Value
				if Name == "" then return Library:Notify({ Text = "Enter a config name first.", Type = "Error" }) end
				Library:SaveConfig(Name)
				Refresh()
				ConfigList:Set(Name, true)
				Library:Notify('Created config "' .. Name .. '".')
			end })
			Profiles:AddButton({ Text = "Load", Callback = function()
				local Name = Selected()
				if Name and Library:LoadConfig(Name) then
					Library:Notify('Loaded config "' .. Name .. '".')
				else
					Library:Notify({ Text = "Select a config to load.", Type = "Error" })
				end
			end })
			Profiles:AddButton({ Text = "Delete", Callback = function()
				local Name = Selected()
				if not Name or Name == "" then return end
				Library:DeleteConfig(Name)
				Refresh()
				NameBox:Set("", true)
				Library:Notify('Deleted config "' .. Name .. '".')
			end })
			Profiles:AddButton({ Text = "Overwrite", Callback = function()
				local Name = Selected()
				if not Name or Name == "" then return end
				Library:SaveConfig(Name)
				Refresh()
				Library:Notify('Overwrote config "' .. Name .. '".')
			end })

			local Autoload = Settings:AddSection({ Title = "Autoload", Icon = "Cube", Side = 1 })
			Autoload:AddButton({ Text = "Set selected as autoload", Callback = function()
				local Name = Selected()
				if not Name or Name == "" then return Library:Notify({ Text = "Select a config first.", Type = "Error" }) end
				Library:SetAutoload(Name)
				Library:Notify('Set "' .. Name .. '" as autoload.')
			end })
			Autoload:AddButton({ Text = "Clear autoload", Callback = function()
				Library:SetAutoload(nil)
				Library:Notify("Cleared autoload.")
			end })

			local Theming = Settings:AddSection({ Title = "Theming", Icon = "Cube", Side = 2 })
			Theming:AddDropdown({ Text = "Theme", Options = ThemeOrder, Default = Library.ThemeName, Flag = "__ThemeName", Callback = function(Name)
				if Name == Library.ThemeName and not Window_._ThemeReady then Window_._ThemeReady = true return end
				Window_._ThemeReady = true
				Library:SetTheme(Name)
				Library:Notify('Applied "' .. Name .. '" theme.')
			end })
			Library.Elements.__ThemeName.NoSave = false
			Theming:AddDropdown({ Text = "Casing", Options = CasingOrder, Default = Library.Casing, Flag = "Casing", Callback = function(Mode)
				if Mode == Library.Casing then return end
				Library:SetCasing(Mode)
				Library:Notify('Set casing to "' .. Mode .. '".')
			end })
			Theming:AddDropdown({ Text = "Font", Options = Fonts.Order, Default = Library.Font, Flag = "Font", Callback = function(Name)
				if Name == Library.Font then return end
				Library:SetFont(Name)
				Library:Notify('Set font to "' .. Name .. '".')
			end })
			Theming:AddSeparator()
			for _, Key in ThemeKeys do
				Theming:AddColorPicker({ Text = Key, Default = Theme[Key], Flag = "Theme_" .. Key, Callback = function(Color)
					if Library.ApplyingTheme then return end
					Library:SetThemeColor(Key, Color)
				end })
			end

			local Menu = Settings:AddSection({ Title = "Menu", Icon = "Cube", Side = 2 })
			Menu:AddKeybind({ Text = "Menu Keybind", Default = Config.MenuKeybind or Library.MenuKeybind, Flag = "MenuKeybind", NoList = true, OnPress = function() Window_:Toggle() end })
			local Anonymous = Menu:AddToggle({ Text = "Anonymous Mode", Flag = "AnonymousMode", Default = false, Callback = function(Value) Library:SetAnonymous(Value) end })
			local AnonymousSettings = Anonymous:Settings({ Title = "Anonymous Mode" })
			AnonymousSettings:AddInput({ Text = "Custom Name", Flag = "AnonymousName", Default = "...", Finished = true, Callback = function(Value) Library:SetAnonymousName(Value) end })
			AnonymousSettings:AddToggle({ Text = "Hide Name In Game", Flag = "AnonymousGame", Default = false, Callback = function(Value) Library:SetAnonymousGame(Value) end })
			AnonymousSettings:AddInput({ Text = "Avatar User ID", Flag = "AnonymousAvatar", Default = "", Finished = true, Callback = function(Value) Library:SetAnonymousAvatar(Value) end })
			local WatermarkToggle = Menu:AddToggle({ Text = "Watermark", Default = Config.Watermark ~= false, Flag = "Watermark", Callback = function(Value) Library:SetWatermarkVisible(Value) end })
			local WatermarkSettings = WatermarkToggle:Settings({ Title = "Watermark Settings" })
			WatermarkSettings:AddInput({ Text = "Name", Default = Library.Watermark.Title, Placeholder = "Swift", Flag = "WatermarkName", Callback = function(Text)
				Library.Watermark:SetTitle(Text ~= "" and Text or "Swift")
			end })
			WatermarkSettings:AddMultiDropdown({
				Text = "Items",
				Options = { "FPS", "Ping", { Name = "Game name", Value = "GameName" }, { Name = "Player name", Value = "PlayerName" }, "Time", "Date" },
				Default = Library.Watermark.Items,
				Flag = "WatermarkItems",
				Callback = function(Values)
					local Selected, Present, Items = {}, {}, {}
					for _, Value in Values do Selected[Value] = true end
					for _, Item in Library.Watermark.Items do
						if type(Item) == "string" and Library.Watermark.Providers[Item] then
							if Selected[Item] then table.insert(Items, Item) end
							Present[Item] = true
						else
							table.insert(Items, Item)
						end
					end
					for _, Value in Values do
						if not Present[Value] then table.insert(Items, Value) end
					end
					Library.Watermark:SetItems(Items)
				end,
			})
			local HotkeysToggle = Menu:AddToggle({ Text = "Keybind List", Default = Config.KeybindList ~= false, Flag = "KeybindList", Callback = function(Value) Library:SetHotkeysVisible(Value) end })
			local HotkeySettings = HotkeysToggle:Settings({ Title = "Keybind List Settings" })
			HotkeySettings:AddDropdown({ Text = "Show", Options = { { Name = "Active bindings", Value = "Active" }, { Name = "All bindings", Value = "All" } }, Default = "Active", Flag = "KeybindListMode", Callback = function(Mode)
				Library.Hotkeys:SetMode(Mode)
			end })
			HotkeySettings:AddToggle({ Text = "Show Mode", Flag = "KeybindListShowMode", Callback = function(Value) Library.Hotkeys:SetShowMode(Value) end })
			HotkeySettings:AddInput({ Text = "Title", Default = "Hotkeys", Placeholder = "Hotkeys", Flag = "KeybindListTitle", Callback = function(Text)
				Library.Hotkeys:SetTitle(Text ~= "" and Text or "Hotkeys")
			end })
			Menu:AddToggle({ Text = "Menu Blur", Default = Config.Blur == true, Flag = "MenuBlur", Callback = function(Value) Library:SetBlur(Value) end })
			Menu:AddSeparator()
			Menu:AddButton({ Text = "Unload", Confirm = true, Callback = function() Library:Unload() end })

			Library.Elements.__ThemeName.Serialize = nil
			Library:AddConfigExtra(function() return "__ThemeName", Library.ThemeName end, function() end)

			task.defer(function()
				local Name = Library:GetAutoload()
				if Name and Library:LoadConfig(Name) then
					Library:Notify('Autoloaded config "' .. Name .. '".')
				end
			end)
			self.SettingsTab = Settings
			return Settings
		end
		Window.InitSettings = Window.AddSettingsTab
		Window.InitConfigs = Window.AddSettingsTab
	end

	do
		function Library:Unload()
			if Library.Unloaded then return end
			Library:SaveLayout()
			Library.Unloaded = true
			Privacy:Stop()
			for _, Callback in Library.UnloadCallbacks or {} do SafeCall(Callback) end
			for _, Connection in Library.Connections do
				pcall(function() Connection:Disconnect() end)
			end
			table.clear(Library.AnimatedPickers)
			if Library.Blur then Library.Blur:Destroy() end
			for _, Gui in { Library.HudGui, Library.MenuGui, Library.OverlayGui } do
				pcall(function() Gui:Destroy() end)
			end
			if Env.SwiftLibrary == Library then Env.SwiftLibrary = nil end
		end

		function Library:OnUnload(Callback)
			Library.UnloadCallbacks = Library.UnloadCallbacks or {}
			table.insert(Library.UnloadCallbacks, Callback)
		end
	end

	function Tab:GetCustomPage()
		if self.Custom then return self.Custom end
		for _, Column in self.Columns do Column.Visible = false end
		self.Custom = Create("Frame", { Name = "Custom", Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, ClipsDescendants = true, Parent = self.Page })
		return self.Custom
	end

	local function Panel(Parent, Properties)
		Properties.Theme = Properties.Theme or { BackgroundColor3 = "Tab" }
		Properties.Parent = Parent
		local Frame = Create("Frame", Properties)
		Corner(Frame, 6)
		Stroke(Frame, "Outline")
		return Frame
	end

	local function SmallButton(Parent, Text, Properties)
		Properties = Properties or {}
		Properties.Theme = Properties.Theme or { BackgroundColor3 = "Element" }
		Properties.Parent = Parent
		local Button = Create("TextButton", Properties)
		Corner(Button, 5)
		Shade(Button)
		Stroke(Button, "Outline")
		local Label = Create("TextLabel", { Size = UDim2.fromScale(1, 1), Text = Text, TextSize = 12, Theme = { TextColor3 = "Text" }, Parent = Button })
		Connect(Button.MouseEnter, function() ThemeTween(Button, "BackgroundColor3", "Hovered Element", 0.12) end)
		Connect(Button.MouseLeave, function() ThemeTween(Button, "BackgroundColor3", "Element", 0.12) end)
		return Button, Label
	end

	local PingColors = { Good = Rgb(110, 210, 130), Okay = Rgb(230, 190, 90), Bad = Rgb(230, 95, 95) }
	local function PingColor(Ping)
		return Ping < 90 and PingColors.Good or Ping < 170 and PingColors.Okay or PingColors.Bad
	end

	local function SegmentSwitch(Parent, Options, Callback)
		local Switch = Create("Frame", { Theme = { BackgroundColor3 = "Element" }, Parent = Parent })
		Corner(Switch, 5)
		Shade(Switch)
		Stroke(Switch, "Outline")
		local Pill = Create("Frame", { Size = UDim2.fromScale(1 / #Options, 1), Theme = { BackgroundColor3 = "ToggleFill" }, Parent = Switch })
		Corner(Pill, 5)
		Shade(Pill)
		local Labels = {}
		local Self = { Frame = Switch }
		function Self.Set(_, Value, Instant)
			for Index, Option in Options do
				if Option.Value == Value then
					Tween(Pill, { Position = UDim2.fromScale((Index - 1) / #Options, 0) }, Instant and 0 or 0.22)
					if Option.Color then
						Library:Unthemed(Pill, "BackgroundColor3")
						Tween(Pill, { BackgroundColor3 = Option.Color:Lerp(Theme.Element, 0.5) }, Instant and 0 or 0.22)
					else
						ThemeTween(Pill, "BackgroundColor3", "ToggleFill", Instant and 0 or 0.22)
					end
				end
				ThemeTween(Labels[Index], "TextColor3", Option.Value == Value and "Text" or "Inactive Text", Instant and 0 or 0.15)
			end
		end
		for Index, Option in Options do
			local Button = Create("TextButton", { Position = UDim2.fromScale((Index - 1) / #Options, 0), Size = UDim2.fromScale(1 / #Options, 1), BackgroundTransparency = 1, ZIndex = 2, Parent = Switch })
			Labels[Index] = Create("TextLabel", { Size = UDim2.fromScale(1, 1), Text = Option.Name, TextSize = 11, ZIndex = 2, Theme = { TextColor3 = "Inactive Text" }, Parent = Button })
			Connect(Button.MouseButton1Click, function() Callback(Option.Value) end)
		end
		return Self
	end

	local CopyText, Avatar; do
		local Playerlist = {}
		Playerlist.__index = Playerlist
		Library.Classes.Playerlist = Playerlist

		Library.PlayerStatuses = { "Neutral", "Friendly", "Enemy", "Priority" }
		Library.StatusColors = {
			Friendly = Rgb(96, 220, 120),
			Enemy = Rgb(240, 84, 84),
			Priority = Rgb(242, 188, 72),
		}
		local StatusOrder = { Client = -1, Priority = 1, Enemy = 2, Friendly = 3, Neutral = 4 }

		local function AccountAge(Player)
			local Days = Player.AccountAge
			if Days >= 365 then return string.format("%.1f years", Days / 365) end
			return Days .. " days"
		end

		function CopyText(Text, What)
			local Copy = Env.setclipboard or Env.toclipboard
			if typeof(Copy) == "function" then
				Copy(Text)
				Library:Notify("Copied " .. What .. ".")
			else
				Library:Notify({ Text = "Clipboard is not available here.", Type = "Warning" })
			end
		end

		function Avatar(Parent, Size, Properties)
			Properties = Properties or {}
			Properties.Size = UDim2.fromOffset(Size, Size)
			Properties.BackgroundTransparency = 0
			Properties.Theme = { BackgroundColor3 = "Element" }
			Properties.Parent = Parent
			local Image = Create("ImageLabel", Properties)
			Corner(Image, Size)
			local Ring = Create("UIStroke", { Thickness = Size > 30 and 2 or 1.5, Theme = { Color = "Outline" }, Parent = Image })
			return Image, Ring
		end

		local function PaintRing(Ring, Color, Time)
			if Color then
				Library:Unthemed(Ring, "Color")
				Tween(Ring, { Color = Color }, Time or 0.15)
			else
				ThemeTween(Ring, "Color", "Outline", Time or 0.15)
			end
		end

		function Window:AddPlayerlist(Config)
			Config = Config or {}
			local TabObject = Config.Tab or self:AddTab({ Title = Config.Title or "Playerlist", Icon = Config.Icon or "Users", Category = Config.Category })
			local Page = TabObject:GetCustomPage()
			local Self = setmetatable({ Tab = TabObject, Window = self, Rows = {}, Statuses = {}, Selected = nil, Callbacks = {}, Filter = "All", Query = "" }, Playerlist)
			Library.Playerlist = Self

			local Header = Create("Frame", { Position = UDim2.fromOffset(10, 10), Size = UDim2.new(1, -20, 0, 22), BackgroundTransparency = 1, Parent = Page })
			local TitleRow = Create("Frame", { Size = UDim2.new(1, -250, 1, 0), BackgroundTransparency = 1, Parent = Header })
			ListLayout(TitleRow, 8, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Left, Enum.VerticalAlignment.Center)
			local HeaderIcon = Create("ImageLabel", { Size = UDim2.fromOffset(15, 15), LayoutOrder = 1, Theme = { ImageColor3 = "Inactive Text" }, Parent = TitleRow })
			SetIcon(HeaderIcon, Config.Icon or "Users")
			Create("TextLabel", { Size = UDim2.fromOffset(0, 22), AutomaticSize = Enum.AutomaticSize.X, Text = Config.Title or "Players", LayoutOrder = 2, Theme = { TextColor3 = "Inactive Text" }, Parent = TitleRow })
			local Count = Create("TextLabel", { Size = UDim2.fromOffset(0, 22), AutomaticSize = Enum.AutomaticSize.X, TextSize = 11, LayoutOrder = 3, Theme = { TextColor3 = "Inactive Text" }, Parent = TitleRow })
			local Filter = SegmentSwitch(Header, {
				{ Name = "All", Value = "All" },
				{ Name = "Friendly", Value = "Friendly", Color = Library.StatusColors.Friendly },
				{ Name = "Enemy", Value = "Enemy", Color = Library.StatusColors.Enemy },
				{ Name = "Priority", Value = "Priority", Color = Library.StatusColors.Priority },
			}, function(Value) Self:SetFilter(Value) end)
			Filter.Frame.AnchorPoint = Vector2.new(1, 0.5)
			Filter.Frame.Position = UDim2.new(1, 0, 0.5, 0)
			Filter.Frame.Size = UDim2.fromOffset(240, 22)

			local ListPanel = Panel(Page, { Position = UDim2.fromOffset(10, 42), Size = UDim2.new(1, -20, 1, -232) })
			local SearchIcon = Create("ImageLabel", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 12, 0, 16), Size = UDim2.fromOffset(13, 13), Theme = { ImageColor3 = "Inactive Text" }, Parent = ListPanel })
			SetIcon(SearchIcon, "Search")
			local Search = Create("TextBox", { Position = UDim2.fromOffset(32, 0), Size = UDim2.new(1, -44, 0, 32), PlaceholderText = "Search players...", Text = "", ClearTextOnFocus = false, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text", PlaceholderColor3 = "Inactive Text" }, Parent = ListPanel })
			Create("Frame", { Position = UDim2.fromOffset(0, 32), Size = UDim2.new(1, 0, 0, 1), Theme = { BackgroundColor3 = "Outline" }, Parent = ListPanel })
			local Scroll = Create("ScrollingFrame", { Position = UDim2.fromOffset(0, 33), Size = UDim2.new(1, 0, 1, -34), ScrollBarThickness = 2, Theme = { ScrollBarImageColor3 = "Accent" }, Parent = ListPanel })
			Padding(Scroll, 4, 4, 4, 6)
			ListLayout(Scroll, 2)
			local Empty = Create("TextLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new(0.5, 0, 0.5, 16), Size = UDim2.new(1, -40, 0, 16), Text = "No players match.", TextSize = 12, Visible = false, Theme = { TextColor3 = "Inactive Text" }, Parent = ListPanel })
			Self.Scroll, Self.Count, Self.Empty, Self.FilterSwitch = Scroll, Count, Empty, Filter

			local Card = Panel(Page, { AnchorPoint = Vector2.new(0, 1), Position = UDim2.new(0, 10, 1, -10), Size = UDim2.new(1, -20, 0, 0), AutomaticSize = Enum.AutomaticSize.Y })
			local CardItems = Create("Frame", { Size = UDim2.new(1, 0, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, Parent = Card })
			Padding(CardItems, 12, 12, 12, 12)
			ListLayout(CardItems, 10)

			local Top = Create("Frame", { Size = UDim2.new(1, 0, 0, 44), BackgroundTransparency = 1, LayoutOrder = 1, Parent = CardItems })
			local BigAvatar, BigRing = Avatar(Top, 44)
			local DisplayName = Create("TextLabel", { Position = UDim2.fromOffset(56, 4), Size = UDim2.new(1, -150, 0, 18), NoCase = true, TextSize = 15, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Text" }, Parent = Top })
			local Username = Create("TextLabel", { Position = UDim2.fromOffset(56, 24), Size = UDim2.new(1, -150, 0, 14), NoCase = true, TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Inactive Text" }, Parent = Top })
			local StatusTag = Create("TextLabel", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, 0, 0.5, 0), Size = UDim2.fromOffset(0, 20), AutomaticSize = Enum.AutomaticSize.X, TextSize = 11, BackgroundTransparency = 0.85, Parent = Top })
			Corner(StatusTag, 10)
			Padding(StatusTag, 0, 0, 9, 9)

			local InfoStrip = Create("Frame", { Size = UDim2.new(1, 0, 0, 30), BackgroundTransparency = 1, LayoutOrder = 2, Parent = CardItems })
			local Info = {}
			local InfoKeys = { "User ID", "Team", "Account Age", "Distance", "Health" }
			for Index, Key in InfoKeys do
				local Column = Create("Frame", { Position = UDim2.fromScale((Index - 1) / #InfoKeys, 0), Size = UDim2.fromScale(1 / #InfoKeys, 1), BackgroundTransparency = 1, Parent = InfoStrip })
				Create("TextLabel", { Size = UDim2.new(1, -6, 0, 13), Text = Key, TextSize = 10, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Inactive Text" }, Parent = Column })
				Info[Key] = Create("TextLabel", { Position = UDim2.fromOffset(0, 15), Size = UDim2.new(1, -6, 0, 15), Text = "-", NoCase = true, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Text" }, Parent = Column })
			end

			local StatusRow = Create("Frame", { Size = UDim2.new(1, 0, 0, 24), BackgroundTransparency = 1, LayoutOrder = 3, Parent = CardItems })
			local StatusOptions = {}
			for _, Status in Library.PlayerStatuses do
				table.insert(StatusOptions, { Name = Status, Value = Status, Color = Library.StatusColors[Status] })
			end
			local StatusSwitch = SegmentSwitch(StatusRow, StatusOptions, function(Status)
				if Self.Selected then Self:SetStatus(Self.Selected, Status) end
			end)
			StatusSwitch.Frame.Size = UDim2.fromScale(1, 1)
			local YouLabel = Create("TextLabel", { Size = UDim2.fromScale(1, 1), Text = "This is you.", TextSize = 12, Visible = false, Theme = { TextColor3 = "Inactive Text" }, Parent = StatusRow })

			local ActionRow = Create("Frame", { Size = UDim2.new(1, 0, 0, 24), BackgroundTransparency = 1, LayoutOrder = 4, Parent = CardItems })
			local SpectateButton, SpectateLabel = SmallButton(ActionRow, "Spectate", { Size = UDim2.new(1 / 3, -4, 1, 0) })
			local CopyNameButton = SmallButton(ActionRow, "Copy Name", { Position = UDim2.new(1 / 3, 2, 0, 0), Size = UDim2.new(1 / 3, -4, 1, 0) })
			local CopyIdButton = SmallButton(ActionRow, "Copy ID", { Position = UDim2.new(2 / 3, 4, 0, 0), Size = UDim2.new(1 / 3, -4, 1, 0) })
			Connect(SpectateButton.MouseButton1Click, function() Self:Spectate(not Self.Spectating) end)
			Connect(CopyNameButton.MouseButton1Click, function()
				if Self.Selected then CopyText(Self.Selected.Name, '"' .. Self.Selected.Name .. '"') end
			end)
			Connect(CopyIdButton.MouseButton1Click, function()
				if Self.Selected then CopyText(tostring(Self.Selected.UserId), "user id " .. Self.Selected.UserId) end
			end)
			local Custom = Create("Frame", { Size = UDim2.new(1, 0, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, LayoutOrder = 5, Parent = CardItems })
			ListLayout(Custom, 6)
			local Section = NewContainer(Custom, { Path = "Playerlist" })
			Section.NoIndex = true
			Self.Section = Section
			Connect(Card:GetPropertyChangedSignal("AbsoluteSize"), function()
				ListPanel.Size = UDim2.new(1, -20, 1, -(42 + Card.AbsoluteSize.Y + 20))
			end)

			Self.Parts = {
				Avatar = BigAvatar, Ring = BigRing, DisplayName = DisplayName, Username = Username, StatusTag = StatusTag, Info = Info,
				StatusSwitch = StatusSwitch, YouLabel = YouLabel, SpectateLabel = SpectateLabel,
			}

			Connect(Search:GetPropertyChangedSignal("Text"), function()
				Self.Query = Search.Text:lower()
				Self:_ApplyFilter()
			end)
			for _, Player in Players:GetPlayers() do Self:_Add(Player) end
			Connect(Players.PlayerAdded, function(Player) Self:_Add(Player) end)
			Connect(Players.PlayerRemoving, function(Player) Self:_Remove(Player) end)
			Self:SetFilter("All", true)
			Self:Select(LocalPlayer)

			task.spawn(function()
				while not Library.Unloaded do
					local Player = Self.Selected
					if Player and TabObject.Active then
						local Character, Mine = Player.Character, LocalPlayer.Character
						local Root = Character and Character:FindFirstChild("HumanoidRootPart")
						local MyRoot = Mine and Mine:FindFirstChild("HumanoidRootPart")
						local Humanoid = Character and Character:FindFirstChildOfClass("Humanoid")
						Info.Distance.Text = (Root and MyRoot) and (math.floor((Root.Position - MyRoot.Position).Magnitude) .. " st") or "-"
						Info.Health.Text = Humanoid and (math.floor(Humanoid.Health) .. " / " .. math.floor(Humanoid.MaxHealth)) or "-"
					end
					task.wait(0.25)
				end
			end)

			Library:AddConfigExtra(function()
				local Out = {}
				for UserId, Status in Self.Statuses do
					if Status ~= "Client" then Out[tostring(UserId)] = Status end
				end
				return "__PlayerStatuses", Out
			end, function(Data)
				if type(Data.__PlayerStatuses) ~= "table" then return end
				for UserId, Status in Data.__PlayerStatuses do
					local Player = Players:GetPlayerByUserId(tonumber(UserId))
					if Player then Self:SetStatus(Player, Status, true) else Self.Statuses[tonumber(UserId)] = Status end
				end
			end)
			return Self
		end

		function Playerlist:_Add(Player)
			if self.Rows[Player] then return end
			local IsClient = Player == LocalPlayer
			local Row = Create("TextButton", { Name = Player.Name, Size = UDim2.new(1, 0, 0, 36), BackgroundTransparency = 1, Theme = { BackgroundColor3 = "Element" }, Parent = self.Scroll })
			Corner(Row, 5)
			local Bar = Create("Frame", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 0, 0.5, 0), Size = UDim2.fromOffset(3, 16), Theme = { BackgroundColor3 = "Accent" }, BackgroundTransparency = 1, Parent = Row })
			Corner(Bar, 2)
			local Image, Ring = Avatar(Row, 24, { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 10, 0.5, 0) })
			local Name = Create("TextLabel", { Position = UDim2.fromOffset(44, 0), Size = UDim2.new(0, 0, 1, 0), AutomaticSize = Enum.AutomaticSize.X, Text = Player.DisplayName, NoCase = true, TextSize = 13, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Row })
			Create("UISizeConstraint", { MaxSize = Vector2.new(170, math.huge), Parent = Name })
			Name.TextTruncate = Enum.TextTruncate.AtEnd
			local Sub = Create("TextLabel", { Position = UDim2.fromOffset(44, 0), Size = UDim2.new(1, -150, 1, 0), Text = "@" .. Player.Name, NoCase = true, TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Inactive Text" }, Parent = Row })
			Library:SetPlayerText(Name, Player, Player.DisplayName)
			Library:SetPlayerText(Sub, Player, "@" .. Player.Name)
			Library:SetPlayerAvatar(Image, Player, "")
			local function PlaceSub() Sub.Position = UDim2.fromOffset(44 + Name.AbsoluteSize.X + 6, 1) end
			Connect(Name:GetPropertyChangedSignal("AbsoluteSize"), PlaceSub)
			PlaceSub()
			local Tag = Create("Frame", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -10, 0.5, 0), Size = UDim2.fromOffset(0, 18), AutomaticSize = Enum.AutomaticSize.X, BackgroundTransparency = 1, Parent = Row })
			ListLayout(Tag, 6, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Right, Enum.VerticalAlignment.Center)
			local Dot = Create("Frame", { Size = UDim2.fromOffset(6, 6), LayoutOrder = 1, Parent = Tag })
			Corner(Dot, 3)
			local TagLabel = Create("TextLabel", { Size = UDim2.fromOffset(0, 18), AutomaticSize = Enum.AutomaticSize.X, TextSize = 11, LayoutOrder = 2, Parent = Tag })
			local Entry = { Player = Player, Row = Row, Bar = Bar, Ring = Ring, Name = Name, Sub = Sub, Tag = Tag, Dot = Dot, TagLabel = TagLabel }
			self.Rows[Player] = Entry
			local ThumbnailRequest = {}
			Entry.ThumbnailRequest = ThumbnailRequest
			if IsClient then self.Statuses[Player.UserId] = "Client" end
			self:_DrawStatus(Player)
			task.spawn(function()
				if Library.Unloaded or self.Rows[Player] ~= Entry or Entry.ThumbnailRequest ~= ThumbnailRequest then return end
				local Ok, Thumbnail = pcall(Players.GetUserThumbnailAsync, Players, Player.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size48x48)
				if Ok and not Library.Unloaded and Row.Parent and self.Rows[Player] == Entry and Entry.ThumbnailRequest == ThumbnailRequest then Library:SetPlayerAvatar(Image, Player, Thumbnail) end
			end)
			Connect(Player:GetPropertyChangedSignal("Team"), function()
				if self.Selected == Player then self.Parts.Info.Team.Text = Player.Team and Player.Team.Name or "None" end
			end)
			Connect(Row.MouseEnter, function() if self.Selected ~= Player then Tween(Row, { BackgroundTransparency = 0.6 }, 0.12) end end)
			Connect(Row.MouseLeave, function() if self.Selected ~= Player then Tween(Row, { BackgroundTransparency = 1 }, 0.12) end end)
			Connect(Row.MouseButton1Click, function() self:Select(Player) end)
			self:_ApplyFilter()
		end

		function Playerlist:_Remove(Player)
			local Entry = self.Rows[Player]
			if not Entry then return end
			Entry.Row:Destroy()
			self.Rows[Player] = nil
			if self.Selected == Player then self:Select(LocalPlayer) end
			self:_ApplyFilter()
		end

		function Playerlist:_DrawStatus(Player)
			local Entry = self.Rows[Player]
			if not Entry then return end
			local Status = self:GetStatus(Player)
			local Color = Status == "Client" and Theme.Accent or Library.StatusColors[Status]
			Entry.Tag.Visible = Status ~= "Neutral"
			Library:SetText(Entry.TagLabel, Status == "Client" and "You" or Status)
			Entry.TagLabel.TextColor3 = Color or Theme["Inactive Text"]
			Entry.Dot.BackgroundColor3 = Color or Theme["Inactive Text"]
			PaintRing(Entry.Ring, Color, 0)
			Entry.Row.LayoutOrder = (StatusOrder[Status] or 4) * 1000 + (string.byte(Player.Name:lower()) or 0)
		end

		function Playerlist:SetFilter(Filter, Instant)
			self.Filter = Filter
			self.FilterSwitch:Set(Filter, Instant)
			self:_ApplyFilter()
		end

		function Playerlist:_ApplyFilter()
			local Shown = 0
			for Player, Entry in self.Rows do
				local Status = self:GetStatus(Player)
				local MatchesFilter = self.Filter == "All" or Status == self.Filter
				local MatchesQuery = self.Query == "" or (Player.Name .. " " .. Player.DisplayName):lower():find(self.Query, 1, true) ~= nil
				Entry.Row.Visible = MatchesFilter and MatchesQuery
				if Entry.Row.Visible then Shown += 1 end
			end
			self.Count.Text = #Players:GetPlayers() .. " / " .. Players.MaxPlayers
			self.Empty.Visible = Shown == 0
		end

		function Playerlist:Select(Player)
			local Old = self.Selected and self.Rows[self.Selected]
			if Old then
				Tween(Old.Row, { BackgroundTransparency = 1 }, 0.15)
				Tween(Old.Bar, { BackgroundTransparency = 1 }, 0.15)
			end
			if self.Spectating then self:Spectate(false) end
			self.Selected = Player
			local Entry = Player and self.Rows[Player]
			if Entry then
				Tween(Entry.Row, { BackgroundTransparency = 0.35 }, 0.15)
				Tween(Entry.Bar, { BackgroundTransparency = 0 }, 0.15)
			end
			if not Player then return end
			local Parts = self.Parts
			Library:SetPlayerText(Parts.DisplayName, Player, Player.DisplayName)
			Library:SetPlayerText(Parts.Username, Player, "@" .. Player.Name)
			Parts.Info["User ID"].Text = tostring(Player.UserId)
			Parts.Info.Team.Text = Player.Team and Player.Team.Name or "None"
			Parts.Info["Account Age"].Text = AccountAge(Player)
			self:_DrawProfileStatus(true)
			Library:SetPlayerAvatar(Parts.Avatar, Player, "")
			self.AvatarRequest = (self.AvatarRequest or 0) + 1
			local AvatarRequest = self.AvatarRequest
			task.spawn(function()
				if Library.Unloaded or self.AvatarRequest ~= AvatarRequest then return end
				local Ok, Image = pcall(Players.GetUserThumbnailAsync, Players, Player.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size150x150)
				if Ok and not Library.Unloaded and Parts.Avatar.Parent and self.Selected == Player and self.AvatarRequest == AvatarRequest then Library:SetPlayerAvatar(Parts.Avatar, Player, Image) end
			end)
			for _, Callback in self.Callbacks.Selected or {} do SafeCall(Callback, Player) end
		end

		function Playerlist:_DrawProfileStatus(Instant)
			local Player = self.Selected
			if not Player then return end
			local Parts = self.Parts
			local Status = self:GetStatus(Player)
			local IsClient = Player == LocalPlayer
			local Color = IsClient and Theme.Accent or Library.StatusColors[Status]
			Parts.StatusSwitch.Frame.Visible = not IsClient
			Parts.YouLabel.Visible = IsClient
			if not IsClient then Parts.StatusSwitch:Set(Status, Instant) end
			PaintRing(Parts.Ring, Color)
			Parts.StatusTag.Visible = Status ~= "Neutral"
			Library:SetText(Parts.StatusTag, IsClient and "You" or Status)
			Parts.StatusTag.TextColor3 = Color or Theme["Inactive Text"]
			Parts.StatusTag.BackgroundColor3 = Color or Theme.Element
		end

		function Playerlist:Spectate(Enabled)
			local Camera = Workspace.CurrentCamera
			local Target = self.Selected and self.Selected.Character and self.Selected.Character:FindFirstChildOfClass("Humanoid")
			if Enabled and Target and self.Selected ~= LocalPlayer then
				Camera.CameraSubject = Target
				self.Spectating = true
			else
				if LocalPlayer.Character then Camera.CameraSubject = LocalPlayer.Character:FindFirstChildOfClass("Humanoid") end
				self.Spectating = false
			end
			Library:SetText(self.Parts.SpectateLabel, self.Spectating and "Stop Spectating" or "Spectate")
			ThemeTween(self.Parts.SpectateLabel, "TextColor3", self.Spectating and "Accent" or "Text", 0.15)
		end

		function Playerlist:GetStatus(Player)
			return self.Statuses[Player.UserId] or "Neutral"
		end

		function Playerlist:SetStatus(Player, Status, Silent)
			if Player == LocalPlayer then return end
			self.Statuses[Player.UserId] = Status
			self:_DrawStatus(Player)
			if self.Selected == Player then self:_DrawProfileStatus() end
			self:_ApplyFilter()
			if not Silent then
				for _, Callback in self.Callbacks.Status or {} do SafeCall(Callback, Player, Status) end
			end
		end

		function Playerlist:GetPlayersWithStatus(Status)
			local Out = {}
			for _, Player in Players:GetPlayers() do
				if self:GetStatus(Player) == Status then table.insert(Out, Player) end
			end
			return Out
		end

		function Playerlist:OnStatusChanged(Callback)
			self.Callbacks.Status = self.Callbacks.Status or {}
			table.insert(self.Callbacks.Status, Callback)
		end

		function Playerlist:OnSelected(Callback)
			self.Callbacks.Selected = self.Callbacks.Selected or {}
			table.insert(self.Callbacks.Selected, Callback)
		end
	end

	do
		local ServerList = {}
		ServerList.__index = ServerList
		Library.Classes.ServerList = ServerList

		local function HttpGet(Url)
			local Ok, Result = pcall(function() return game:HttpGet(Url) end)
			if Ok and type(Result) == "string" then return Result end
			if Library.Unloaded then return nil end
			local RequestFunction = Env.request or Env.http_request or (type(Env.syn) == "table" and Env.syn.request) or (type(Env.http) == "table" and Env.http.request)
			if typeof(RequestFunction) == "function" then
				local Ok2, Response = pcall(RequestFunction, { Url = Url, Method = "GET" })
				if Ok2 and type(Response) == "table" and Response.Body then return Response.Body end
			end
			return nil
		end

		local function FormatTime(Seconds)
			Seconds = math.floor(Seconds)
			local Hours, Minutes = math.floor(Seconds / 3600), math.floor(Seconds % 3600 / 60)
			if Hours > 0 then return string.format("%dh %02dm", Hours, Minutes) end
			return string.format("%dm %02ds", Minutes, Seconds % 60)
		end

		function Window:AddServerList(Config)
			Config = Config or {}
			local TabObject = Config.Tab or self:AddTab({ Title = Config.Title or "Servers", Icon = Config.Icon or "Globe", Category = Config.Category })
			local Page = TabObject:GetCustomPage()
			local Self = setmetatable({ Tab = TabObject, Servers = {}, Sort = "Players", Rows = {} }, ServerList)
			Library.ServerList = Self
			local TeleportService = Service("TeleportService")
			local CURRENT_HEIGHT = 92

			local Header = Create("Frame", { Position = UDim2.fromOffset(10, 10), Size = UDim2.new(1, -20, 0, 22), BackgroundTransparency = 1, Parent = Page })
			local TitleRow = Create("Frame", { Size = UDim2.new(1, -300, 1, 0), BackgroundTransparency = 1, Parent = Header })
			ListLayout(TitleRow, 8, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Left, Enum.VerticalAlignment.Center)
			local HeaderIcon = Create("ImageLabel", { Size = UDim2.fromOffset(15, 15), LayoutOrder = 1, Theme = { ImageColor3 = "Inactive Text" }, Parent = TitleRow })
			SetIcon(HeaderIcon, Config.Icon or "Globe")
			Create("TextLabel", { Size = UDim2.fromOffset(0, 22), AutomaticSize = Enum.AutomaticSize.X, Text = Config.Title or "Servers", LayoutOrder = 2, Theme = { TextColor3 = "Inactive Text" }, Parent = TitleRow })
			local CountLabel = Create("TextLabel", { Size = UDim2.fromOffset(0, 22), AutomaticSize = Enum.AutomaticSize.X, Text = "", TextSize = 11, LayoutOrder = 3, Theme = { TextColor3 = "Inactive Text" }, Parent = TitleRow })
			local Sorter = SegmentSwitch(Header, {
				{ Name = "Most players", Value = "Players" },
				{ Name = "Least players", Value = "Empty" },
				{ Name = "Best ping", Value = "Ping" },
			}, function(Sort) Self:SetSort(Sort) end)
			Sorter.Frame.AnchorPoint = Vector2.new(1, 0.5)
			Sorter.Frame.Position = UDim2.new(1, 0, 0.5, 0)
			Sorter.Frame.Size = UDim2.fromOffset(222, 22)
			local RefreshButton, RefreshLabel = SmallButton(Header, "Refresh", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -228, 0.5, 0), Size = UDim2.fromOffset(64, 22) })
			RefreshLabel.TextSize = 11
			Self.Sorter, Self.CountLabel, Self.RefreshLabel, Self.RefreshButton = Sorter, CountLabel, RefreshLabel, RefreshButton

			local ListPanel = Panel(Page, { Position = UDim2.fromOffset(10, 42), Size = UDim2.new(1, -20, 1, -(42 + 10 + CURRENT_HEIGHT + 10)) })
			local Columns = { { "#", 12 }, { "Players", 44 }, { "Ping", 214 }, { "FPS", 272 } }
			for _, Column in Columns do
				Create("TextLabel", { Position = UDim2.fromOffset(Column[2], 0), Size = UDim2.fromOffset(60, 28), Text = Column[1], TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Inactive Text" }, Parent = ListPanel })
			end
			Create("Frame", { Position = UDim2.fromOffset(0, 28), Size = UDim2.new(1, 0, 0, 1), Theme = { BackgroundColor3 = "Outline" }, Parent = ListPanel })
			local Scroll = Create("ScrollingFrame", { Position = UDim2.fromOffset(0, 29), Size = UDim2.new(1, 0, 1, -30), ScrollBarThickness = 2, Theme = { ScrollBarImageColor3 = "Accent" }, Parent = ListPanel })
			ListLayout(Scroll, 0)
			local Notice = Create("TextLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new(0.5, 0, 0.5, 14), Size = UDim2.new(1, -60, 0, 40), Text = "", TextWrapped = true, TextSize = 12, Visible = false, Theme = { TextColor3 = "Inactive Text" }, Parent = ListPanel })
			Self.Scroll, Self.Notice = Scroll, Notice

			local Current = Panel(Page, { AnchorPoint = Vector2.new(0, 1), Position = UDim2.new(0, 10, 1, -10), Size = UDim2.new(1, -20, 0, CURRENT_HEIGHT) })
			local Dot = Create("Frame", { Position = UDim2.fromOffset(12, 16), Size = UDim2.fromOffset(7, 7), BackgroundColor3 = PingColors.Good, Parent = Current })
			Corner(Dot, 4)
			Create("TextLabel", { Position = UDim2.fromOffset(26, 10), Size = UDim2.fromOffset(160, 18), Text = "Current server", TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Current })
			local StatsLabel = Create("TextLabel", { AnchorPoint = Vector2.new(1, 0), Position = UDim2.new(1, -12, 0, 10), Size = UDim2.new(1, -200, 0, 18), TextSize = 11, TextXAlignment = Enum.TextXAlignment.Right, Theme = { TextColor3 = "Inactive Text" }, Parent = Current })
			local JobLabel = Create("TextLabel", { Position = UDim2.fromOffset(12, 30), Size = UDim2.new(1, -24, 0, 14), NoCase = true, TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Inactive Text" }, Parent = Current })
			local Buttons = Create("Frame", { Position = UDim2.new(0, 12, 1, -36), Size = UDim2.new(1, -24, 0, 24), BackgroundTransparency = 1, Parent = Current })
			local RejoinButton = SmallButton(Buttons, "Rejoin", { Size = UDim2.new(1 / 3, -4, 1, 0) })
			local HopButton = SmallButton(Buttons, "Server Hop", { Position = UDim2.new(1 / 3, 2, 0, 0), Size = UDim2.new(1 / 3, -4, 1, 0) })
			local CopyButton = SmallButton(Buttons, "Copy Job ID", { Position = UDim2.new(2 / 3, 4, 0, 0), Size = UDim2.new(1 / 3, -4, 1, 0) })

			local function Teleport(JobId)
				local Ok, Error = pcall(function()
					if JobId then TeleportService:TeleportToPlaceInstance(game.PlaceId, JobId, LocalPlayer)
					else TeleportService:Teleport(game.PlaceId, LocalPlayer) end
				end)
				if Ok then Library:Notify("Teleporting...") else Library:Notify({ Text = "Teleport failed: " .. tostring(Error), Type = "Error" }) end
			end
			Self.Teleport = Teleport
			Connect(RejoinButton.MouseButton1Click, function()
				if #Players:GetPlayers() <= 1 then Teleport(nil) else Teleport(game.JobId) end
			end)
			Connect(HopButton.MouseButton1Click, function() Self:Hop() end)
			Connect(CopyButton.MouseButton1Click, function() CopyText(game.JobId, "job id") end)
			Connect(RefreshButton.MouseButton1Click, function() Self:Refresh() end)

			task.spawn(function()
				while not Library.Unloaded do
					if TabObject.Active then
						local Ping = GetPing()
						JobLabel.Text = "Job ID  " .. (game.JobId ~= "" and game.JobId or "studio")
						Library:SetText(StatsLabel, string.format("%d / %d players  ·  %d ms  ·  up %s", #Players:GetPlayers(), Players.MaxPlayers, Ping, FormatTime(Workspace.DistributedGameTime)))
						Dot.BackgroundColor3 = PingColor(Ping)
					end
					task.wait(1)
				end
			end)
			Self:SetSort("Players", true)
			TabObject:OnSelected(function()
				if not Self.Loaded then Self:Refresh() end
			end)
			return Self
		end

		function ServerList:SetSort(Sort, Instant)
			self.Sort = Sort
			self.Sorter:Set(Sort, Instant)
			self:_Render()
		end

		function ServerList:Refresh()
			if Library.Unloaded or self.Refreshing then return end
			self.Loaded = true
			self.Refreshing = true
			self.RenderRequest = (self.RenderRequest or 0) + 1
			self.Notice.Visible = true
			Library:SetText(self.Notice, "Loading servers...")
			Library:SetText(self.RefreshLabel, "Loading...")
			self.RefreshButton.Active = false
			task.defer(function()
				if Library.Unloaded then return end
				local Ok, Servers = pcall(function()
					local Body = HttpGet("https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?sortOrder=Desc&limit=100&excludeFullGames=false")
					if Library.Unloaded or not Body then return nil end
					local Data = HttpService:JSONDecode(Body)
					if type(Data) ~= "table" or type(Data.data) ~= "table" then return nil end
					local Result = {}
					for Index = 1, math.min(#Data.data, 100) do
						local Server = Data.data[Index]
						if type(Server) == "table" then
							table.insert(Result, { Id = Server.id, Playing = Server.playing or 0, Max = Server.maxPlayers or Players.MaxPlayers, Ping = Server.ping or 0, Fps = Server.fps or 0 })
						end
					end
					return Result
				end)
				if Library.Unloaded then return end
				self.Refreshing = false
				self.RefreshButton.Active = true
				Library:SetText(self.RefreshLabel, "Refresh")
				self.Servers = Ok and Servers or {}
				if not Ok or not Servers then
					Library:SetText(self.Notice, "Could not load the server list. It needs HttpGet (executor) and does not work inside Studio.")
					self:_Render()
					return
				end
				self.Notice.Visible = #self.Servers == 0
				Library:SetText(self.Notice, "No public servers found.")
				self:_Render()
			end)
		end

		function ServerList:_Render()
			if Library.Unloaded then return end
			self.RenderRequest = (self.RenderRequest or 0) + 1
			local Request = self.RenderRequest
			local Sorted = table.clone(self.Servers)
			local Sort = self.Sort
			task.defer(function()
				local function Current() return not Library.Unloaded and self.RenderRequest == Request end
				if not Current() then return end
				for Index = #self.Rows, 1, -1 do
					self.Rows[Index]:Destroy()
					self.Rows[Index] = nil
					if Index % 5 == 0 then
						task.wait()
						if not Current() then return end
					end
				end
				local Connections, Next = Library.Connections, 1
				for Index = 1, #Connections do
					local Connection = Connections[Index]
					if Connection.Connected ~= false then
						Connections[Next] = Connection
						Next += 1
					end
				end
				for Index = #Connections, Next, -1 do Connections[Index] = nil end
				table.sort(Sorted, function(A, B)
					if Sort == "Empty" then return A.Playing < B.Playing end
					if Sort == "Ping" then return A.Ping < B.Ping end
					return A.Playing > B.Playing
				end)
				local Count = #Sorted
				Library:SetText(self.CountLabel, Count > 0 and (Count == 1 and "1 server" or (Count .. " servers")) or "")
				for Index, Server in Sorted do
					local IsCurrent = Server.Id == game.JobId
					local Row = Create("TextButton", { Size = UDim2.new(1, 0, 0, 34), Theme = { BackgroundColor3 = "Element" }, BackgroundTransparency = IsCurrent and 0.5 or 1, LayoutOrder = Index, Parent = self.Scroll })
					if Index < Count then
						Create("Frame", { Position = UDim2.new(0, 10, 1, -1), Size = UDim2.new(1, -20, 0, 1), Theme = { BackgroundColor3 = "Outline" }, BackgroundTransparency = 0.4, Parent = Row })
					end
					Create("TextLabel", { Position = UDim2.fromOffset(12, 0), Size = UDim2.fromOffset(30, 34), Text = tostring(Index), TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Inactive Text" }, Parent = Row })
					local BarBack = Create("Frame", { Position = UDim2.fromOffset(44, 15), Size = UDim2.fromOffset(100, 5), Theme = { BackgroundColor3 = "Inline" }, Parent = Row })
					Corner(BarBack, 3)
					local Fill = Create("Frame", { Size = UDim2.fromScale(math.clamp(Server.Playing / math.max(Server.Max, 1), 0.04, 1), 1), Theme = { BackgroundColor3 = "ToggleFill" }, Parent = BarBack })
					Corner(Fill, 3)
					Create("TextLabel", { Position = UDim2.fromOffset(152, 0), Size = UDim2.fromOffset(56, 34), Text = Server.Playing .. "/" .. Server.Max, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Row })
					Create("TextLabel", { Position = UDim2.fromOffset(214, 0), Size = UDim2.fromOffset(54, 34), Text = math.floor(Server.Ping) .. " ms", TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, TextColor3 = PingColor(Server.Ping), Parent = Row })
					Create("TextLabel", { Position = UDim2.fromOffset(272, 0), Size = UDim2.fromOffset(54, 34), Text = tostring(math.floor(Server.Fps)), TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Inactive Text" }, Parent = Row })
					local Join, JoinLabel = SmallButton(Row, IsCurrent and "You're here" or "Join", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -10, 0.5, 0), Size = UDim2.fromOffset(IsCurrent and 76 or 56, 22) })
					if IsCurrent then
						ThemeTween(JoinLabel, "TextColor3", "Accent", 0)
					else
						Connect(Join.MouseButton1Click, function() self.Teleport(Server.Id) end)
					end
					Connect(Row.MouseEnter, function() Tween(Row, { BackgroundTransparency = IsCurrent and 0.3 or 0.6 }, 0.12) end)
					Connect(Row.MouseLeave, function() Tween(Row, { BackgroundTransparency = IsCurrent and 0.5 or 1 }, 0.12) end)
					table.insert(self.Rows, Row)
					if Index % 5 == 0 and Index < Count then
						task.wait()
						if not Current() then return end
					end
				end
				end)
		end

		function ServerList:Hop()
			local Options = {}
			for _, Server in self.Servers do
				if Server.Id ~= game.JobId and Server.Playing < Server.Max then table.insert(Options, Server) end
			end
			if #Options == 0 then
				Library:Notify({ Text = "No other servers available (refresh first).", Type = "Warning" })
				return
			end
			self.Teleport(Options[math.random(1, #Options)].Id)
		end
	end

	do
		local SkinChanger = {}
		SkinChanger.__index = SkinChanger
		local SkinCategory = {}
		SkinCategory.__index = SkinCategory
		local SkinWeapon = {}
		SkinWeapon.__index = SkinWeapon
		Library.Classes.SkinChanger = SkinChanger

		Library.Rarities = {
			Default = Rgb(148, 148, 148),
			Consumer = Rgb(176, 195, 217),
			Industrial = Rgb(94, 152, 217),
			["Mil-Spec"] = Rgb(75, 105, 255),
			Restricted = Rgb(136, 71, 255),
			Classified = Rgb(211, 44, 230),
			Covert = Rgb(235, 75, 75),
			Contraband = Rgb(228, 174, 57),
		}

		local function RarityColor(Rarity)
			return Library.Rarities[Rarity or "Default"] or Library.Rarities.Default
		end

		local function EqualGrid(Parent, Columns, Height, Gap)
			Gap = Gap or 8
			local Layout = Create("UIGridLayout", { CellPadding = UDim2.fromOffset(Gap, Gap), SortOrder = Enum.SortOrder.LayoutOrder, Parent = Parent })
			local Inset = Create("UIPadding", { Parent = Parent })
			local function Fit()
				local Width = Parent.AbsoluteSize.X
				local Cell = math.max(1, math.floor((Width - Gap * (Columns - 1)) / Columns))
				Layout.CellSize = UDim2.fromOffset(Cell, Height)
				Inset.PaddingLeft = UDim.new(0, math.max(0, math.floor((Width - Cell * Columns - Gap * (Columns - 1)) / 2)))
			end
			Connect(Parent:GetPropertyChangedSignal("AbsoluteSize"), Fit)
			Fit()
			return Layout
		end

		local function SkinCard(Parent, Data)
			local StageHeight = Data.StageHeight or 72
			local Card = Create("TextButton", { LayoutOrder = Data.Order or 0, Theme = { BackgroundColor3 = "Tab" }, Parent = Parent })
			Corner(Card, 6)
			local CardStroke = Stroke(Card, "Outline")
			local Stage = Create("Frame", { Position = UDim2.fromOffset(5, 5), Size = UDim2.new(1, -10, 0, StageHeight), Theme = { BackgroundColor3 = "Background" }, Parent = Card })
			Corner(Stage, 5)
			local Glow = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundColor3 = RarityColor(Data.Rarity), BackgroundTransparency = Data.Rarity and 0 or 1, Parent = Stage })
			Corner(Glow, 5)
			Create("UIGradient", { Rotation = 90, Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(0.4, 1), NumberSequenceKeypoint.new(1, 0.78) }), Parent = Glow })
			local Inset = Data.ImageInset or 12
			local Image = Create("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.new(1, -Inset * 2, 1, -Inset * 2), ScaleType = Enum.ScaleType.Fit, ImageColor3 = Data.ImageColor or Color3.new(1, 1, 1), ZIndex = 2, Parent = Stage })
			SetIcon(Image, Data.Image)
			local Title = Create("TextLabel", { Position = UDim2.fromOffset(9, StageHeight + 11), Size = UDim2.new(1, -18, 0, 14), Text = Data.Title or "", TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Text" }, Parent = Card })
			local Subtitle = Create("TextLabel", { Position = UDim2.fromOffset(9, StageHeight + 27), Size = UDim2.new(1, -18, 0, 12), Text = Data.Subtitle or "", TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Parent = Card })
			local Self = { Card = Card, Stroke = CardStroke, Stage = Stage, Glow = Glow, Image = Image, Title = Title, Subtitle = Subtitle, Selected = false, Corners = {} }
			function Self.SetRarity(_, Rarity)
				Glow.BackgroundColor3 = RarityColor(Rarity)
				Glow.BackgroundTransparency = Rarity and 0 or 1
				if Rarity then
					Library:Unthemed(Subtitle, "TextColor3")
					Subtitle.TextColor3 = RarityColor(Rarity)
				else
					Library:Theme(Subtitle, "TextColor3", "Inactive Text")
				end
			end
			function Self.SetSelected(_, Selected)
				Self.Selected = Selected
				ThemeTween(CardStroke, "Color", Selected and "Accent" or "Outline", 0.15)
			end
			Self:SetRarity(Data.Rarity)
			local Grow = UDim2.new(1, -Inset * 2 + 8, 1, -Inset * 2 + 8)
			Connect(Card.MouseEnter, function()
				ThemeTween(Card, "BackgroundColor3", "Hovered Element", 0.12)
				Tween(Image, { Size = Grow }, 0.2)
				for _, Icon in Self.Corners do Tween(Icon, { ImageTransparency = 0 }, 0.12) end
			end)
			Connect(Card.MouseLeave, function()
				ThemeTween(Card, "BackgroundColor3", "Tab", 0.12)
				Tween(Image, { Size = UDim2.new(1, -Inset * 2, 1, -Inset * 2) }, 0.2)
				for Button, Icon in Self.Corners do
					if not Button:GetAttribute("On") then Tween(Icon, { ImageTransparency = 0.5 }, 0.12) end
				end
			end)
			return Self
		end

		local function CornerIcon(Card, Icon, Position, Anchor)
			local Button = Create("ImageButton", { AnchorPoint = Anchor, Position = Position, Size = UDim2.fromOffset(22, 22), BackgroundTransparency = 1, ImageTransparency = 1, ZIndex = 5, Parent = Card.Stage })
			local Image = Create("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromOffset(12, 12), ImageTransparency = 0.5, Theme = { ImageColor3 = "Inactive Text" }, ZIndex = 6, Parent = Button })
			SetIcon(Image, Icon)
			Card.Corners[Button] = Image
			Connect(Button.MouseEnter, function() ThemeTween(Image, "ImageColor3", "Text", 0.12) end)
			Connect(Button.MouseLeave, function() if not Button:GetAttribute("On") then ThemeTween(Image, "ImageColor3", "Inactive Text", 0.12) end end)
			return Button, Image
		end

		function Window:AddSkinChanger(Config)
			Config = Config or {}
			local TabObject = Config.Tab or self:AddTab({ Title = Config.Title or "Skins", Icon = Config.Icon or "Brush", Category = Config.Category })
			local Page = TabObject:GetCustomPage()
			local Self = setmetatable({ Tab = TabObject, Window = self, Categories = {}, Weapons = {}, Saved = {}, Callbacks = {}, Counter = 0 }, SkinChanger)
			Library.SkinChanger = Self
			local Base = UDim2.fromOffset(10, 42)

			local Header = Create("Frame", { Position = UDim2.fromOffset(10, 10), Size = UDim2.new(1, -20, 0, 22), BackgroundTransparency = 1, Parent = Page })
			local Crumbs = Create("Frame", { Size = UDim2.new(1, -150, 1, 0), BackgroundTransparency = 1, Parent = Header })
			ListLayout(Crumbs, 6, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Left, Enum.VerticalAlignment.Center)
			local HeaderIcon = Create("ImageLabel", { Size = UDim2.fromOffset(15, 15), LayoutOrder = 0, Theme = { ImageColor3 = "Inactive Text" }, Parent = Crumbs })
			SetIcon(HeaderIcon, Config.Icon or "Brush")
			local Counter = Create("TextLabel", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, 0, 0.5, 0), Size = UDim2.fromOffset(140, 22), TextSize = 12, TextXAlignment = Enum.TextXAlignment.Right, Theme = { TextColor3 = "Inactive Text" }, Parent = Header })
			local SearchFrame = Create("Frame", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, 0, 0.5, 0), Size = UDim2.fromOffset(140, 22), Theme = { BackgroundColor3 = "Element" }, Visible = false, Parent = Header })
			Corner(SearchFrame, 5)
			Stroke(SearchFrame, "Outline")
			local SearchIcon = Create("ImageLabel", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 8, 0.5, 0), Size = UDim2.fromOffset(11, 11), Theme = { ImageColor3 = "Inactive Text" }, Parent = SearchFrame })
			SetIcon(SearchIcon, "Search")
			local SearchBox = Create("TextBox", { Position = UDim2.fromOffset(25, 0), Size = UDim2.new(1, -31, 1, 0), Text = "", PlaceholderText = "Search weapons...", TextSize = 12, ClearTextOnFocus = false, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Text", PlaceholderColor3 = "Inactive Text" }, Parent = SearchFrame })

			local function View(Name)
				return Create("CanvasGroup", { Name = Name, Position = Base, Size = UDim2.new(1, -12, 1, -(Base.Y.Offset + 10)), BackgroundTransparency = 1, GroupTransparency = 1, Visible = false, Parent = Page })
			end
			local function Scroll(Parent, Position, Size)
				local Frame = Create("ScrollingFrame", { Position = Position, Size = Size, ScrollBarThickness = 2, Theme = { ScrollBarImageColor3 = "Accent" }, Parent = Parent })
				local Body = Create("Frame", { Size = UDim2.new(1, -8, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, Parent = Frame })
				Padding(Body, 1, 10, 0, 0)
				return Frame, Body
			end

			local Main = View("Saved")
			local _, MainBody = Scroll(Main, UDim2.new(), UDim2.fromScale(1, 1))
			local MainGrid = Create("Frame", { Size = UDim2.new(1, 0, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, Parent = MainBody })
			EqualGrid(MainGrid, 3, 128)
			local CreateCard = Create("TextButton", { LayoutOrder = -1000, Theme = { BackgroundColor3 = "Tab" }, BackgroundTransparency = 0.6, Parent = MainGrid })
			Corner(CreateCard, 6)
			local CreateStroke = Stroke(CreateCard, "Outline")
			local PlusRing = Create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new(0.5, 0, 0.5, -10), Size = UDim2.fromOffset(32, 32), Theme = { BackgroundColor3 = "Element" }, Parent = CreateCard })
			Corner(PlusRing, 16)
			local PlusStroke = Stroke(PlusRing, "Outline")
			local PlusIcon = Create("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromOffset(12, 12), Theme = { ImageColor3 = "Inactive Text" }, Parent = PlusRing })
			SetIcon(PlusIcon, "Cross")
			local CreateText = Create("TextLabel", { AnchorPoint = Vector2.new(0.5, 0), Position = UDim2.new(0.5, 0, 0.5, 14), Size = UDim2.new(1, -12, 0, 14), Text = "New skin", TextSize = 12, Theme = { TextColor3 = "Inactive Text" }, Parent = CreateCard })
			Connect(CreateCard.MouseEnter, function()
				for Object, Property in { [CreateText] = "TextColor3", [PlusIcon] = "ImageColor3", [PlusStroke] = "Color", [CreateStroke] = "Color" } do ThemeTween(Object, Property, "Accent", 0.15) end
			end)
			Connect(CreateCard.MouseLeave, function()
				ThemeTween(CreateText, "TextColor3", "Inactive Text", 0.15)
				ThemeTween(PlusIcon, "ImageColor3", "Inactive Text", 0.15)
				ThemeTween(PlusStroke, "Color", "Outline", 0.15)
				ThemeTween(CreateStroke, "Color", "Outline", 0.15)
			end)

			local Picker = View("Picker")
			local _, PickerBody = Scroll(Picker, UDim2.new(), UDim2.fromScale(1, 1))
			ListLayout(PickerBody, 14)
			local NoResults = Create("TextLabel", { Size = UDim2.new(1, 0, 0, 40), Text = "No weapons found.", TextSize = 12, Visible = false, LayoutOrder = 100000, Theme = { TextColor3 = "Inactive Text" }, Parent = PickerBody })

			local Gallery = View("Gallery")
			local Banner = Panel(Gallery, { Size = UDim2.new(1, -8, 0, 132) })
			local Stage = Create("Frame", { Position = UDim2.fromOffset(8, 8), Size = UDim2.new(0, 200, 1, -16), Theme = { BackgroundColor3 = "Background" }, Parent = Banner })
			Corner(Stage, 5)
			local StageGlow = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundColor3 = Library.Rarities.Default, Parent = Stage })
			Corner(StageGlow, 5)
			Create("UIGradient", { Rotation = 90, Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(0.35, 1), NumberSequenceKeypoint.new(1, 0.72) }), Parent = StageGlow })
			local Preview = Create("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.new(1, -28, 1, -24), ScaleType = Enum.ScaleType.Fit, ZIndex = 2, Parent = Stage })
			local Info = Create("Frame", { Position = UDim2.fromOffset(222, 12), Size = UDim2.new(1, -234, 1, -24), BackgroundTransparency = 1, Parent = Banner })
			local SkinName = Create("TextLabel", { Size = UDim2.new(1, 0, 0, 18), TextSize = 16, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Text" }, Parent = Info })
			local WeaponName = Create("TextLabel", { Position = UDim2.fromOffset(0, 21), Size = UDim2.new(1, 0, 0, 14), TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Inactive Text" }, Parent = Info })
			local RarityPill = Create("Frame", { Position = UDim2.fromOffset(0, 43), Size = UDim2.fromOffset(0, 18), AutomaticSize = Enum.AutomaticSize.X, BackgroundColor3 = Library.Rarities.Default, BackgroundTransparency = 0.85, Parent = Info })
			Corner(RarityPill, 9)
			local RarityLabel = Create("TextLabel", { Size = UDim2.new(0, 0, 1, 0), AutomaticSize = Enum.AutomaticSize.X, TextSize = 11, Parent = RarityPill })
			Padding(RarityLabel, 0, 0, 8, 8)
			local BannerButtons = Create("Frame", { AnchorPoint = Vector2.new(0, 1), Position = UDim2.fromScale(0, 1), Size = UDim2.new(1, 0, 0, 26), BackgroundTransparency = 1, Parent = Info })
			local ApplyButton, ApplyLabel = SmallButton(BannerButtons, "Apply", { Size = UDim2.new(0.5, -3, 1, 0) })
			local CustomizeButton = SmallButton(BannerButtons, "Customize", { Position = UDim2.new(0.5, 3, 0, 0), Size = UDim2.new(0.5, -3, 1, 0) })
			local _, SkinBody = Scroll(Gallery, UDim2.fromOffset(0, 142), UDim2.new(1, 0, 1, -142))
			local SkinGrid = Create("Frame", { Size = UDim2.new(1, 0, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, Parent = SkinBody })
			EqualGrid(SkinGrid, 3, 114)

			local Dim = Create("TextButton", { Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.new(0, 0, 0), BackgroundTransparency = 1, Visible = false, ZIndex = 20, Parent = Page })
			local Popup = Create("CanvasGroup", { Active = true, AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromOffset(300, 0), AutomaticSize = Enum.AutomaticSize.Y, Theme = { BackgroundColor3 = "Popup" }, GroupTransparency = 1, Visible = false, ZIndex = 21, Parent = Page })
			Corner(Popup, 8)
			Stroke(Popup, "Outline")
			local PopupItems = Create("Frame", { Size = UDim2.new(1, 0, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, Parent = Popup })
			Padding(PopupItems, 12, 12, 12, 12)
			ListLayout(PopupItems, 8)
			local PopupTitle = Create("TextLabel", { Size = UDim2.new(1, 0, 0, 18), Text = "Customize", TextSize = 14, TextXAlignment = Enum.TextXAlignment.Left, LayoutOrder = 0, Theme = { TextColor3 = "Text" }, Parent = PopupItems })
			local PopupBody = Create("Frame", { Size = UDim2.new(1, 0, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, LayoutOrder = 1, Parent = PopupItems })
			local Done = Create("Frame", { Size = UDim2.new(1, 0, 0, 28), BackgroundTransparency = 1, LayoutOrder = 2, Parent = PopupItems })
			ListLayout(Done, 0)
			local DoneContainer = NewContainer(Done, { Path = "" })
			DoneContainer.NoIndex = true
			DoneContainer:AddButton({ Text = "Done", Callback = function() Self:ClosePopup() end })

			Self.Parts = {
				Page = Page, Crumbs = Crumbs, Counter = Counter, SearchFrame = SearchFrame, SearchBox = SearchBox, NoResults = NoResults,
				Main = Main, MainGrid = MainGrid, Picker = Picker, PickerBody = PickerBody, Gallery = Gallery, Base = Base,
				StageGlow = StageGlow, Preview = Preview, SkinName = SkinName, WeaponName = WeaponName, RarityPill = RarityPill, RarityLabel = RarityLabel,
				ApplyLabel = ApplyLabel, SkinGrid = SkinGrid, Dim = Dim, Popup = Popup, PopupTitle = PopupTitle, PopupBody = PopupBody,
			}
			Self.View = nil

			Connect(CreateCard.MouseButton1Click, function() Self:ShowView("Picker") end)
			Connect(ApplyButton.MouseButton1Click, function() Self:Apply() end)
			Connect(CustomizeButton.MouseButton1Click, function() Self:OpenPopup() end)
			Connect(Dim.MouseButton1Click, function() Self:ClosePopup() end)
			Connect(SearchBox:GetPropertyChangedSignal("Text"), function() Self:_Filter(SearchBox.Text) end)

			Library:AddConfigExtra(function()
				local Out = {}
				for Name, Entry in Self.Saved do
					table.insert(Out, { Weapon = Name, Skin = Entry.Skin and Entry.Skin.Name, Settings = Entry.Settings, Pinned = Entry.Pinned })
				end
				return "__Skins", Out
			end, function(Data)
				if type(Data.__Skins) ~= "table" then return end
				Self:ClearSkins()
				for _, Saved in Data.__Skins do
					local Weapon = Self.Weapons[Saved.Weapon]
					if Weapon then Self:SetSkin(Weapon, Weapon:GetSkin(Saved.Skin), Saved.Settings, Saved.Pinned) end
				end
			end)
			Self:ShowView("Main", true)
			return Self
		end

		function SkinChanger:_SetCrumbs(List)
			local Crumbs = self.Parts.Crumbs
			for _, Child in Crumbs:GetChildren() do
				if Child:GetAttribute("Crumb") then Child:Destroy() end
			end
			for Index, Entry in List do
				if type(Entry) == "string" then Entry = { Entry } end
				local Last = Index == #List
				if Index > 1 then
					local Slash = Create("TextLabel", { Size = UDim2.fromOffset(0, 22), AutomaticSize = Enum.AutomaticSize.X, Text = "/", LayoutOrder = Index * 2 - 1, Theme = { TextColor3 = "Outline" }, Parent = Crumbs })
					Slash:SetAttribute("Crumb", true)
				end
				local Button = Create("TextButton", { Size = UDim2.fromOffset(0, 22), AutomaticSize = Enum.AutomaticSize.X, BackgroundTransparency = 1, Text = Entry[1], LayoutOrder = Index * 2, Theme = { TextColor3 = Last and "Text" or "Inactive Text" }, Parent = Crumbs })
				Button:SetAttribute("Crumb", true)
				if not Last and Entry[2] then
					Connect(Button.MouseEnter, function() ThemeTween(Button, "TextColor3", "Text", 0.12) end)
					Connect(Button.MouseLeave, function() ThemeTween(Button, "TextColor3", "Inactive Text", 0.12) end)
					Connect(Button.MouseButton1Click, Entry[2])
				end
			end
		end

		function SkinChanger:_Count()
			local Count = 0
			for _ in self.Saved do Count += 1 end
			return Count
		end

		function SkinChanger:ShowView(View, Instant)
			local Parts = self.Parts
			local Previous = self.View
			self.View = View
			local Views = { Main = Parts.Main, Picker = Parts.Picker, Gallery = Parts.Gallery }
			for Name, Frame in Views do
				if Name == View then
					Frame.Visible = true
					Frame.ZIndex = 2
					Frame.Position = Parts.Base + UDim2.fromOffset(0, (Instant or Previous == View) and 0 or 10)
					Tween(Frame, { Position = Parts.Base }, Instant and 0 or 0.3, Enum.EasingStyle.Quad)
					Tween(Frame, { GroupTransparency = 0 }, Instant and 0 or 0.15, Enum.EasingStyle.Quad)
				elseif Frame.Visible then
					Frame.ZIndex = 1
					Tween(Frame, { Position = Parts.Base - UDim2.fromOffset(0, 10) }, Instant and 0 or 0.3, Enum.EasingStyle.Quad)
					Tween(Frame, { GroupTransparency = 1 }, Instant and 0 or 0.2, Enum.EasingStyle.Quad).Completed:Connect(function()
						if self.View ~= Name then Frame.Visible = false end
					end)
				end
			end
			Parts.SearchFrame.Visible = View == "Picker"
			Parts.Counter.Visible = View ~= "Picker"
			if View == "Main" then
				self.EditingSaved = false
				self:_SetCrumbs({ "Skins" })
				local Count = self:_Count()
				Library:SetText(Parts.Counter, Count == 1 and "1 saved skin" or (Count .. " saved skins"))
			elseif View == "Picker" then
				self.EditingSaved = false
				Parts.SearchBox.Text = ""
				self:_SetCrumbs({ { "Skins", function() self:ShowView("Main") end }, "Choose a weapon" })
			end
		end

		function SkinChanger:_Filter(Query)
			Query = Query:lower()
			local Any = false
			for _, Category in self.Categories do
				local Shown = 0
				for _, Weapon in Category.Weapons do
					local Match = Query == "" or Weapon.Name:lower():find(Query, 1, true) ~= nil
					Weapon.Tile.Card.Visible = Match
					if Match then Shown += 1 end
				end
				Category.Holder.Visible = Shown > 0
				Any = Any or Shown > 0
			end
			self.Parts.NoResults.Visible = not Any
		end

		function SkinChanger:AddCategory(Config)
			if type(Config) == "string" then Config = { Name = Config } end
			Config = Config or {}
			self.Counter += 1
			local Holder = Create("Frame", { Size = UDim2.new(1, 0, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, LayoutOrder = self.Counter, Parent = self.Parts.PickerBody })
			ListLayout(Holder, 8)
			Create("TextLabel", { Size = UDim2.new(1, 0, 0, 14), Text = Config.Name or "Category", TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Inactive Text" }, LayoutOrder = 0, Parent = Holder })
			local GridHolder = Create("Frame", { Size = UDim2.new(1, 0, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, LayoutOrder = 1, Parent = Holder })
			EqualGrid(GridHolder, 4, 104)
			local Category = setmetatable({ Name = Config.Name, SkinChanger = self, Holder = Holder, Grid = GridHolder, Weapons = {}, Counter = 0 }, SkinCategory)
			table.insert(self.Categories, Category)
			return Category
		end

		function SkinCategory:AddWeapon(Config)
			Config = Config or {}
			self.Counter += 1
			local Changer = self.SkinChanger
			local Weapon = setmetatable({
				Name = Config.Name or "Weapon",
				Icon = Config.Icon,
				Category = self,
				SkinChanger = Changer,
				Skins = { { Name = "Default", Rarity = "Default" } },
				Elements = {},
			}, SkinWeapon)
			for _, Skin in Config.Skins or {} do table.insert(Weapon.Skins, Skin) end

			local Count = #Weapon.Skins - 1
			local Tile = SkinCard(self.Grid, { Title = Weapon.Name, Subtitle = Count == 1 and "1 skin" or (Count .. " skins"), Image = Weapon.Icon, StageHeight = 56, ImageInset = 6, Order = self.Counter })
			Weapon.Tile = Tile
			Connect(Tile.Card.MouseButton1Click, function() Changer:OpenWeapon(Weapon) end)

			local Body = Create("Frame", { Size = UDim2.new(1, 0, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundTransparency = 1, Visible = false, Parent = Changer.Parts.PopupBody })
			local _, Items = SectionBox(Body, { Path = "Skins / " .. Weapon.Name })
			Items.NoIndex = true
			Weapon.Body = Body
			local Before = {}
			for Flag in Library.Elements do Before[Flag] = true end
			SafeCall(Config.Elements or Config.Settings, Items, Weapon)
			for Flag, Element in Library.Elements do
				if not Before[Flag] then
					Weapon.Elements[Flag] = Element
					Element.NoSave = true
				end
			end
			Changer.Weapons[Weapon.Name] = Weapon
			table.insert(self.Weapons, Weapon)
			return Weapon
		end

		function SkinWeapon:GetSkin(Name)
			for _, Skin in self.Skins do
				if Skin.Name == Name then return Skin end
			end
			return self.Skins[1]
		end

		function SkinWeapon:ReadSettings()
			local Settings = {}
			for Flag, Element in self.Elements do
				local Ok, Value = pcall(Element.Serialize, Element)
				if Ok then Settings[Flag] = Value end
			end
			return Settings
		end

		function SkinWeapon:WriteSettings(Settings)
			for Flag, Value in Settings or {} do
				local Element = self.Elements[Flag]
				if Element then pcall(Element.Deserialize, Element, Value) end
			end
		end

		local function SkinImage(Weapon, Skin)
			return Skin.Image or Weapon.Icon, Skin.Image and Color3.new(1, 1, 1) or (Skin.Color or Color3.new(1, 1, 1))
		end

		function SkinChanger:OpenWeapon(Weapon, FromSaved)
			local Parts = self.Parts
			self.Weapon = Weapon
			for _, Child in Parts.SkinGrid:GetChildren() do
				if Child:IsA("GuiObject") then Child:Destroy() end
			end
			self.SkinCards = {}
			local Saved = self.Saved[Weapon.Name]
			for Index, Skin in Weapon.Skins do
				local Image, Color = SkinImage(Weapon, Skin)
				local Card = SkinCard(Parts.SkinGrid, { Title = Skin.Name, Subtitle = Skin.Rarity or "Default", Image = Image, ImageColor = Color, Rarity = Skin.Rarity or "Default", StageHeight = 60, Order = Index })
				self.SkinCards[Skin] = Card
				Connect(Card.Card.MouseButton1Click, function() self:SelectSkin(Skin) end)
			end
			if Saved then Weapon:WriteSettings(Saved.Settings) end
			self:ShowView("Gallery")
			self.EditingSaved = FromSaved == true
			local Count = #Weapon.Skins
			Library:SetText(Parts.Counter, Count == 1 and "1 skin" or (Count .. " skins"))
			local Crumbs = { { "Skins", function() self:ShowView("Main") end } }
			if not self.EditingSaved then table.insert(Crumbs, { Weapon.Category.Name or "Weapons", function() self:ShowView("Picker") end }) end
			table.insert(Crumbs, Weapon.Name)
			self:_SetCrumbs(Crumbs)
			self:SelectSkin(Saved and Saved.Skin or Weapon.Skins[math.min(2, #Weapon.Skins)])
		end

		function SkinChanger:SelectSkin(Skin)
			local Parts, Weapon = self.Parts, self.Weapon
			if not Weapon or not Skin then return end
			self.SelectedSkin = Skin
			for Other, Card in self.SkinCards do Card:SetSelected(Other == Skin) end
			local Image, Color = SkinImage(Weapon, Skin)
			local Rarity = RarityColor(Skin.Rarity)
			SetIcon(Parts.Preview, Image)
			Parts.Preview.ImageColor3 = Color
			Parts.Preview.Position = UDim2.fromScale(0.5, 0.56)
			Parts.Preview.ImageTransparency = 0.6
			Tween(Parts.Preview, { Position = UDim2.fromScale(0.5, 0.5), ImageTransparency = 0 }, 0.25)
			Library:SetText(Parts.SkinName, Skin.Name)
			Library:SetText(Parts.WeaponName, Weapon.Name .. "  ·  " .. (Weapon.Category.Name or ""))
			Library:SetText(Parts.RarityLabel, Skin.Rarity or "Default")
			Parts.RarityLabel.TextColor3 = Rarity
			Tween(Parts.RarityPill, { BackgroundColor3 = Rarity }, 0.25)
			Tween(Parts.StageGlow, { BackgroundColor3 = Rarity }, 0.25)
			local Saved = self.Saved[Weapon.Name]
			local Applied = Saved and Saved.Skin == Skin
			Library:SetText(Parts.ApplyLabel, Applied and "Applied" or "Apply")
			ThemeTween(Parts.ApplyLabel, "TextColor3", Applied and "Accent" or "Text", 0.15)
		end

		function SkinChanger:Apply()
			local Weapon, Skin = self.Weapon, self.SelectedSkin
			if not Weapon or not Skin then return end
			self:SetSkin(Weapon, Skin, Weapon:ReadSettings())
			Library:Notify("Applied " .. Skin.Name .. " to " .. Weapon.Name .. ".")
			self:ShowView("Main")
		end

		function SkinChanger:SetSkin(Weapon, Skin, Settings, Pinned)
			if type(Weapon) == "string" then Weapon = self.Weapons[Weapon] end
			if not Weapon then return end
			if type(Skin) == "string" then Skin = Weapon:GetSkin(Skin) end
			local Entry = self.Saved[Weapon.Name]
			if not Entry then
				Entry = { Weapon = Weapon, Pinned = false }
				self.Saved[Weapon.Name] = Entry
				local Card = SkinCard(self.Parts.MainGrid, { Title = Weapon.Name, Image = Weapon.Icon })
				Entry.Card = Card
				local Trash = CornerIcon(Card, "Trash", UDim2.fromOffset(2, 2), Vector2.new(0, 0))
				local Pin, PinImage = CornerIcon(Card, "Lock", UDim2.new(1, -2, 0, 2), Vector2.new(1, 0))
				Entry.PinImage, Entry.PinButton = PinImage, Pin
				Connect(Trash.MouseButton1Click, function() self:RemoveSkin(Weapon.Name) end)
				Connect(Pin.MouseButton1Click, function()
					Entry.Pinned = not Entry.Pinned
					self:_DrawEntry(Entry)
				end)
				Connect(Card.Card.MouseButton1Click, function() self:OpenWeapon(Weapon, true) end)
			end
			Entry.Skin, Entry.Settings = Skin or Weapon.Skins[1], Settings or {}
			if Pinned ~= nil then Entry.Pinned = Pinned end
			self:_DrawEntry(Entry)
			if self.View == "Main" then self:ShowView("Main", true) end
			self:_Fire("Changed", Entry)
			return Entry
		end

		function SkinChanger:_DrawEntry(Entry)
			local Card, Skin = Entry.Card, Entry.Skin
			local Image, Color = SkinImage(Entry.Weapon, Skin)
			SetIcon(Card.Image, Image)
			Card.Image.ImageColor3 = Color
			Library:SetText(Card.Subtitle, Skin.Name)
			Card:SetRarity(Skin.Rarity or "Default")
			Card.Card.LayoutOrder = Entry.Pinned and -100 or 0
			Entry.PinButton:SetAttribute("On", Entry.Pinned)
			ThemeTween(Entry.PinImage, "ImageColor3", Entry.Pinned and "Accent" or "Inactive Text", 0.15)
			Tween(Entry.PinImage, { ImageTransparency = Entry.Pinned and 0 or 0.5 }, 0.15)
		end

		function SkinChanger:RemoveSkin(Name)
			local Entry = self.Saved[Name]
			if not Entry then return end
			self.Saved[Name] = nil
			Entry.Card.Card:Destroy()
			if self.View == "Main" then self:ShowView("Main", true) end
			self:_Fire("Removed", Entry)
		end

		function SkinChanger:ClearSkins()
			for Name in table.clone(self.Saved) do self:RemoveSkin(Name) end
		end

		function SkinChanger:GetSkin(Name)
			return self.Saved[Name]
		end

		function SkinChanger:GetAllWeapons()
			local Out = {}
			for _, Category in self.Categories do
				for _, Weapon in Category.Weapons do table.insert(Out, Weapon) end
			end
			return Out
		end

		function SkinChanger:OpenPopup()
			local Parts, Weapon = self.Parts, self.Weapon
			if not Weapon then return end
			for _, Other in self.Weapons do Other.Body.Visible = Other == Weapon end
			Library:SetText(Parts.PopupTitle, "Customize " .. Weapon.Name)
			Parts.Dim.Visible = true
			Parts.Popup.Visible = true
			Tween(Parts.Dim, { BackgroundTransparency = 0.45 }, 0.18)
			Parts.Popup.Position = UDim2.new(0.5, 0, 0.5, 8)
			Tween(Parts.Popup, { GroupTransparency = 0, Position = UDim2.fromScale(0.5, 0.5) }, 0.2)
		end

		function SkinChanger:ClosePopup()
			local Parts = self.Parts
			Library:CloseAllPopups()
			Tween(Parts.Dim, { BackgroundTransparency = 1 }, 0.15)
			Tween(Parts.Popup, { GroupTransparency = 1 }, 0.15).Completed:Connect(function()
				if Parts.Popup.GroupTransparency > 0.99 then
					Parts.Dim.Visible = false
					Parts.Popup.Visible = false
				end
			end)
		end

		function SkinChanger:OnChanged(Callback)
			table.insert(self.Callbacks, Callback)
		end

		function SkinChanger:_Fire(Action, Entry)
			for _, Callback in self.Callbacks do SafeCall(Callback, Action, Entry) end
		end
	end

	do
		local Preview = {}
		Preview.__index = Preview
		Library.Classes.Preview = Preview

		local function DummyCharacter()
			local Model = Instance.new("Model")
			Model.Name = "Dummy"
			local function Part(Name, Size, CF, Color)
				local P = Instance.new("Part")
				P.Name, P.Size, P.CFrame, P.Color = Name, Size, CF, Color
				P.Anchored, P.CanCollide = true, false
				P.TopSurface, P.BottomSurface = Enum.SurfaceType.Smooth, Enum.SurfaceType.Smooth
				P.Parent = Model
				return P
			end
			local Skin, Shirt, Pants = Rgb(234, 184, 146), Rgb(52, 92, 156), Rgb(40, 44, 52)
			local Root = Part("HumanoidRootPart", Vector3.new(2, 2, 1), CFrame.new(0, 3, 0), Shirt)
			Root.Transparency = 1
			Part("Torso", Vector3.new(2, 2, 1), CFrame.new(0, 3, 0), Shirt)
			local Head = Part("Head", Vector3.new(1.2, 1.2, 1.2), CFrame.new(0, 4.6, 0), Skin)
			local Mesh = Instance.new("SpecialMesh")
			Mesh.MeshType = Enum.MeshType.Head
			Mesh.Scale = Vector3.new(1.25, 1.25, 1.25)
			Mesh.Parent = Head
			Part("Left Arm", Vector3.new(1, 2, 1), CFrame.new(-1.5, 3, 0), Skin)
			Part("Right Arm", Vector3.new(1, 2, 1), CFrame.new(1.5, 3, 0), Skin)
			Part("Left Leg", Vector3.new(1, 2, 1), CFrame.new(-0.5, 1, 0), Pants)
			Part("Right Leg", Vector3.new(1, 2, 1), CFrame.new(0.5, 1, 0), Pants)
			Model.PrimaryPart = Root
			return Model
		end

		local function CloneCharacter()
			local Character = LocalPlayer and LocalPlayer.Character
			if not Character then return nil end
			local Old = Character.Archivable
			Character.Archivable = true
			local Ok, Clone = pcall(Character.Clone, Character)
			Character.Archivable = Old
			if not Ok or not Clone then return nil end
			for _, Child in Clone:GetDescendants() do
				if Child:IsA("LuaSourceContainer") or Child:IsA("Sound") or Child:IsA("ForceField") then
					Child:Destroy()
				elseif Child:IsA("BasePart") then
					Child.Anchored = true
				end
			end
			local Humanoid = Clone:FindFirstChildOfClass("Humanoid")
			if Humanoid then Humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None end
			return Clone
		end

		local PREVIEW_ZOOM = 1.8
		local PreviewWhite, PreviewBlack = Color3.new(1, 1, 1), Color3.new(0, 0, 0)
		local R15Bones = {
			{ "Head", "UpperTorso" }, { "UpperTorso", "LowerTorso" },
			{ "UpperTorso", "LeftUpperArm" }, { "LeftUpperArm", "LeftLowerArm" }, { "LeftLowerArm", "LeftHand" },
			{ "UpperTorso", "RightUpperArm" }, { "RightUpperArm", "RightLowerArm" }, { "RightLowerArm", "RightHand" },
			{ "LowerTorso", "LeftUpperLeg" }, { "LeftUpperLeg", "LeftLowerLeg" }, { "LeftLowerLeg", "LeftFoot" },
			{ "LowerTorso", "RightUpperLeg" }, { "RightUpperLeg", "RightLowerLeg" }, { "RightLowerLeg", "RightFoot" },
		}
		local R6Bones = { { "Head", "Torso" }, { "Torso", "Left Arm" }, { "Torso", "Right Arm" }, { "Torso", "Left Leg" }, { "Torso", "Right Leg" } }

		local function PreviewNumber(State, Key, Default, Minimum, Maximum)
			local Value = tonumber(State[Key])
			if not Value or Value ~= Value or math.abs(Value) == math.huge then Value = Default end
			return math.clamp(Value, Minimum, Maximum)
		end

		local function PreviewAlpha(State, Key)
			return PreviewNumber(State, Key, 0, 0, 1)
		end

		local function PreviewGradient(Object, Enabled, First, Last, Rotation, FirstTransparency, LastTransparency)
			Object.Enabled = Enabled == true
			Object.Color = ColorSequence.new(First or PreviewWhite, Last or PreviewWhite)
			Object.Transparency = NumberSequence.new(FirstTransparency or 0, LastTransparency or 0)
			Object.Rotation = Rotation or 0
		end

		local function PreviewProject(Camera, Size, Position)
			local Point = Camera.CFrame:PointToObjectSpace(Position)
			local Depth = -Point.Z
			if Depth <= 0.05 then return nil end
			local Scale = Size.Y * 0.5 / math.tan(math.rad(Camera.FieldOfView * 0.5))
			return Vector2.new(Size.X * 0.5 + Point.X * Scale / Depth, Size.Y * 0.5 - Point.Y * Scale / Depth)
		end

		local function PreviewLine(Object, First, Last, Thickness)
			local Delta = Last - First
			Object.AnchorPoint = Vector2.new(0.5, 0.5)
			Object.Position = UDim2.fromOffset((First.X + Last.X) * 0.5, (First.Y + Last.Y) * 0.5)
			Object.Size = UDim2.fromOffset(Delta.Magnitude, Thickness)
			Object.Rotation = math.deg(math.atan2(Delta.Y, Delta.X))
			Object.Visible = true
		end

		local function PreviewChamsModel(Model, Parent)
			local Okay, Clone = pcall(Model.Clone, Model)
			if not Okay or not Clone then return nil, {} end
			local Parts = {}
			for _, Object in Clone:GetDescendants() do
				if Object:IsA("BasePart") then
					Object.Material = Enum.Material.Neon
					if Object:IsA("MeshPart") then Object.TextureID = "" end
					table.insert(Parts, { Object, Object.Transparency })
				elseif Object:IsA("SpecialMesh") then
					Object.TextureId = ""
				elseif Object:IsA("Decal") or Object:IsA("Texture") or Object:IsA("SurfaceAppearance") or Object:IsA("Clothing") or Object:IsA("ShirtGraphic") then
					Object:Destroy()
				end
			end
			Clone.Parent = Parent
			return Clone, Parts
		end

		function Window:AddPreview(Config)
			Config = Config or {}
			local Window_ = self
			local Self = setmetatable({
				Window = self,
				Tab = Config.Tab,
				State = {
					Box = true, BoxStyle = "Corner", BoxColor = PreviewWhite, BoxThickness = 1, CornerLength = 0.25,
					Fill = false, FillColor = Theme.Accent, FillTransparency = 0.7, Name = true, NameColor = PreviewWhite,
					HealthBar = true, Health = 0.82, HealthWidth = 4, Distance = true, Weapon = true,
					ArmorValue = 0.65, Ammo = 18, AmmoCapacity = 30, WeaponName = "AK-47", Chams = false,
					ChamsColor = Theme.Accent, ChamsOpacity = 0.35, TextSize = 11, Font = "Pixel",
				},
				Angle = 0.6,
				Visible = true,
			}, Preview)
			Library.Preview = Self
			self.PreviewOffset = Vector2.new(10, 0)

			local PanelFrame = Create("CanvasGroup", { Name = "Preview", Size = UDim2.fromOffset(Config.Width or 220, self.Holder.Size.Y.Offset), Theme = { BackgroundColor3 = "Background" }, Parent = Library.MenuGui })
			Layout.Register(self.LayoutKey .. "/Preview", function()
				local Viewport = Layout.Viewport(PanelFrame)
				return Viewport and { Kind = "Offset", X = Window_.PreviewOffset.X / Viewport.X, Y = Window_.PreviewOffset.Y / Viewport.Y }
			end, function(Value)
				local Viewport = Layout.Viewport(PanelFrame)
				if Value.Kind == "Offset" and Viewport then Window_.PreviewOffset = Vector2.new(Value.X * Viewport.X, Value.Y * Viewport.Y) end
			end)
			Corner(PanelFrame, 8)
			local PanelOutline = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, ZIndex = 50, Parent = PanelFrame })
			Corner(PanelOutline, 8)
			Stroke(PanelOutline, "Outline")
			local Header = Create("Frame", { Size = UDim2.new(1, 0, 0, 40), Theme = { BackgroundColor3 = "Inline" }, Active = true, Parent = PanelFrame })
			Create("Frame", { Position = UDim2.new(0, 0, 1, 0), Size = UDim2.new(1, 0, 0, 1), Theme = { BackgroundColor3 = "Outline" }, Parent = Header })
			local HeaderIcon = Create("ImageLabel", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 14, 0.5, 0), Size = UDim2.fromOffset(15, 15), Theme = { ImageColor3 = "Inactive Text" }, Parent = Header })
			SetIcon(HeaderIcon, "Eye")
			Create("TextLabel", { Position = UDim2.fromOffset(36, 0), Size = UDim2.new(1, -40, 1, 0), Text = Config.Title or "ESP Preview", TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Header })

			local Stage = Create("Frame", { Position = UDim2.fromOffset(10, 50), Size = UDim2.new(1, -20, 1, -60), Theme = { BackgroundColor3 = "Tab" }, Active = true, ClipsDescendants = true, Parent = PanelFrame })
			Corner(Stage, 6)
			Stroke(Stage, "Outline")
			local function ModelViewport(ZIndex)
				local Frame = Create("ViewportFrame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, Ambient = Rgb(170, 170, 170), LightColor = PreviewWhite, LightDirection = Vector3.new(-1, -1, -1), ZIndex = ZIndex, Parent = Stage })
				local ModelWorld = Instance.new("WorldModel")
				ModelWorld.Parent = Frame
				return Frame, ModelWorld
			end
			local ChamsOutlineViewport, ChamsOutlineWorld = ModelViewport(1)
			ChamsOutlineViewport.Position = UDim2.fromOffset(-1.5, -1.5)
			ChamsOutlineViewport.Size = UDim2.new(1, 3, 1, 3)
			local Viewport, World = ModelViewport(2)
			local ChamsViewport, ChamsWorld = ModelViewport(3)
			local Camera = Instance.new("Camera")
			Camera.FieldOfView = 40
			Camera.Parent = Viewport
			Viewport.CurrentCamera, ChamsViewport.CurrentCamera, ChamsOutlineViewport.CurrentCamera = Camera, Camera, Camera
			Create("TextLabel", { AnchorPoint = Vector2.new(0.5, 1), Position = UDim2.new(0.5, 0, 1, -6), Size = UDim2.new(1, 0, 0, 12), Text = "drag to rotate", TextSize = 10, Theme = { TextColor3 = "Inactive Text" }, ZIndex = 8, Parent = Stage })

			local Overlay = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, ZIndex = 4, Parent = Stage })
			local BoxFrame = Create("Frame", { BackgroundTransparency = 1, ZIndex = 5, Parent = Overlay })
			local Glow = Create("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), BackgroundTransparency = 1, Image = "rbxassetid://5028857084", ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(24, 24, 276, 276), ZIndex = 4, Parent = BoxFrame })
			local GlowGradient = Create("UIGradient", { Parent = Glow })
			local FillFrame = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, ZIndex = 5, Parent = BoxFrame })
			local FillGradient = Create("UIGradient", { Parent = FillFrame })
			local OutlineFrame = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, ZIndex = 6, Parent = BoxFrame })
			local FullOutline = Create("UIStroke", { ApplyStrokeMode = Enum.ApplyStrokeMode.Border, Color = PreviewBlack, Parent = OutlineFrame })
			local BorderFrame = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, ZIndex = 7, Parent = BoxFrame })
			local FullStroke = Create("UIStroke", { ApplyStrokeMode = Enum.ApplyStrokeMode.Border, Thickness = 1, Parent = BorderFrame })
			local StrokeGradient = Create("UIGradient", { Parent = FullStroke })
			local Corners, CornerOutlines, CornerGradients = {}, {}, {}
			for Index = 1, 8 do
				Corners[Index] = Create("Frame", { AnchorPoint = Vector2.new(0, 0.5), ZIndex = 7, Parent = BoxFrame })
				CornerOutlines[Index] = Create("Frame", { AnchorPoint = Vector2.new(0, 0.5), ZIndex = 6, Parent = BoxFrame })
				CornerGradients[Index] = Create("UIGradient", { Parent = Corners[Index] })
			end
			local function Bar(Anchor, Position)
				local Back = Create("Frame", { AnchorPoint = Anchor, Position = Position, BackgroundColor3 = PreviewBlack, BackgroundTransparency = 0.3, ZIndex = 7, Parent = BoxFrame })
				local Fill = Create("Frame", { AnchorPoint = Vector2.new(0, 1), Position = UDim2.fromScale(0, 1), BackgroundColor3 = PreviewWhite, ZIndex = 8, Parent = Back })
				return Back, Fill
			end
			local HealthBack, HealthFill = Bar(Vector2.new(1, 0), UDim2.new(0, -4, 0, 0))
			local HealthGradient = Create("UIGradient", { Rotation = 90, Parent = HealthFill })
			local ArmorBack, ArmorFill = Bar(Vector2.new(0, 0), UDim2.new(1, 4, 0, 0))
			local AmmoBack, AmmoFill = Bar(Vector2.new(0, 0), UDim2.new(0, 0, 1, 2))
			local function OverlayText(Anchor, Position, Text)
				local Label = Create("TextLabel", { AnchorPoint = Anchor, Position = Position, Size = UDim2.fromOffset(160, 14), Text = Text, NoCase = true, TextSize = 11, TextColor3 = PreviewWhite, ZIndex = 9, Parent = BoxFrame })
				Fonts.Registry[Label] = nil
				return Label
			end
			local NameLabel = OverlayText(Vector2.new(0.5, 1), UDim2.new(0.5, 0, 0, -3), LocalPlayer and LocalPlayer.DisplayName or "Player")
			local DistanceLabel = OverlayText(Vector2.new(0.5, 0), UDim2.new(0.5, 0, 1, 3), "24st")
			local WeaponLabel = OverlayText(Vector2.new(0.5, 0), UDim2.new(0.5, 0, 1, 16), "")
			local HealthText = OverlayText(Vector2.new(1, 0.5), UDim2.new(0, -10, 0.18, 0), "82")
			local AmmoText = OverlayText(Vector2.new(0, 1), UDim2.new(1, 8, 1, 0), "18")
			AmmoText.TextXAlignment = Enum.TextXAlignment.Left
			local FlagsLabel = OverlayText(Vector2.new(0, 0), UDim2.new(1, 8, 0, 0), "KIT\nBOMB\nZOOM")
			FlagsLabel.TextXAlignment, FlagsLabel.TextYAlignment = Enum.TextXAlignment.Left, Enum.TextYAlignment.Top
			local Icon = Create("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0), BackgroundTransparency = 1, ScaleType = Enum.ScaleType.Fit, ZIndex = 9, Parent = BoxFrame })
			local Head = Create("Frame", { AnchorPoint = Vector2.new(0.5, 0.5), ZIndex = 8, Parent = Overlay })
			Corner(Head, 100)
			local SkeletonLines, SkeletonOutlines = {}, {}
			for Index = 1, #R15Bones do
				SkeletonLines[Index] = Create("Frame", { AnchorPoint = Vector2.new(0, 0.5), ZIndex = 8, Parent = Overlay })
				SkeletonOutlines[Index] = Create("Frame", { AnchorPoint = Vector2.new(0, 0.5), ZIndex = 7, Parent = Overlay })
			end

			Self.Parts = {
				Panel = PanelFrame, Stage = Stage, Viewport = Viewport, Camera = Camera, World = World, Overlay = Overlay, Box = BoxFrame,
				Fill = FillFrame, FillGradient = FillGradient, FullStroke = FullStroke, FullOutline = FullOutline, StrokeGradient = StrokeGradient,
				Corners = Corners, CornerOutlines = CornerOutlines, CornerGradients = CornerGradients, Glow = Glow, GlowGradient = GlowGradient,
				HealthBack = HealthBack, HealthFill = HealthFill, HealthGradient = HealthGradient, HealthText = HealthText, ArmorBack = ArmorBack, ArmorFill = ArmorFill,
				AmmoBack = AmmoBack, AmmoFill = AmmoFill, AmmoText = AmmoText, Name = NameLabel, Distance = DistanceLabel, Weapon = WeaponLabel,
				Flags = FlagsLabel, Icon = Icon, Head = Head, SkeletonLines = SkeletonLines, SkeletonOutlines = SkeletonOutlines,
				ChamsViewport = ChamsViewport, ChamsWorld = ChamsWorld, ChamsOutlineViewport = ChamsOutlineViewport, ChamsOutlineWorld = ChamsOutlineWorld,
			}
			Self.Labels = { { NameLabel, "Name" }, { DistanceLabel, "Distance" }, { WeaponLabel, "Weapon" }, { FlagsLabel, "Flags" }, { HealthText, "HealthText" }, { AmmoText, "Ammo" } }

			function Self:LoadModel()
				if Library.Unloaded or not World.Parent or not PanelFrame.Parent then return end
				if self.Model then self.Model:Destroy() end
				if self.ChamsModel then self.ChamsModel:Destroy() end
				if self.ChamsOutlineModel then self.ChamsOutlineModel:Destroy() end
				local Model = CloneCharacter() or DummyCharacter()
				Model.Parent = World
				self.Model = Model
				self.OriginalColors, self.ModelParts, self.Bones = {}, {}, {}
				for _, Part in Model:GetDescendants() do
					if Part:IsA("BasePart") then
						self.OriginalColors[Part] = { Part.Color, Part.Material, Part.Transparency }
						if Part.Transparency < 1 and Part.Name ~= "HumanoidRootPart" and Part.Name ~= "CollisionBox" then table.insert(self.ModelParts, Part) end
					end
				end
				self.Head = Model:FindFirstChild("Head", true)
				if self.Head and not self.Head:IsA("BasePart") then self.Head = nil end
				for _, Pair in Model:FindFirstChild("UpperTorso", true) and R15Bones or R6Bones do
					local First, Last = Model:FindFirstChild(Pair[1], true), Model:FindFirstChild(Pair[2], true)
					if First and Last and First:IsA("BasePart") and Last:IsA("BasePart") then table.insert(self.Bones, { First, Last }) end
				end
				local CF, Size = Model:GetBoundingBox()
				self.ModelCenter, self.ModelSize = CF.Position, Size
				self.ChamsModel, self.ChamsParts = PreviewChamsModel(Model, ChamsWorld)
				self.ChamsOutlineModel, self.ChamsOutlineParts = PreviewChamsModel(Model, ChamsOutlineWorld)
				self:Update()
			end

			local Dragging, DragStart, PanelStart
			Connect(Header.InputBegan, function(Input)
				if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
					Dragging, DragStart, PanelStart = true, MousePosition(), Window_.PreviewOffset
				end
			end)
			Connect(UserInputService.InputChanged, function(Input)
				if Dragging and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then
					Window_.PreviewOffset = PanelStart + (MousePosition() - DragStart)
				end
			end)
			Connect(UserInputService.InputEnded, function(Input)
				if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
					if Dragging then Library:SaveLayout() end
					Dragging = false
				end
			end)
			local Rotating, RotateStart, AngleStart
			Connect(Stage.InputBegan, function(Input)
				if Input.UserInputType == Enum.UserInputType.MouseButton1 then Rotating, RotateStart, AngleStart = true, MousePosition().X, Self.Angle end
			end)
			Connect(UserInputService.InputChanged, function(Input)
				if Rotating and Input.UserInputType == Enum.UserInputType.MouseMovement then Self.Angle = AngleStart + (MousePosition().X - RotateStart) * 0.012 end
			end)
			Connect(UserInputService.InputEnded, function(Input)
				if Input.UserInputType == Enum.UserInputType.MouseButton1 then Rotating = false end
			end)

			Connect(RunService.RenderStepped, function(Delta)
				if Library.Unloaded or not PanelFrame.Parent or not World.Parent then return end
				local Holder = Window_.Holder
				local Shown = Window_.Open and (not Self.Tab or Self.Tab.Active) and Self.Visible
				if Shown ~= Self._Shown then
					Self._Shown = Shown
					if Shown then PanelFrame.Visible = true end
					Tween(PanelFrame, { GroupTransparency = Shown and 0 or 1 }, 0.16).Completed:Connect(function()
						if not Self._Shown then PanelFrame.Visible = false end
					end)
				end
				if not PanelFrame.Visible then return end
				local MenuPosition = Holder.AbsolutePosition - Library.MenuGui.AbsolutePosition
				local Offset = Window_.PreviewOffset
				PanelFrame.Position = UDim2.fromOffset(MenuPosition.X + Holder.AbsoluteSize.X + Offset.X, MenuPosition.Y + Offset.Y)
				local Position = Layout.ReadPosition(PanelFrame)
				if Position then
					Layout.SetPosition(PanelFrame, Position)
					local Viewport = Layout.Viewport(PanelFrame)
					Window_.PreviewOffset = Vector2.new(PanelFrame.Position.X.Scale * Viewport.X - MenuPosition.X - Holder.AbsoluteSize.X, PanelFrame.Position.Y.Scale * Viewport.Y - MenuPosition.Y)
				end
				if not Rotating and Self.State.AutoRotate ~= false then Self.Angle += Delta * 0.5 end
				if not Shown or not Self:RefreshState() then Self:Render() end
			end)

			task.defer(function() Self:LoadModel() end)
			if LocalPlayer then
				Connect(LocalPlayer.CharacterAdded, function(Character)
					task.wait(1)
					if Library.Unloaded or LocalPlayer.Character ~= Character then return end
					Self:LoadModel()
				end)
			end
			return Self
		end

		function Preview:SetStateProvider(Callback)
			self.StateProvider = type(Callback) == "function" and Callback or nil
			return self
		end

		function Preview:RefreshState()
			if not self.StateProvider then return false end
			local Okay, Values = pcall(self.StateProvider)
			if not Okay or type(Values) ~= "table" then return false end
			for Key, Value in Values do
				if self.State[Key] ~= Value then
					self:Update(Values)
					return true
				end
			end
			return false
		end

		function Preview:Update(State)
			if State then for Key, Value in State do self.State[Key] = Value end end
			local S, P = self.State, self.Parts
			local CornerStyle = S.BoxStyle == "Corner"
			local BoxGradient, FillGradient, GlowGradient = S.BoxGradient == true, S.FillGradient == true, S.GlowGradient == true
			P.FullStroke.Enabled = S.Box == true and not CornerStyle
			P.FullStroke.Color = BoxGradient and PreviewWhite or S.BoxColor or PreviewWhite
			P.FullStroke.Thickness = PreviewNumber(S, "BoxThickness", 1, 1, 10)
			P.FullStroke.Transparency = BoxGradient and 0 or PreviewAlpha(S, "BoxTransparency")
			P.FullOutline.Enabled = P.FullStroke.Enabled and S.BoxOutline == true
			P.FullOutline.Color = S.BoxOutlineColor or PreviewBlack
			P.FullOutline.Thickness = PreviewNumber(S, "BoxOutlineThickness", 3, 1, 12)
			P.FullOutline.Transparency = PreviewAlpha(S, "BoxOutlineTransparency")
			PreviewGradient(P.StrokeGradient, BoxGradient, S.BoxGradientStart, S.BoxGradientEnd, S.BoxGradientRotation, PreviewAlpha(S, "BoxGradientStartTransparency"), PreviewAlpha(S, "BoxGradientEndTransparency"))
			for Index, Line in P.Corners do
				Line.Visible = S.Box == true and CornerStyle
				Line.BackgroundColor3 = P.FullStroke.Color
				Line.BackgroundTransparency = P.FullStroke.Transparency
				local Outline = P.CornerOutlines[Index]
				Outline.Visible = Line.Visible and S.BoxOutline == true
				Outline.BackgroundColor3 = S.BoxOutlineColor or PreviewBlack
				Outline.BackgroundTransparency = PreviewAlpha(S, "BoxOutlineTransparency")
				PreviewGradient(P.CornerGradients[Index], BoxGradient, S.BoxGradientStart, S.BoxGradientEnd, S.BoxGradientRotation, PreviewAlpha(S, "BoxGradientStartTransparency"), PreviewAlpha(S, "BoxGradientEndTransparency"))
			end
			P.Fill.Visible = S.Box == true and S.Fill == true
			P.Fill.BackgroundTransparency = FillGradient and 0 or PreviewAlpha(S, "FillTransparency")
			P.Fill.BackgroundColor3 = FillGradient and PreviewWhite or S.FillColor or Theme.Accent
			PreviewGradient(P.FillGradient, FillGradient, S.FillGradientStart, S.FillGradientEnd, S.FillGradientRotation, PreviewAlpha(S, "FillGradientStartTransparency"), PreviewAlpha(S, "FillGradientEndTransparency"))
			P.Glow.Visible = S.Box == true and S.Glow == true
			P.Glow.ImageColor3 = GlowGradient and PreviewWhite or S.GlowColor or PreviewWhite
			P.Glow.ImageTransparency = 1 - (GlowGradient and 1 or 1 - PreviewAlpha(S, "GlowTransparency")) * PreviewNumber(S, "GlowOpacity", 0.2, 0, 1)
			local GlowSize = PreviewNumber(S, "GlowSize", 45, 0, 200)
			P.Glow.Size = UDim2.new(1, GlowSize, 1, GlowSize)
			PreviewGradient(P.GlowGradient, GlowGradient, S.GlowGradientStart, S.GlowGradientEnd, S.GlowGradientRotation, PreviewAlpha(S, "GlowGradientStartTransparency"), PreviewAlpha(S, "GlowGradientEndTransparency"))

			local Health = PreviewNumber(S, "Health", 0.82, 0, 1)
			local HealthColor = S.HealthColor or Rgb(96, 220, 120)
			local HealthTransparency = PreviewAlpha(S, "HealthTransparency")
			P.HealthGradient.Enabled = S.HealthGradient == true
			if P.HealthGradient.Enabled then
				local Low, Mid, High = S.HealthLow or Rgb(240, 84, 84), S.HealthMid or Rgb(242, 188, 72), S.HealthHigh or Rgb(96, 220, 120)
				local LowTransparency, MidTransparency, HighTransparency = PreviewAlpha(S, "HealthLowTransparency"), PreviewAlpha(S, "HealthMidTransparency"), PreviewAlpha(S, "HealthHighTransparency")
				P.HealthGradient.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, High), ColorSequenceKeypoint.new(0.5, Mid), ColorSequenceKeypoint.new(1, Low) })
				P.HealthGradient.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, HighTransparency), NumberSequenceKeypoint.new(0.5, MidTransparency), NumberSequenceKeypoint.new(1, LowTransparency) })
				HealthColor = Health < 0.5 and Low:Lerp(Mid, Health * 2) or Mid:Lerp(High, Health * 2 - 1)
				HealthTransparency = Health < 0.5 and LowTransparency + (MidTransparency - LowTransparency) * Health * 2 or MidTransparency + (HighTransparency - MidTransparency) * (Health * 2 - 1)
			end
			P.HealthBack.Visible = S.HealthBar == true
			P.HealthBack.Size = UDim2.new(0, PreviewNumber(S, "HealthWidth", 4, 1, 20), 1, 0)
			P.HealthFill.Size = UDim2.fromScale(1, Health)
			P.HealthFill.BackgroundColor3 = P.HealthGradient.Enabled and PreviewWhite or HealthColor
			P.HealthFill.BackgroundTransparency = P.HealthGradient.Enabled and 0 or HealthTransparency
			P.HealthText.Visible = P.HealthBack.Visible and S.HealthText == true
			P.HealthText.Text = tostring(math.floor(Health * 100 + 0.5))
			P.HealthText.Position = UDim2.new(0, -PreviewNumber(S, "HealthWidth", 4, 1, 20) - 6, 1 - Health, 0)
			P.ArmorBack.Visible = S.Armor == true
			P.ArmorBack.Size = UDim2.new(0, PreviewNumber(S, "ArmorWidth", 4, 1, 20), 1, 0)
			P.ArmorFill.Size = UDim2.fromScale(1, PreviewNumber(S, "ArmorValue", 0.65, 0, 1))
			P.ArmorFill.BackgroundColor3 = S.ArmorColor or Rgb(90, 150, 255)
			P.ArmorFill.BackgroundTransparency = PreviewAlpha(S, "ArmorTransparency")
			P.AmmoBack.Visible = S.AmmoBar == true
			P.AmmoBack.Size = UDim2.new(1, 0, 0, PreviewNumber(S, "AmmoBarHeight", 4, 1, 20))
			local Capacity = PreviewNumber(S, "AmmoCapacity", 30, 1, 1000)
			local Ammo = PreviewNumber(S, "Ammo", 18, 0, Capacity)
			P.AmmoFill.Size = UDim2.fromScale(Ammo / Capacity, 1)
			P.AmmoFill.BackgroundColor3 = S.AmmoColor or PreviewWhite
			P.AmmoFill.BackgroundTransparency = PreviewAlpha(S, "AmmoTransparency")
			P.AmmoText.Visible = S.AmmoText == true
			P.AmmoText.Text = tostring(math.floor(Ammo))
			P.AmmoText.Position = UDim2.new(1, S.Armor and PreviewNumber(S, "ArmorWidth", 4, 1, 20) + 8 or 4, 1, 0)

			P.Name.Visible = S.Name == true
			P.Name.Text = S.NameText or (LocalPlayer and LocalPlayer.DisplayName or "Player")
			P.Distance.Visible = S.Distance == true
			P.Distance.Text = S.DistanceText or "24st"
			P.Weapon.Visible = S.Weapon == true
			P.Weapon.Text = S.WeaponName or ""
			P.Flags.Visible = S.Flags == true and tostring(S.FlagsText or "") ~= ""
			P.Flags.Text = S.FlagsText or ""
			P.Flags.Position = UDim2.new(1, S.Armor and PreviewNumber(S, "ArmorWidth", 4, 1, 20) + 8 or 4, 0, 0)
			P.Icon.Visible = S.Icon == true and tostring(S.IconImage or "") ~= ""
			local Image = tostring(S.IconImage or "")
			P.Icon.Image = Image:match("^%d+$") and "rbxassetid://" .. Image or Image
			P.Icon.ImageColor3 = S.IconColor or PreviewWhite
			P.Icon.ImageTransparency = PreviewAlpha(S, "IconTransparency")
			P.Icon.Size = UDim2.new(1, 10, 0, PreviewNumber(S, "IconSize", 20, 1, 100))
			P.Head.BackgroundColor3 = S.HeadDotColor or PreviewWhite
			P.Head.BackgroundTransparency = PreviewAlpha(S, "HeadDotTransparency")
			local HeadSize = PreviewNumber(S, "HeadDotSize", 5, 1, 50)
			P.Head.Size = UDim2.fromOffset(HeadSize, HeadSize)

			local TextSize = PreviewNumber(S, "TextSize", 11, 6, 40)
			local TextHeight = TextSize + 4
			local Bottom = P.AmmoBack.Visible and PreviewNumber(S, "AmmoBarHeight", 4, 1, 20) + 5 or 3
			P.Distance.Position = UDim2.new(0.5, 0, 1, Bottom)
			if P.Distance.Visible then Bottom += TextHeight end
			P.Weapon.Position = UDim2.new(0.5, 0, 1, Bottom)
			if P.Weapon.Visible then Bottom += TextHeight end
			P.Icon.Position = UDim2.new(0.5, 0, 1, Bottom)
			local TextFont = Fonts:ESPFace(S.Font or "Pixel")
			for _, Entry in self.Labels do
				local Label, Key = Entry[1], Entry[2]
				Label.FontFace = TextFont
				Label.TextSize = TextSize
				Label.Size = UDim2.fromOffset(160, Key == "Flags" and TextHeight * (select(2, Label.Text:gsub("\n", "")) + 1) or TextHeight)
				Label.TextColor3 = Key == "HealthText" and S.HealthTextColorMode ~= "Custom" and HealthColor or S[Key .. "Color"] or PreviewWhite
				Label.TextTransparency = Key == "HealthText" and S.HealthTextColorMode ~= "Custom" and HealthTransparency or PreviewAlpha(S, Key .. "Transparency")
				Label.TextStrokeColor3 = S.TextOutlineColor or PreviewBlack
				Label.TextStrokeTransparency = S.TextOutline == true and 1 - (1 - PreviewAlpha(S, "TextOutlineTransparency")) * (1 - Label.TextTransparency) or 1
			end
			for Index, Line in P.SkeletonLines do
				Line.BackgroundColor3 = S.SkeletonColor or PreviewWhite
				Line.BackgroundTransparency = PreviewAlpha(S, "SkeletonTransparency")
				P.SkeletonOutlines[Index].BackgroundColor3 = S.SkeletonOutlineColor or PreviewBlack
				P.SkeletonOutlines[Index].BackgroundTransparency = PreviewAlpha(S, "SkeletonOutlineTransparency")
			end

			local FillOpacity = (1 - PreviewAlpha(S, "ChamsTransparency")) * PreviewNumber(S, "ChamsOpacity", 0.35, 0, 1)
			local OutlineOpacity = 1 - PreviewAlpha(S, "ChamsOutlineTransparency")
			P.ChamsViewport.Visible = S.Chams == true and FillOpacity > 0 and self.ChamsModel ~= nil
			P.ChamsOutlineViewport.Visible = S.Chams == true and OutlineOpacity > 0 and self.ChamsOutlineModel ~= nil
			for _, Entry in self.ChamsParts or {} do
				Entry[1].Color = S.ChamsColor or Theme.Accent
				Entry[1].Transparency = 1 - (1 - Entry[2]) * FillOpacity
			end
			for _, Entry in self.ChamsOutlineParts or {} do
				Entry[1].Color = S.ChamsOutlineColor or PreviewBlack
				Entry[1].Transparency = 1 - (1 - Entry[2]) * OutlineOpacity
			end
			self:Render()
		end

		function Preview:Render()
			local S, P = self.State, self.Parts
			local Size, Camera = P.Stage.AbsoluteSize, P.Camera
			P.Overlay.Visible = false
			P.Head.Visible = false
			for Index, Line in P.SkeletonLines do Line.Visible, P.SkeletonOutlines[Index].Visible = false, false end
			if not self.ModelCenter or not self.ModelSize or not self.ModelParts or #self.ModelParts == 0 or Size.X < 1 or Size.Y < 1 then return end
			local Width = math.sqrt(self.ModelSize.X * self.ModelSize.X + self.ModelSize.Z * self.ModelSize.Z)
			local Distance = math.max(self.ModelSize.Y, Width * Size.Y / Size.X) / (2 * math.tan(math.rad(Camera.FieldOfView * 0.5))) * PREVIEW_ZOOM
			local Center = self.ModelCenter
			Camera.CFrame = CFrame.new(Center + Vector3.new(math.sin(self.Angle) * Distance, 0, math.cos(self.Angle) * Distance), Center)
			local Low, High = Vector2.new(math.huge, math.huge), Vector2.new(-math.huge, -math.huge)
			for _, Part in self.ModelParts or {} do
				if not Part.Parent then continue end
				for X = -1, 1, 2 do for Y = -1, 1, 2 do for Z = -1, 1, 2 do
					local Point = PreviewProject(Camera, Size, Part.CFrame * Vector3.new(Part.Size.X * X * 0.5, Part.Size.Y * Y * 0.5, Part.Size.Z * Z * 0.5))
					if Point then
						Low = Vector2.new(math.min(Low.X, Point.X), math.min(Low.Y, Point.Y))
						High = Vector2.new(math.max(High.X, Point.X), math.max(High.Y, Point.Y))
					end
				end end end
			end
			if Low.X == math.huge then return end
			local X, Y = math.floor(Low.X), math.floor(Low.Y)
			local BoxWidth, BoxHeight = math.max(2, math.ceil(High.X) - X), math.max(2, math.ceil(High.Y) - Y)
			P.Box.Position, P.Box.Size = UDim2.fromOffset(X, Y), UDim2.fromOffset(BoxWidth, BoxHeight)
			P.Overlay.Visible = true
			local Ratio = PreviewNumber(S, "CornerLength", 0.25, 0.1, 0.5)
			local A, B = BoxWidth * Ratio, BoxHeight * Ratio
			local Segments = {
				{ 0, 0, A, 0 }, { 0, 0, 0, B }, { BoxWidth - A, 0, BoxWidth, 0 }, { BoxWidth, 0, BoxWidth, B },
				{ 0, BoxHeight, A, BoxHeight }, { 0, BoxHeight - B, 0, BoxHeight }, { BoxWidth - A, BoxHeight, BoxWidth, BoxHeight }, { BoxWidth, BoxHeight - B, BoxWidth, BoxHeight },
			}
			for Index, Segment in Segments do
				local First, Last = Vector2.new(Segment[1], Segment[2]), Vector2.new(Segment[3], Segment[4])
				local Line, Outline = P.Corners[Index], P.CornerOutlines[Index]
				PreviewLine(Line, First, Last, PreviewNumber(S, "BoxThickness", 1, 1, 10))
				PreviewLine(Outline, First, Last, PreviewNumber(S, "BoxOutlineThickness", 3, 1, 12))
				Line.Visible = S.Box == true and S.BoxStyle == "Corner"
				Outline.Visible = Line.Visible and S.BoxOutline == true
				P.CornerGradients[Index].Rotation = (S.BoxGradientRotation or 0) - Line.Rotation
			end
			if S.HeadDot == true and self.Head and self.Head.Parent then
				local Point = PreviewProject(Camera, Size, self.Head.Position)
				if Point then P.Head.Position, P.Head.Visible = UDim2.fromOffset(Point.X, Point.Y), true end
			end
			if S.Skeleton ~= true then return end
			for Index, Pair in self.Bones or {} do
				if not Pair[1].Parent or not Pair[2].Parent then continue end
				local First, Last = PreviewProject(Camera, Size, Pair[1].Position), PreviewProject(Camera, Size, Pair[2].Position)
				if First and Last then
					PreviewLine(P.SkeletonLines[Index], First, Last, PreviewNumber(S, "SkeletonThickness", 1, 1, 10))
					if S.SkeletonOutline == true then PreviewLine(P.SkeletonOutlines[Index], First, Last, PreviewNumber(S, "SkeletonOutlineThickness", 3, 1, 12)) end
				end
			end
		end

		function Preview:SetVisible(Visible) self.Visible = Visible end
	end

	do
		local Loader = {}
		Loader.__index = Loader
		Library.Classes.Loader = Loader

		local LoaderStatusColors = { Undetected = Rgb(96, 220, 120), Updating = Rgb(242, 188, 72), Detected = Rgb(240, 84, 84) }

		local function Spinner(Parent, Size)
			local Holder = Create("Frame", { Size = UDim2.fromOffset(Size, Size), BackgroundTransparency = 1, Parent = Parent })
			local TrackFrame = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, Parent = Holder })
			Corner(TrackFrame, Size)
			Create("UIStroke", { Thickness = 3, Transparency = 0.6, Theme = { Color = "Outline" }, Parent = TrackFrame })
			local Ring = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, Parent = Holder })
			Corner(Ring, Size)
			local RingStroke = Create("UIStroke", { Thickness = 3, Theme = { Color = "Accent" }, Parent = Ring })
			local Gradient = Create("UIGradient", { Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 0), NumberSequenceKeypoint.new(0.6, 0.2), NumberSequenceKeypoint.new(0.75, 1), NumberSequenceKeypoint.new(1, 1) }), Parent = RingStroke })
			local Connection = RunService.RenderStepped:Connect(function(Delta)
				Gradient.Rotation = (Gradient.Rotation + Delta * 360) % 360
			end)
			Holder.Destroying:Connect(function() Connection:Disconnect() end)
			return Holder
		end

		function Library:CreateLoader(Config)
			Config = Config or {}
			local Self = setmetatable({ Games = {}, Selected = nil, Done = false, Callback = Config.Callback }, Loader)
			local Frame = Create("CanvasGroup", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromOffset(540, 330), Theme = { BackgroundColor3 = "Background" }, GroupTransparency = 1, Parent = Library.MenuGui })
			Corner(Frame, 10)
			local Scale = Create("UIScale", { Scale = 0.94, Parent = Frame })
			local Outline = Create("Frame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, ZIndex = 50, Parent = Frame })
			Corner(Outline, 10)
			Stroke(Outline, "Outline")

			local Side = Create("Frame", { Size = UDim2.new(0, 176, 1, 0), Theme = { BackgroundColor3 = "Inline" }, Parent = Frame })
			Create("Frame", { Position = UDim2.new(1, 0, 0, 0), Size = UDim2.new(0, 1, 1, 0), Theme = { BackgroundColor3 = "Outline" }, Parent = Side })
			local Logo = Library:Logo(Side, 26)
			Logo.Position = UDim2.fromOffset(18, 20)
			Create("TextLabel", { Position = UDim2.fromOffset(54, 18), Size = UDim2.new(1, -60, 0, 20), Text = Config.Title or "Swift", TextSize = 18, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Side })
			Create("TextLabel", { Position = UDim2.fromOffset(54, 37), Size = UDim2.new(1, -60, 0, 13), Text = Config.Version or ("v" .. Library.Version), NoCase = true, TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Inactive Text" }, Parent = Side })
			Create("TextLabel", { Position = UDim2.fromOffset(18, 76), Size = UDim2.new(1, -36, 0, 120), Text = Config.Description or "Pick a game on the right and press Launch. Your settings and configs load automatically.", TextWrapped = true, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, TextYAlignment = Enum.TextYAlignment.Top, Theme = { TextColor3 = "Inactive Text" }, Parent = Side })
			local UserCard = Create("Frame", { Position = UDim2.new(0, 12, 1, -62), Size = UDim2.new(1, -24, 0, 50), Theme = { BackgroundColor3 = "Tab" }, Parent = Side })
			Corner(UserCard, 6)
			Stroke(UserCard, "Outline")
			local Avatar = Create("ImageLabel", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 8, 0.5, 0), Size = UDim2.fromOffset(32, 32), Theme = { BackgroundColor3 = "Element" }, BackgroundTransparency = 0, Parent = UserCard })
			Corner(Avatar, 16)
			local UserName = Create("TextLabel", { Position = UDim2.fromOffset(48, 9), Size = UDim2.new(1, -54, 0, 15), Text = LocalPlayer and LocalPlayer.DisplayName or "User", NoCase = true, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Text" }, Parent = UserCard })
			Library:SetPlayerText(UserName, LocalPlayer, LocalPlayer and LocalPlayer.DisplayName or "User")
			Library:SetPlayerAvatar(Avatar, LocalPlayer, "")
			Create("TextLabel", { Position = UDim2.fromOffset(60, 25), Size = UDim2.new(1, -66, 0, 14), Text = "Online", TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, TextColor3 = LoaderStatusColors.Undetected, Parent = UserCard })
			local Dot = Create("Frame", { Position = UDim2.fromOffset(48, 29), Size = UDim2.fromOffset(7, 7), BackgroundColor3 = LoaderStatusColors.Undetected, Parent = UserCard })
			Corner(Dot, 4)
			local AvatarRequest = {}
			Self.AvatarRequest = AvatarRequest
			if LocalPlayer then task.spawn(function()
				if Library.Unloaded or Self.AvatarRequest ~= AvatarRequest then return end
				local Ok, Image = pcall(Players.GetUserThumbnailAsync, Players, LocalPlayer.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size48x48)
				if Ok and not Library.Unloaded and Avatar.Parent and Self.AvatarRequest == AvatarRequest then Library:SetPlayerAvatar(Avatar, LocalPlayer, Image) end
			end) end

			local Picker = Create("CanvasGroup", { Position = UDim2.fromOffset(177, 0), Size = UDim2.new(1, -177, 1, 0), BackgroundTransparency = 1, Parent = Frame })
			Create("TextLabel", { Position = UDim2.fromOffset(18, 16), Size = UDim2.new(1, -36, 0, 18), Text = "Select a game", TextSize = 15, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Text" }, Parent = Picker })
			local Subtitle = Create("TextLabel", { Position = UDim2.fromOffset(18, 35), Size = UDim2.new(1, -36, 0, 14), Text = "", TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Inactive Text" }, Parent = Picker })
			local List = Create("ScrollingFrame", { Position = UDim2.fromOffset(14, 58), Size = UDim2.new(1, -24, 1, -112), ScrollBarThickness = 2, Theme = { ScrollBarImageColor3 = "Accent" }, Parent = Picker })
			ListLayout(List, 6)
			Padding(List, 1, 1, 1, 6)
			local LaunchButton = Create("TextButton", { Position = UDim2.new(0, 14, 1, -44), Size = UDim2.new(1, -28, 0, 30), Theme = { BackgroundColor3 = "Element" }, Parent = Picker })
			Corner(LaunchButton, 6)
			Shade(LaunchButton)
			local LaunchStroke = Stroke(LaunchButton, "Outline")
			local LaunchText = Create("TextLabel", { Size = UDim2.fromScale(1, 1), Text = "Select a game", Theme = { TextColor3 = "Inactive Text" }, Parent = LaunchButton })

			local Loading = Create("CanvasGroup", { Position = UDim2.fromOffset(177, 0), Size = UDim2.new(1, -177, 1, 0), BackgroundTransparency = 1, GroupTransparency = 1, Visible = false, Parent = Frame })
			local SpinnerHolder = Spinner(Loading, 44)
			SpinnerHolder.AnchorPoint = Vector2.new(0.5, 0)
			SpinnerHolder.Position = UDim2.new(0.5, 0, 0, 58)
			local LoadingTitle = Create("TextLabel", { Position = UDim2.fromOffset(0, 116), Size = UDim2.new(1, 0, 0, 18), Text = "Launching", TextSize = 15, Theme = { TextColor3 = "Text" }, Parent = Loading })
			local Steps = Create("Frame", { AnchorPoint = Vector2.new(0.5, 0), Position = UDim2.new(0.5, 0, 0, 148), Size = UDim2.fromOffset(200, 80), BackgroundTransparency = 1, Parent = Loading })
			ListLayout(Steps, 6)
			local Progress = Create("Frame", { AnchorPoint = Vector2.new(0.5, 1), Position = UDim2.new(0.5, 0, 1, -26), Size = UDim2.new(1, -60, 0, 6), Theme = { BackgroundColor3 = "Element" }, Parent = Loading })
			Corner(Progress, 3)
			Stroke(Progress, "Outline")
			local ProgressFill = Create("Frame", { Size = UDim2.fromScale(0, 1), Theme = { BackgroundColor3 = "Accent" }, Parent = Progress })
			Corner(ProgressFill, 3)

			Self.Parts = { Frame = Frame, Scale = Scale, Picker = Picker, List = List, Subtitle = Subtitle, LaunchButton = LaunchButton, LaunchStroke = LaunchStroke, LaunchText = LaunchText, Loading = Loading, LoadingTitle = LoadingTitle, Steps = Steps, ProgressFill = ProgressFill }

			Connect(LaunchButton.MouseEnter, function() if Self.Selected then ThemeTween(LaunchButton, "BackgroundColor3", "Hovered Element", 0.15) end end)
			Connect(LaunchButton.MouseLeave, function() ThemeTween(LaunchButton, "BackgroundColor3", "Element", 0.15) end)
			Connect(LaunchButton.MouseButton1Click, function() Self:Load() end)

			Tween(Frame, { GroupTransparency = 0 }, 0.35)
			Tween(Scale, { Scale = 1 }, 0.35, Enum.EasingStyle.Back)
			for _, Game in Config.Games or {} do Self:AddGame(Game) end
			Self:_UpdateSubtitle()
			return Self
		end

		function Loader:_UpdateSubtitle()
			self.Parts.Subtitle.Text = #self.Games .. (#self.Games == 1 and " game available" or " games available")
		end

		function Loader:AddGame(Config)
			Config = Config or {}
			local Row = Create("TextButton", { Size = UDim2.new(1, 0, 0, 54), Theme = { BackgroundColor3 = "Tab" }, LayoutOrder = #self.Games + 1, Parent = self.Parts.List })
			Corner(Row, 6)
			local RowStroke = Stroke(Row, "Outline")
			local Icon = Create("ImageLabel", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 9, 0.5, 0), Size = UDim2.fromOffset(36, 36), ScaleType = Enum.ScaleType.Crop, Theme = { BackgroundColor3 = "Element" }, BackgroundTransparency = 0, Parent = Row })
			Corner(Icon, 6)
			if Config.PlaceId then
				Icon.Image = "rbxthumb://type=GameIcon&id=" .. Config.PlaceId .. "&w=150&h=150"
			elseif Config.Icon then
				local Glyph = Create("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5), Size = UDim2.fromOffset(20, 20), Theme = { ImageColor3 = "Accent" }, Parent = Icon })
				SetIcon(Glyph, Config.Icon)
			end
			Create("TextLabel", { Position = UDim2.fromOffset(55, 10), Size = UDim2.new(1, -150, 0, 16), Text = Config.Name or Config.Text or "Game", NoCase = true, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Text" }, Parent = Row })
			Create("TextLabel", { Position = UDim2.fromOffset(55, 28), Size = UDim2.new(1, -150, 0, 14), Text = Config.Description or "", NoCase = true, TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, Theme = { TextColor3 = "Inactive Text" }, Parent = Row })
			local Status = Config.Status or "Undetected"
			local Color = LoaderStatusColors[Status] or Theme.Accent
			local Pill = Create("Frame", { AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -10, 0.5, 0), Size = UDim2.fromOffset(0, 20), AutomaticSize = Enum.AutomaticSize.X, Theme = { BackgroundColor3 = "Element" }, Parent = Row })
			Corner(Pill, 10)
			Padding(Pill, 0, 0, 8, 8)
			ListLayout(Pill, 5, Enum.FillDirection.Horizontal, Enum.HorizontalAlignment.Left, Enum.VerticalAlignment.Center)
			local PillDot = Create("Frame", { Size = UDim2.fromOffset(6, 6), BackgroundColor3 = Color, Parent = Pill })
			Corner(PillDot, 3)
			Create("TextLabel", { Size = UDim2.fromOffset(0, 20), AutomaticSize = Enum.AutomaticSize.X, Text = Status, TextSize = 10, TextColor3 = Color, LayoutOrder = 2, Parent = Pill })
			local Game = { Config = Config, Row = Row, Stroke = RowStroke }
			Connect(Row.MouseEnter, function() if self.Selected ~= Game then ThemeTween(Row, "BackgroundColor3", "Hovered Element", 0.15) end end)
			Connect(Row.MouseLeave, function() if self.Selected ~= Game then ThemeTween(Row, "BackgroundColor3", "Tab", 0.15) end end)
			Connect(Row.MouseButton1Click, function() self:Select(Game) end)
			table.insert(self.Games, Game)
			self:_UpdateSubtitle()
			if Config.PlaceId and Config.PlaceId == game.PlaceId and not self.Selected then self:Select(Game) end
			return Game
		end
		Loader.CreateGame = Loader.AddGame

		function Loader:Select(Game)
			if self.Loading then return end
			if self.Selected then
				ThemeTween(self.Selected.Row, "BackgroundColor3", "Tab", 0.15)
				ThemeTween(self.Selected.Stroke, "Color", "Outline", 0.15)
			end
			self.Selected = Game
			ThemeTween(Game.Row, "BackgroundColor3", "Hovered Element", 0.15)
			ThemeTween(Game.Stroke, "Color", "Accent", 0.15)
			Library:SetText(self.Parts.LaunchText, "Launch " .. (Game.Config.Name or Game.Config.Text or "game"))
			ThemeTween(self.Parts.LaunchText, "TextColor3", "Accent", 0.15)
			ThemeTween(self.Parts.LaunchStroke, "Color", "Accent", 0.15)
		end

		function Loader:Load()
			if self.Loading or not self.Selected then return end
			self.Loading = true
			local Parts = self.Parts
			Library:SetText(Parts.LoadingTitle, "Launching " .. (self.Selected.Config.Name or "game"))
			Tween(Parts.Picker, { GroupTransparency = 1 }, 0.2)
			Parts.Loading.Visible = true
			Tween(Parts.Loading, { GroupTransparency = 0 }, 0.25)
			local StepNames = self.Selected.Config.Steps or { "Authenticating", "Downloading script", "Building interface" }
			local Rows = {}
			for Index, Name in StepNames do
				local Row = Create("Frame", { Size = UDim2.new(1, 0, 0, 16), BackgroundTransparency = 1, LayoutOrder = Index, Parent = Parts.Steps })
				local Mark = Create("ImageLabel", { AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 0, 0.5, 0), Size = UDim2.fromOffset(11, 11), ImageTransparency = 1, Theme = { ImageColor3 = "Accent" }, Parent = Row })
				SetIcon(Mark, "Check")
				local Label = Create("TextLabel", { Position = UDim2.fromOffset(18, 0), Size = UDim2.new(1, -18, 1, 0), Text = Name, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, Theme = { TextColor3 = "Inactive Text" }, Parent = Row })
				Rows[Index] = { Mark = Mark, Label = Label }
			end
			task.spawn(function()
				for Index, Row in Rows do
					ThemeTween(Row.Label, "TextColor3", "Text", 0.2)
					Tween(Parts.ProgressFill, { Size = UDim2.fromScale(Index / #Rows, 1) }, 0.55, Enum.EasingStyle.Quad)
					task.wait(0.6)
					Tween(Row.Mark, { ImageTransparency = 0 }, 0.2)
					ThemeTween(Row.Label, "TextColor3", "Inactive Text", 0.2)
				end
				task.wait(0.25)
				Tween(Parts.Scale, { Scale = 0.96 }, 0.25)
				Tween(Parts.Frame, { GroupTransparency = 1 }, 0.25).Completed:Wait()
				Parts.Frame:Destroy()
				self.Done = true
				SafeCall(self.Selected.Config.Callback)
				SafeCall(self.Callback, self.Selected.Config)
			end)
		end

		function Loader:Wait()
			repeat task.wait() until self.Done
			return self.Selected and self.Selected.Config
		end
	end

	do
		function Library:SetScale(Scale)
			for _, Gui in { Library.MenuGui, Library.OverlayGui, Library.HudGui } do
				local Object = Gui:FindFirstChildOfClass("UIScale") or Instance.new("UIScale")
				Object.Scale = Scale
				Object.Parent = Gui
			end
		end

		Library.CreateMenu = Library.CreateWindow
	end
end

local SwiftRuntime = {Mode = "Actor"}
local Hooks = {}
local Functions = {Combat = {}, Character = {}, Visuals = {}, Cosmetics = {}}
local State = {Library = Library, Flags = Library.Flags, Runtime = SwiftRuntime, Alive = true, Controllers = {}, Errors = {}, PlayerSettings = {}}
State.Functions, State.Hooks = Functions, Hooks

function Functions.Initialize()
    if SwiftRuntime.Mode ~= "Actor" or type(SwiftRuntime.API) ~= "string" or type(SwiftRuntime.Actor) ~= "string" then
        return false, "run the complete Actor launcher"
    end

do
    local Environment = type(getgenv) == "function" and getgenv() or _G
    local Globals = getfenv()
    local Names = {"filtergc", "getgc", "getloadedmodules", "getupvalues", "getconstants", "hookfunction", "restorefunction",
        "newcclosure", "cloneref", "gethui", "protectgui", "getthreadidentity", "setthreadidentity", "mousemoverel", "setclipboard"}
    local Executor = {Environment = Environment, APIs = {}}
    for _, Name in Names do
        local Value = Environment[Name] or Globals[Name]
        if type(Value) == "function" then Executor.APIs[Name] = Value end
    end
    Functions.Environment = {}
    function Functions.Environment.Get(Name) return Executor.APIs[Name] or Environment[Name] or Globals[Name] end
    State.Executor = Executor
    State.Services = {}
    for _, Name in {"Players", "Workspace", "ReplicatedStorage", "RunService", "UserInputService", "Lighting", "Debris",
        "HttpService", "TextChatService", "TweenService", "GuiService", "VirtualUser", "Stats", "CoreGui"} do
        local Service = game:GetService(Name)
        State.Services[Name] = Executor.APIs.cloneref and Executor.APIs.cloneref(Service) or Service
    end
    State.LocalPlayer = State.Services.Players.LocalPlayer
    if not State.LocalPlayer then return false, "join the game before running the script" end
    State.Shared = State.Services.ReplicatedStorage:WaitForChild("Shared", 8)
    State.GameClient = State.Services.ReplicatedStorage:WaitForChild("GameClient", 8)
    State.GameStats = State.Services.ReplicatedStorage:FindFirstChild("GameStats")
    State.Characters = State.Services.Workspace:FindFirstChild("Characters")

end

if State.Executor.Environment.Swift2 and type(State.Executor.Environment.Swift2.Destroy) == "function" then State.Executor.Environment.Swift2.Destroy() end

do
    local API = State.Executor.APIs
    State.Connections, State.Instances, State.Order, State.Styles = {}, {}, {}, {}
    Functions.Utility = {}
    function Functions.Utility.Identity(Callback, Identity, ...)
        local Previous
        if API.getthreadidentity then
            local Okay, Value = pcall(API.getthreadidentity)
            if Okay and type(Value) == "number" then Previous = Value
            else State.Errors.Identity = "thread identity unavailable" end
        end
        local Changed = false
        if API.setthreadidentity and Previous ~= nil then
            local Okay, Reason = pcall(API.setthreadidentity, Identity or 8)
            Changed = Okay
            if not Okay then State.Errors.Identity = tostring(Reason) end
        end
        local Results = table.pack(pcall(Callback, ...))
        if Changed then
            local Okay, Reason = pcall(API.setthreadidentity, Previous)
            if not Okay then State.Errors.Identity = tostring(Reason) end
        end
        return table.unpack(Results, 1, Results.n)
    end
    Functions.Utility.WithIdentity = Functions.Utility.Identity
    function Functions.Utility.Connect(Signal, Callback)
        if not Signal or type(Signal.Connect) ~= "function" then return nil end
        local Connection = Signal:Connect(function(...)
            if not State.Alive then return end
            local Okay, Reason = Functions.Utility.Identity(Callback, 8, ...)
            if not Okay then warn("Swift 2: " .. tostring(Reason)) end
        end)
        table.insert(State.Connections, Connection)
        return Connection
    end
    function Functions.Utility.Own(Object)
        if Object then table.insert(State.Instances, Object) end
        return Object
    end
    function Functions.Utility.Notify(Text, Kind)
        if State.Alive then
            Functions.Utility.Identity(function() State.Library:Notify({Text = Text, Type = Kind or "Info", Duration = 4}) end, 8)
        end
    end
    function Functions.Utility.Register(Name, Controller, Style)
        if not Controller then return end
        State.Controllers[Name] = Controller
        State.Styles[Name] = Style or "Dot"
        table.insert(State.Order, Name)
        return Controller
    end
    function Functions.Utility.Destroy()
        if not State.Alive then return end
        State.Alive = false
        for Index = #State.Order, 1, -1 do
            local Controller = State.Controllers[State.Order[Index]]
            if Controller and type(Controller.Destroy) == "function" then pcall(Controller.Destroy, Controller) end
        end
        for _, Connection in State.Connections do pcall(function() Connection:Disconnect() end) end
        if Functions.Hooks then Functions.Hooks.Clear() end
        for Index = #State.Instances, 1, -1 do pcall(function() State.Instances[Index]:Destroy() end) end
        table.clear(State.Connections)
        table.clear(State.Instances)
        table.clear(State.Controllers)
        if State.Executor.Environment.Swift2 == State then State.Executor.Environment.Swift2 = nil end
    end

end

State.Executor.Environment.Swift2 = State

if not State.Executor.APIs.hookfunction then return false, "executor hookfunction is unavailable" end

if not State.Executor.APIs.newcclosure then return false, "executor newcclosure is unavailable" end

State.Flags = State.Library.Flags
State.Library:OnUnload(Functions.Utility.Destroy)
function State.Destroy()
    if not State.Alive then return end
    State.Library:Unload()
    Functions.Utility.Destroy()
end

do
    local API = State.Executor.APIs
    local Order = {}
    Functions.Hooks = {}
    function Functions.Hooks.Add(Name, Target, Callback)
        if Hooks[Name] and Hooks[Name].Target == Target then return Hooks[Name].Original end
        if Hooks[Name] then Functions.Hooks.Remove(Name) end
        if type(API.hookfunction) ~= "function" or type(Target) ~= "function" then
            State.Errors[Name] = "hook target or executor API unavailable"
            return nil
        end
        local Entry = {Target = Target, Active = true}
        local Replacement = function(...)
            if not State.Alive or not Entry.Active then return Entry.Original(...) end
            local Called, InOriginal, Results = false, false, nil
            local function Invoke(...)
                Called, InOriginal = true, true
                Results = table.pack(Entry.Original(...))
                InOriginal = false
                return table.unpack(Results, 1, Results.n)
            end
            local Output = table.pack(pcall(Callback, Invoke, ...))
            if Output[1] then return table.unpack(Output, 2, Output.n) end
            if InOriginal then State.Errors[Name] = tostring(Output[2]); return nil end
            Entry.Active = false
            State.Errors[Name] = tostring(Output[2])
            warn("Swift 2 " .. Name .. ": " .. tostring(Output[2]))
            if Called then return table.unpack(Results, 1, Results.n) end
            return Entry.Original(...)
        end
        local Okay, Original = pcall(API.hookfunction, Target, Replacement)
        if not Okay or type(Original) ~= "function" then
            Entry.Active = false
            State.Errors[Name] = tostring(Original)
            return nil
        end
        Entry.Original, Entry.Replacement = Original, Replacement
        Hooks[Name] = Entry
        table.insert(Order, Name)
        return Original
    end
    function Functions.Hooks.Remove(Name)
        local Entry = Hooks[Name]
        if not Entry then return end
        Entry.Active = false
        if API.restorefunction then
            local Okay, Result = pcall(API.restorefunction, Entry.Target)
            if not Okay or Result == false then State.Errors[Name] = "hook restoration failed: " .. tostring(Result); Entry.RestoreFailed = true end
        else
            Entry.RestoreFailed = true
            State.Errors[Name] = "restorefunction unavailable; hook disabled"
        end
        Hooks[Name] = nil
    end
    function Functions.Hooks.Clear()
        for Index = #Order, 1, -1 do Functions.Hooks.Remove(Order[Index]) end
        table.clear(Order)
    end
    function Functions.Hooks.Status(Name) return Hooks[Name] end
    if API.hookfunction and API.newcclosure then
        local Entry = {Target = bit32.bor, Active = true}
        local Okay, Original = pcall(function()
            local hookfunction, newcclosure = API.hookfunction, API.newcclosure
            local _Bor; _Bor = hookfunction(bit32.bor, newcclosure(function(...)
                local CallerSource: string = debug.info(3, "s")
                if State.Alive and Entry.Active and (CallerSource and CallerSource:find("Tattle")) then
                    return 0
                end
                return _Bor(...)
            end))
            return _Bor
        end)
        if Okay and type(Original) == "function" then
            Entry.Original = Original
            Hooks.Bor = Entry
            table.insert(Order, "Bor")
        else
            Entry.Active = false
            State.Errors.Bor = tostring(Original)
        end
    end

end

if not Hooks.Bor then return false, "required Bor hook could not be installed: " .. tostring(State.Errors.Bor) end

do
    local Directions = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}}
    Functions.Angles = {}
    function Functions.Angles.Encode(Yaw, Pitch)
        return math.floor(((Yaw + math.pi) % (2 * math.pi)) * 65535 / (2 * math.pi)),
            math.floor((math.clamp(Pitch, -1.55334, 1.55334) + 1.55334) * 65535 / 3.10668)
    end
    function Functions.Angles.Decode(Yaw, Pitch)
        return -math.pi + Yaw * (2 * math.pi) / 65535, -1.55334 + Pitch * 3.10668 / 65535
    end
    function Functions.Angles.Direction(Yaw, Pitch)
        return CFrame.fromEulerAnglesYXZ(-Pitch, Yaw, 0).LookVector
    end
    function Functions.Angles.LookAt(Origin, Position)
        if (Position - Origin).Magnitude <= 0.000001 then return nil end
        local Pitch, Yaw = CFrame.lookAt(Origin, Position):ToOrientation()
        return Yaw, -Pitch
    end
    function Functions.Angles.RotateInputs(Inputs, From, To)
        local Forward = (Inputs.Forward and 1 or 0) - (Inputs.Backward and 1 or 0)
        local Right = (Inputs.Right and 1 or 0) - (Inputs.Left and 1 or 0)
        local Delta, Result = To - From, table.clone(Inputs)
        local X, Y = Forward * math.cos(Delta) - Right * math.sin(Delta), Forward * math.sin(Delta) + Right * math.cos(Delta)
        Result.Forward, Result.Backward, Result.Left, Result.Right = false, false, false, false
        if X == 0 and Y == 0 then return Result end
        local Best, Choice = -math.huge, nil
        for _, Direction in Directions do
            local Dot = (X * Direction[1] + Y * Direction[2]) / math.sqrt(Direction[1] ^ 2 + Direction[2] ^ 2)
            if Dot > Best then Best, Choice = Dot, Direction end
        end
        Result.Forward, Result.Backward = Choice[1] > 0, Choice[1] < 0
        Result.Right, Result.Left = Choice[2] > 0, Choice[2] < 0
        return Result
    end

end

do
    local API, Modules = State.Executor.APIs, {}
    local Definitions = {
        Character = {Path = "GameClient.CharacterController", Keys = {"GetCharacter", "IsAlive"}, Required = true},
        Entities = {Path = "GameClient.Entities", Keys = {"GetEntity", "GetAllCategoryEntities", "GetPlayheadTick"}, Required = true},
        Weapon = {Path = "GameClient.WeaponController", Keys = {"GetCurrentWeapon", "UpdateKeyState"}, Required = true},
        Networking = {Path = "GameClient.CharacterController.CharacterNetworking", Keys = {"ProcessPacket", "FlushPacket"}, Required = true},
        WeaponInput = {Path = "GameClient.WeaponController.WeaponInput", Keys = {"GetCommandMap"}, Required = true},
        Camera = {Path = "GameClient.CameraController", Keys = {"GetAngles", "SetAngles", "GetTarget"}, Required = true},
        PlayerCamera = {Path = "GameClient.CameraController.CameraTypes.PlayerCamera", Keys = {"Update", "RefreshRecoilConfig"}},
        WeaponEffects = {Path = "GameClient.WeaponController.WeaponEffects", Keys = {"Muzzle", "Process", "Tracer"}},
        Viewmodel = {Path = "GameClient.WeaponController.Viewmodel", Keys = {"CalculateView", "SetSkin", "SetVisible"}},
        GunWeapon = {Path = "Shared.WeaponConstructor.Types.GunWeapon", Keys = {"Fire", "TickCommand", "Reload"}, Required = true},
        Bullet = {Path = "Shared.WeaponConstructor.Bullet", Keys = {"SpreadOffset", "Knife"}, Required = true},
        Math = {Path = "Shared.Utility.Math", Keys = {"UniformRandomStream", "Approach", "DeltaAngle"}, Required = true},
        GameConfig = {Path = "Shared.GameConfiguration", Keys = {"Get", "GetEntityTiming"}, Required = true},
        WeaponManager = {Path = "Shared.Managers.WeaponManager", Keys = {"GetAllWeapons", "Get"}},
        SkinManager = {Path = "Shared.Managers.SkinManager", Keys = {"GetAllSkins", "GetWeaponSkin"}},
        CharacterModel = {Path = "Shared.CharacterModel", Keys = {"GetHitboxParts", "GetHitboxBox"}},
        Movement = {Path = "Shared.Simulation.Movement", Keys = {"AirMove", "CheckJumpButton", "WalkMove"}},
        Simulation = {Path = "Shared.Simulation", Keys = {"ProcessCommand", "BuildShotCFrame"}},
        Collision = {Path = "Shared.Simulation.Collision", Keys = {"TryPlayerMove", "StepMove"}},
        CollisionModule = {Path = "Shared.CollisionModule", Keys = {"SweepBox", "BoxSolid"}},
        SimulationConfig = {Path = "Shared.Simulation.Config", Keys = {"CFG", "ConstantsTemplate", "CollisionHeightDelta", "CollisionHeightDeltaVector", "HalfStandCollisionBox", "HalfDuckCollisionBox", "Init"},
            Types = {CFG = "table", ConstantsTemplate = "table", CollisionHeightDelta = "number", CollisionHeightDeltaVector = "Vector3", HalfStandCollisionBox = "Vector3", HalfDuckCollisionBox = "Vector3"}},
        Enums = {Path = "Shared.Enums", Keys = {"MaterialPenetrationData", "MaterialVariantPenetrationData"}},
        Legs = {Path = "Shared.LegSystem", Keys = {"UpdateClimbAnim", "EnableTransforms"}},
        Roles = {Path = "Shared.Roles", Keys = {"GetRole", "IsModerator", "GetRank"}},
        Sound = {Path = "Shared.Managers.SoundManager", Keys = {"GetWeaponSound", "PlayAudio"}},
        KillFeed = {Path = "GameClient.Gui.HUD.KillFeed", Keys = {"NewKill"}},
    }
    local Objects, Sources, Linked = nil, {}, {}
    local function Matches(Value, Definition, Name)
        if type(Value) ~= "table" then return false end
        for _, Key in Definition.Keys do
            local Member = rawget(Value, Key)
            if Member == nil then return false end
            local Kind = Definition.Types and Definition.Types[Key]
            if Kind then
                if typeof(Member) ~= Kind then return false end
            elseif Name ~= "Enums" and type(Member) ~= "function" then return false end
        end
        return true
    end
    local function Upvalues(Function)
        if not API.getupvalues or type(Function) ~= "function" then return {} end
        local Okay, Values = pcall(API.getupvalues, Function)
        return Okay and type(Values) == "table" and Values or {}
    end
    local function Signal(Value)
        return (type(Value) == "table" or typeof(Value) == "RBXScriptSignal") and type(Value.Connect) == "function"
    end
    local function Initialized(Name, Value)
        if Name == "Character" then return Signal(Value.OnCharacterSpawn) and Signal(Value.OnCharacterDestroy)
        elseif Name == "Weapon" then return Signal(Value.OnWeaponChanged) and Signal(Value.OnWeaponShoot)
        elseif Name == "Entities" then return Signal(Value.OnEntityCreated) and Signal(Value.OnEntityDestroyed)
        elseif Name == "SimulationConfig" then
            local Config = Value.CFG
            return type(Config) == "table" and type(Config.TickRate) == "number" and Config.TickRate > 0 and Config.TickRate < math.huge
                and type(Config.InterpolationDelay) == "number" and Config.InterpolationDelay >= 0 and Config.InterpolationDelay < math.huge
                and type(Config.EnableBunnyHop) == "boolean"
        elseif Name == "Camera" then
            local Okay, Yaw, Pitch = pcall(Value.GetAngles)
            return Signal(Value.CameraTargetUpdate) and Okay and type(Yaw) == "number" and type(Pitch) == "number"
                and Yaw == Yaw and Pitch == Pitch and math.abs(Yaw) < math.huge and math.abs(Pitch) < math.huge
        elseif Name == "Networking" and API.getupvalues then
            local Packed, Network, Weapon, Config = false, false, false, false
            for _, Member in Upvalues(Value.ProcessPacket) do
                if type(Member) ~= "table" then continue end
                Packed = Packed or type(rawget(Member, "PackTables")) == "function"
                Network = Network or type(rawget(Member, "Character")) == "table" and Member.Character.CommandArray ~= nil
                Weapon = Weapon or type(rawget(Member, "GetKeyState")) == "function" and type(rawget(Member, "UpdateKeyState")) == "function"
                Config = Config or type(rawget(Member, "TickRate")) == "number" and Member.TickRate > 0
            end
            return Packed and Network and Weapon and Config
        end
        return true
    end
    local function Link(Value)
        if not API.getupvalues or type(Value) ~= "table" then return end
        local Queue, SeenFunctions = {{Value, 0}}, {}
        local Index = 1
        while Index <= #Queue and Index <= 500 do
            local Entry = Queue[Index]
            Index += 1
            for _, Member in Entry[1] do
                if type(Member) ~= "function" or SeenFunctions[Member] then continue end
                SeenFunctions[Member] = true
                for _, Reference in Upvalues(Member) do
                    if type(Reference) == "table" and not Linked[Reference] then
                        Linked[Reference] = true
                        if Entry[2] < 2 then table.insert(Queue, {Reference, Entry[2] + 1}) end
                    end
                end
            end
        end
    end
    local function Score(Name, Value, Definition)
        local Points = Linked[Value] and 1000 or 0
        for _, Key in Definition.Keys do
            local Member = rawget(Value, Key)
            if type(Member) == "function" then
                local Okay, Source = pcall(debug.info, Member, "s")
                if Okay and type(Source) == "string" and Source:find(Definition.Path:match("[^.]+$"), 1, true) then Points += 10 end
            end
        end
        if Name == "Character" then
            local Okay, Character = pcall(Value.GetCharacter)
            if Okay and type(Character) == "table" and Character.Simulation then Points += 100 end
            if Value.OnCharacterSpawn then Points += 10 end
        elseif Name == "Weapon" then
            local Okay, Weapon = pcall(Value.GetCurrentWeapon)
            if Okay and type(Weapon) == "table" and Weapon.Data then Points += 100 end
            if Value.OnWeaponShoot then Points += 10 end
        elseif Name == "Entities" then
            local Okay, Entities = pcall(Value.GetAllCategoryEntities, "Character")
            if Okay and type(Entities) == "table" then Points += 20; if next(Entities) then Points += 30 end end
            if Value.OnEntityCreated then Points += 10 end
        elseif Name == "GameConfig" then
            local Okay, Rate = pcall(Value.Get, "Game", "TickRate")
            if Okay and type(Rate) == "number" and Rate > 0 then Points += 100 end
        elseif Name == "Camera" then
            local Okay, Yaw, Pitch = pcall(Value.GetAngles)
            if Okay and type(Yaw) == "number" and type(Pitch) == "number" then Points += 100 end
        end
        return Points
    end
    local function Find(Name, Definition)
        Definition = Definition or Definitions[Name]
        if not Definition then return nil end
        local Candidates, Seen = {}, {}
        local function Add(Value, Source)
            if Seen[Value] or not Matches(Value, Definition, Name) or not Initialized(Name, Value) then return end
            Seen[Value] = true
            table.insert(Candidates, {Value = Value, Source = Source})
        end
        if #Definition.Keys > 0 then for Value in Linked do Add(Value, "upvalue") end end
        if #Definition.Keys > 0 and API.filtergc then
            local Okay, Result = pcall(API.filtergc, "table", {Keys = Definition.Keys}, false)
            if Okay and type(Result) == "table" then
                if Matches(Result, Definition, Name) then Add(Result, "filtergc")
                else for _, Candidate in Result do Add(Candidate, "filtergc") end end
            end
        end
        if #Candidates == 0 and #Definition.Keys > 0 and API.getgc then
            if not Objects then
                local Okay, Result = pcall(API.getgc, true)
                Objects = Okay and type(Result) == "table" and Result or {}
            end
            for _, Candidate in Objects do Add(Candidate, "getgc") end
        end
        local Best, Value, Source = -1, nil, nil
        for _, Candidate in Candidates do
            local Points = Score(Name, Candidate.Value, Definition)
            if Points > Best then Best, Value, Source = Points, Candidate.Value, Candidate.Source end
        end
        if Value then Sources[Name] = Source; Link(Value); return Value end
        return nil
    end
    local Sequence = {"Character", "Weapon", "Entities", "Camera", "Networking", "WeaponInput", "GunWeapon", "Bullet", "Math", "GameConfig",
        "PlayerCamera", "WeaponEffects", "Viewmodel", "WeaponManager", "SkinManager", "CharacterModel", "Movement", "Simulation", "Collision", "CollisionModule", "SimulationConfig", "Enums", "Legs", "Roles", "Sound", "KillFeed"}
    local Deadline = os.clock() + 6
    repeat
        Objects = nil
        for _, Name in Sequence do Modules[Name] = Modules[Name] or Find(Name) end
        State.Missing = {}
        for Name, Definition in Definitions do if Definition.Required and not Modules[Name] then table.insert(State.Missing, Name) end end
        if #State.Missing == 0 or os.clock() >= Deadline then break end
        task.wait(0.25)
    until not State.Alive
    for _, Name in Sequence do Modules[Name] = Find(Name) or Modules[Name] end
    State.Modules, State.ModuleSources = Modules, Sources
    Functions.Game = {}
    function Functions.Game.Character()
        return Modules.Character and Modules.Character.GetCharacter and Modules.Character.GetCharacter()
    end
    function Functions.Game.Simulation()
        local Character = Functions.Game.Character()
        return Character and Character.Simulation, Character
    end
    function Functions.Game.Weapon() return Modules.Weapon and Modules.Weapon.GetCurrentWeapon() end
    function Functions.Game.Camera() return State.Services.Workspace.CurrentCamera end
    function Functions.Game.Config(Category, Name, Default)
        if Modules.GameConfig then
            local Okay, Value = pcall(Modules.GameConfig.Get, Category, Name)
            if Okay and Value ~= nil and (Default == nil or typeof(Value) == typeof(Default)) then return Value end
        end
        return Default
    end
    function Functions.Game.ManualFire()
        local Input = State.Services.UserInputService
        return Input:GetFocusedTextBox() == nil and Input:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
    end
    Functions.Game.Notify = Functions.Utility.Notify
    Functions.Game.Discover = Find
    State.ModuleReady = Initialized
    table.sort(State.Missing)

end

if #State.Missing > 0 then return false, "initialized game modules unavailable: " .. table.concat(State.Missing, ", ") end

do
    Functions.Config = {}
    function Functions.Config.Get(Name, Default)
        local Weapon = Name:match("^(.*) Skin$")
        local Skins = State.UI and State.UI.Skins
        if Weapon and Skins then
            local Entry = Skins:GetSkin(Weapon)
            if Entry and Entry.Skin then return Entry.Skin.Name end
        end
        if State.WeaponConfigs then
            local Value = State.WeaponConfigs:Resolve(Name)
            if Value ~= nil then return Value end
        end
        local Value = State.Flags[Name]
        if Value == nil then return Default end
        return Value
    end
    function Functions.Config.Color(Name, Default)
        local Picker = State.UI and State.UI.Colors[Name]
        local Value, Alpha
        if Picker and type(Picker.GetColor) == "function" then Value, Alpha = Picker:GetColor()
        else
            Value = State.Flags[Name]
            if type(Value) == "table" then Value, Alpha = Value.Color, Value.Alpha end
        end
        return typeof(Value) == "Color3" and Value or Default or Color3.new(1, 1, 1),
            type(Alpha) == "number" and 1 - math.clamp(Alpha, 0, 1) or 1
    end

end

do
    local Game = Functions.Game
    local function Identifier(Value)
        return type(Value) == "number" and Value == Value and math.abs(Value) < math.huge and Value % 1 == 0
    end
    local function Read(Name, ...)
        local Native = State.Modules and State.Modules.Entities
        local Callback = Native and Native[Name]
        if type(Callback) ~= "function" then return nil end
        local Okay, Value = pcall(Callback, ...)
        return Okay and type(Value) == "table" and Value or nil
    end
    function Game.Entity(Category, Id)
        if type(Category) ~= "string" or Category == "" or not Identifier(Id) then return nil end
        return Read("GetEntity", Category, Id)
    end
    function Game.Entities(Category)
        Category = Category or "Character"
        if type(Category) ~= "string" or Category == "" then return {} end
        return Read("GetAllCategoryEntities", Category) or {}
    end
    function Game.CharacterEntity(UserId)
        if not Identifier(UserId) then return nil end
        local Entity = Read("GetCharacterByUserId", UserId)
        if Entity and Entity.UserId == UserId and Game.Entity("Character", Entity.Identifier) == Entity then return Entity end
        return nil
    end
    local function Snapshot(Entity, Tick)
        local Ring = Entity and Entity.Snapshots
        if type(Ring) ~= "table" or type(Ring.Count) ~= "number" or Ring.Count <= 0 then return nil end
        if Tick ~= nil and not Identifier(Tick) then return nil end
        local Callback = Tick ~= nil and Ring.GetByTick or Ring.Newest
        if type(Callback) ~= "function" then return nil end
        local Okay, Entry = pcall(Callback, Ring, Tick)
        return Okay and type(Entry) == "table" and type(Entry.Snapshot) == "table"
            and (Tick == nil or Entry.Tick == Tick) and Entry or nil
    end
    function Game.EntityCurrent(Entity, Category)
        if type(Entity) ~= "table" or Entity.FogCulled or Entity.InterpolationFailed or Entity.DecodeGap then return false end
        if Game.Entity(Category or "Character", Entity.Identifier) ~= Entity then return false end
        local Ring = Entity.Snapshots
        if type(Ring) == "table" then
            if not Identifier(Ring.Count) or Ring.Count < 0 then return false end
            if Ring.Count == 0 then return Entity.PendingFogCulled ~= true end
            local Latest = Snapshot(Entity)
            if not Latest or Latest.FogCulled then return false end
            return true
        end
        return Entity.PendingFogCulled ~= true
    end
    function Game.EntitySnapshot(Entity, Tick)
        if not Game.EntityCurrent(Entity) then return nil end
        local Entry = Snapshot(Entity, Tick)
        if not Entry or Entry.FogCulled then return nil end
        return Entry
    end
Functions.Game = Game
end

do
    local Game, Get = Functions.Game, Functions.Config.Get
    local Transforms = setmetatable({}, {__mode = "k"})
    local Parameters = RaycastParams.new()
    Parameters.IgnoreWater = true
    local Multipliers = {Head = 4, UpperTorso = 1, Torso = 1, LowerTorso = 1.25,
        LeftUpperArm = 1, LeftLowerArm = 1, LeftHand = 1, RightUpperArm = 1, RightLowerArm = 1, RightHand = 1,
        LeftUpperLeg = 0.75, LeftLowerLeg = 0.75, LeftFoot = 0.75, RightUpperLeg = 0.75, RightLowerLeg = 0.75, RightFoot = 0.75}
    Functions.Target = {}
    function Functions.Target.Range(Weapon)
        local Range = Weapon and Weapon.Data and Weapon.Data.Range
        if type(Range) ~= "number" or Range ~= Range or Range <= 0 or Range >= math.huge then return 0 end
        return Range
    end
    function Functions.Target.Enemy(Entity)
        if not Entity or Entity.UserId == State.LocalPlayer.UserId then return false end
        local Stats = State.GameStats
        if Stats and Stats:GetAttribute("Gamemode") == "Deathmatch" then return true end
        local Simulation = Game.Simulation()
        local Team = State.LocalPlayer:GetAttribute("Team") or Simulation and Simulation.Team
        local Other = Entity.Data and Entity.Data.Team
        return Team ~= nil and Other ~= nil and Team ~= Other
    end
    function Functions.Target.Current(Entity)
        if type(Game.EntityCurrent) == "function" then return Game.EntityCurrent(Entity, "Character") end
        if not Entity or Entity.FogCulled or Entity.InterpolationFailed or Entity.DecodeGap then return false end
        return not (Entity.Snapshots and Entity.Snapshots.Count == 0 and Entity.PendingFogCulled)
    end
    function Functions.Target.Valid(Entity)
        if not Entity or not Entity.Model or not Entity.Model.Parent or (Entity.Health or 0) <= 0 then return false end
        if Entity.Culled or not Functions.Target.Current(Entity) then return false end
        return not (Get("Ignore Protected", false) and Entity.Model:FindFirstChild("SpawnProtection"))
    end
    function Functions.Target.Parts(Entity)
        if not Entity or not Entity.Model then return {} end
        local CharacterModel = State.Modules.CharacterModel
        if CharacterModel and type(CharacterModel.GetHitboxParts) == "function" then
            local Okay, Parts = pcall(CharacterModel.GetHitboxParts, Entity.Model)
            if Okay and type(Parts) == "table" then return Parts end
        end
        local Parts = {}
        for _, Part in Entity.Model:GetChildren() do
            if Part:IsA("BasePart") and Multipliers[Part.Name] then table.insert(Parts, Part) end
        end
        return Parts
    end
    function Game.PartFrame(Entity, Part)
        if not Entity or not Part or not Part.Parent then return nil end
        if not Entity.Culled then return Part.CFrame end
        local Anchor = Entity.PrimaryPart or Entity.Model and Entity.Model.PrimaryPart
        if not Anchor or not Entity.CFrame then return nil end
        local Cached = Transforms[Entity]
        if not Cached or Cached.Anchor ~= Anchor.CFrame or Cached.Target ~= Entity.CFrame then
            Cached = {Anchor = Anchor.CFrame, Target = Entity.CFrame, Correction = Entity.CFrame * Anchor.CFrame:Inverse()}
            Transforms[Entity] = Cached
        end
        return Cached.Correction * Part.CFrame
    end
    function Game.PartPosition(Entity, Part)
        local Frame = Game.PartFrame(Entity, Part)
        return Frame and Frame.Position
    end
    function Game.Hitbox(Entity, Part)
        local Frame = Game.PartFrame(Entity, Part)
        if not Frame then return nil end
        local Half, Model = Part.Size * 0.5, State.Modules.CharacterModel
        if Game.Config("LagCompensation", "MathHitboxes", false) and Model and type(Model.GetHitboxBox) == "function" then
            local Okay, Offset, Extents = pcall(function()
                local Index = table.find(Functions.Target.Parts(Entity), Part)
                if Index then return Model.GetHitboxBox(Entity.Model, Index, Part) end
            end)
            if Okay then
                if typeof(Offset) == "CFrame" then Frame *= Offset end
                if typeof(Extents) == "Vector3" then Half = Extents end
            end
        end
        return Frame, Half
    end
    function Functions.Target.RayHitsHitbox(Target, Origin, Direction, Range)
        if not Target or not Target.Frame or not Target.Half or Direction.Magnitude <= 0.000001 then return false end
        local Start = Target.Frame:PointToObjectSpace(Origin)
        local Ray = Target.Frame:VectorToObjectSpace(Direction)
        local Near, Far = 0, Range or math.huge
        for _, Axis in {"X", "Y", "Z"} do
            local Position, Step, Half = Start[Axis], Ray[Axis], Target.Half[Axis]
            if math.abs(Step) < 0.000001 then
                if math.abs(Position) > Half then return false end
            else
                local Entry, Exit = (-Half - Position) / Step, (Half - Position) / Step
                if Entry > Exit then Entry, Exit = Exit, Entry end
                Near, Far = math.max(Near, Entry), math.min(Far, Exit)
                if Near > Far then return false end
            end
        end
        return Far >= 0, Near
    end
    function Functions.Target.Visible(Part, Origin, Position)
        local Camera = Game.Camera()
        if not Part or not Part.Parent or not Origin and not Camera then return false end
        Origin = Origin or Camera.CFrame.Position
        local Workspace = State.Services.Workspace
        local Map = Workspace:FindFirstChild("Map")
        local Geometry = Map and Map:FindFirstChild("Geometry")
        Parameters.FilterType = Geometry and Enum.RaycastFilterType.Include or Enum.RaycastFilterType.Exclude
        local Excluded = {}
        for _, Object in {Camera, State.Characters, State.ThirdPersonModel, State.LocalPlayer.Character} do
            if Object then table.insert(Excluded, Object) end
        end
        Parameters.FilterDescendantsInstances = Geometry and {Geometry} or Excluded
        local Result = Workspace:Raycast(Origin, (Position or Part.Position) - Origin, Parameters)
        return not Result or Result.Instance:IsDescendantOf(Part.Parent), Result
    end
    function Functions.Target.Damage(Entity, Part, Distance, Weapon, Remaining)
        local Data = Weapon and Weapon.Data
        local Range = Functions.Target.Range(Weapon)
        if not Data or not Part or type(Distance) ~= "number" or Distance ~= Distance
            or Distance < 0 or Range <= 0 or Distance > Range + 2.776 then return 0 end
        local Name = Part.Name
        local Overrides = Game.Config("Damage", "HitboxMultipliers", Multipliers)
        local Multiplier = Data.HitboxMultipliers and Data.HitboxMultipliers[Name] or Overrides[Name] or Multipliers[Name] or 1
        local Damage = (Remaining or (tonumber(Data.Damage) or 0)
            * math.clamp(tonumber(Data.RangeModifier) or 1, 0, 1) ^ (Distance * Range / (Range + 2.776)
                / math.max(0.01, Game.Config("Weapon", "DistanceFallOff", 34.7)))) * Multiplier
        local Player = type(Entity.UserId) == "number" and State.Services.Players:GetPlayerByUserId(Entity.UserId)
        local Armor = tonumber(Player and Player:GetAttribute("ArmorValue") or Entity.ArmorValue) or 0
        local Helmet = Entity.HasHelmet
        if Player then Helmet = Player:GetAttribute("HasHelmet") end
        local Rules = Game.Config("Damage", "HitboxArmorApply", {ApplyArmor = {}, RequireHelmet = {Head = true}})
        local Armored = Rules.ApplyArmor and Rules.ApplyArmor[Name]
        if Armored == nil then Armored = not (Name:find("Leg") or Name:find("Foot")) end
        local HelmetRequired = Rules.RequireHelmet and Rules.RequireHelmet[Name]
        if HelmetRequired == nil then HelmetRequired = Name == "Head" end
        if Armor > 0 and Armored and (not HelmetRequired or Helmet) and type(Data.ArmorRatio) == "number" then
            local Ratio = math.clamp(Data.ArmorRatio * Game.Config("Damage", "ArmorRatioDivisor", 0.5), 0, 1)
            local Bonus = math.max(0.01, Game.Config("Damage", "ArmorBonusMultiplier", 0.5))
            local Reduced = Damage * Ratio
            Damage = (Damage - Reduced) * Bonus > Armor and Damage - Armor / Bonus or Reduced
        end
        return math.max(0, Damage)
    end

end

do
    local Gui = Functions.Utility.Own(Instance.new("ScreenGui"))
    Gui.Name, Gui.ResetOnSpawn, Gui.IgnoreGuiInset, Gui.DisplayOrder = "Swift2Overlay", false, true, 5
    local Parent = State.Library.OverlayGui and State.Library.OverlayGui.Parent
    if not Parent and State.Executor.APIs.gethui then
        local Okay, Container = pcall(State.Executor.APIs.gethui)
        if Okay then Parent = Container end
    end
    if State.Executor.APIs.protectgui then pcall(State.Executor.APIs.protectgui, Gui) end
    Gui.Parent = Parent or State.Services.CoreGui
    State.GuiParent = Gui
end

do
    local Library = State.Library
    local Window = Library:CreateWindow({Title = "Swift"})
    local Self = {Window = Window, Tabs = {}, Colors = {}}
    State.UI = Self
    State.PlayerSettings = State.PlayerSettings or {}
    Window:SetLogo("Logo")
    Window:AddCategory("Combat")
    Self.Tabs.Rage = Window:AddTab({Title = "Rage", Icon = "Bullseye"})
    Self.Tabs.Legit = Window:AddTab({Title = "Legit", Icon = "Bullet"})
    Window:AddCategory("Visuals")
    Self.Tabs.Players = Window:AddTab({Title = "Players", Icon = "Smile"})
    Self.Tabs.World = Window:AddTab({Title = "World", Icon = "Globe"})
    Self.Tabs.Effects = Window:AddTab({Title = "Effects", Icon = "HeartCrack"})
    Self.Tabs.Local = Window:AddTab({Title = "Local", Icon = "User"})
    Self.Skins = Window:AddSkinChanger({Title = "Skins", Icon = "Brush"})
    Window:AddCategory("Player")
    Self.Tabs.Movement = Window:AddTab({Title = "Movement", Icon = "Smile"})
    Self.Tabs.Utility = Window:AddTab({Title = "Utility", Icon = "Bomb"})
    Window:AddCategory("Misc")
    Self.Playerlist = Window:AddPlayerlist({Title = "Playerlist", Icon = "Users"})
    Self.Servers = Window:AddServerList({Title = "Servers", Icon = "Globe"})
    Self.Preview = Window:AddPreview({Tab = Self.Tabs.Players})
    local Selected
    local BodyAim
    BodyAim = Self.Playerlist.Section:AddToggle({Text = "Body Aim", Flag = "Player Body Aim", NoSave = true, Callback = function(Value)
        if not Selected then return end
        local Settings = State.PlayerSettings[Selected.UserId] or {}
        Settings.BodyAim = Value
        State.PlayerSettings[Selected.UserId] = Settings
    end})
    if Library.Elements["Player Body Aim"] then Library.Elements["Player Body Aim"].NoSave = true end
    Self.Playerlist:OnSelected(function(Player)
        Selected = Player
        BodyAim:Set((State.PlayerSettings[Player.UserId] or {}).BodyAim == true, true)
    end)
    Self.Playerlist:OnStatusChanged(function(Player, Status)
        local Settings = State.PlayerSettings[Player.UserId] or {}
        Settings.Ignore = Status == "Friendly"
        Settings.Priority = Status == "Priority"
        State.PlayerSettings[Player.UserId] = Settings
    end)
    Library:AddConfigExtra(function()
        local Settings = {}
        for UserId, Entry in State.PlayerSettings do Settings[tostring(UserId)] = table.clone(Entry) end
        return "__PlayerSettings", Settings
    end, function(Data)
        if type(Data.__PlayerSettings) ~= "table" then return end
        table.clear(State.PlayerSettings)
        for UserId, Entry in Data.__PlayerSettings do
            if tonumber(UserId) and type(Entry) == "table" then
                State.PlayerSettings[tonumber(UserId)] = {Ignore = Entry.Ignore == true, Priority = Entry.Priority == true, BodyAim = Entry.BodyAim == true}
            end
        end
        if Selected then BodyAim:Set((State.PlayerSettings[Selected.UserId] or {}).BodyAim == true, true) end
    end)
    Self.Playerlist:Select(State.LocalPlayer or State.Services.Players.LocalPlayer)
    local PreviewState = {Health = 0.82, DistanceText = "24st", WeaponName = "AK-47", ArmorValue = 0.65, Ammo = 18, AmmoCapacity = 30, IconImage = "rbxassetid://103328569146383"}
    local Tags = {}
    local TagOptions = {{"Defuse kit", "KIT"}, {"Bomb", "BOMB"}, {"Planting", "PLANT"}, {"Defusing", "DEFUSE"}, {"Aiming", "ZOOM"}, {"Yaw", "Y 45"}, {"Pitch", "P 10"}, {"Team", "CT"}}
    local VisibleFields = {
        {"Box", "Box"}, {"HealthBar", "Healthbar"}, {"Name", "Names"}, {"Distance", "Distance Text"}, {"Weapon", "Weapon Text"},
        {"Flags", "Flags"}, {"Skeleton", "Skeletons"}, {"Armor", "Player Armor"}, {"AmmoBar", "Player Ammo Bar"},
        {"AmmoText", "Player Ammo Text"}, {"HeadDot", "Player Head Dot"}, {"Icon", "Player Icon"}, {"Chams", "Player Chams"},
    }
    local SettingFields = {
        {"BoxThickness", "Box Thickness", 1}, {"BoxOutline", "Box Outline Enabled", false}, {"BoxOutlineThickness", "Box Outline Thickness", 3},
        {"BoxGradient", "Box Gradient", false}, {"BoxGradientRotation", "Box Gradient Rotation", 0},
        {"Fill", "Box Fill", false}, {"FillGradient", "Box Fill Gradient", false}, {"FillGradientRotation", "Box Fill Rotation", 0},
        {"Glow", "Box Glow", false}, {"GlowOpacity", "Glow Opacity", 0.2}, {"GlowSize", "Glow Size", 45},
        {"GlowGradient", "Box Glow Gradient", false}, {"GlowGradientRotation", "Box Glow Rotation", 0},
        {"HealthWidth", "Healthbar Width", 4}, {"HealthGradient", "Health Gradient", false}, {"HealthText", "Healthbar Text", false},
        {"HealthTextColorMode", "Health Text Color Mode", "Health"}, {"SkeletonThickness", "Skeleton Thickness", 1},
        {"SkeletonOutline", "Skeleton Outline", false}, {"SkeletonOutlineThickness", "Skeleton Outline Thickness", 3},
        {"ArmorWidth", "Player Armor Width", 4}, {"AmmoBarHeight", "Player Ammo Bar Height", 4}, {"HeadDotSize", "Player Head Dot Size", 5},
        {"IconSize", "Player Icon Size", 20}, {"TextSize", "Text Size", 10}, {"Font", "ESP Font", "Pixel"},
        {"TextOutline", "ESP Text Outline", false}, {"ChamsOpacity", "Player Chams Opacity", 0.35},
    }
    local ColorFields = {
        {"Box", "Box Color"}, {"BoxOutline", "Box Outline Color"}, {"BoxGradientStart", "High Contrast Box"}, {"BoxGradientEnd", "Low Contrast Box"},
        {"Fill", "Fill Color"}, {"FillGradientStart", "High Contrast Fill"}, {"FillGradientEnd", "Low Contrast Fill"},
        {"Glow", "Glow Color"}, {"GlowGradientStart", "High Contrast Glow"}, {"GlowGradientEnd", "Low Contrast Glow"},
        {"Health", "Health Color"}, {"HealthHigh", "High Health"}, {"HealthMid", "Mid Health"}, {"HealthLow", "Low Health"}, {"HealthText", "Health Text Color"},
        {"Name", "Names Text Color"}, {"Distance", "Distance Text Color"}, {"Weapon", "Weapon Text Color"}, {"Flags", "Flags Text Color"},
        {"Skeleton", "Skeleton Color"}, {"SkeletonOutline", "Skeleton Outline Color"}, {"Armor", "Player Armor Color"}, {"Ammo", "Player Ammo Color"},
        {"HeadDot", "Player Head Dot Color"}, {"Icon", "Player Icon Color"}, {"TextOutline", "ESP Text Outline Color"},
        {"Chams", "Player Chams Color"}, {"ChamsOutline", "Player Chams Outline Color"},
    }
    for _, Entry in ColorFields do
        local Key = Entry[1]
        Entry[3] = Key:match("Start$") or Key:match("End$") or Key == "HealthHigh" or Key == "HealthMid" or Key == "HealthLow"
        Entry[5] = Key .. "Transparency"
        if not Entry[3] then Entry[4] = Key .. "Color" end
    end
    local White = Color3.new(1, 1, 1)
    local function Get(Name, Default)
        local Value = Library.Flags[Name]
        if Value == nil then return Default end
        return Value
    end
    local function Color(Name)
        local Picker, Value = Self.Colors[Name], Library.Flags[Name]
        if type(Value) == "table" and (not Picker or Value ~= Picker.Value) then return Value.Color, Value.Alpha end
        if Picker and Picker.GetColor then return Picker:GetColor() end
        return White, 0
    end
    function Self:GetPreviewState()
        local Flags = Library.Flags
        local Enabled = Flags["Esp Enabled"] == true
        local Player = State.LocalPlayer or State.Services.Players.LocalPlayer
        local Username = Player and Player.Name or "Player"
        local Name = Player and Player.DisplayName or Username
        if Flags["ESP Name Type"] == "Username" then Name = Username
        elseif Flags["ESP Name Type"] == "Both" then Name = Name .. " (@" .. Username .. ")" end
        if Library.AnonymousMode then Name = Library.AnonymousName or "..." end
        table.clear(Tags)
        local Selected = Flags["ESP Flags"]
        for _, Entry in TagOptions do
            if type(Selected) == "table" and (Selected[Entry[1]] == true or table.find(Selected, Entry[1])) then table.insert(Tags, Entry[2]) end
        end
        for _, Entry in VisibleFields do PreviewState[Entry[1]] = Enabled and Flags[Entry[2]] == true end
        for _, Entry in SettingFields do PreviewState[Entry[1]] = Get(Entry[2], Entry[3]) end
        PreviewState.BoxStyle = Get("Box Style", "Full") == "Corners" and "Corner" or "Full"
        PreviewState.CornerLength = Get("Box Corner Length", 25) / 100
        PreviewState.NameText, PreviewState.FlagsText = Name, table.concat(Tags, "\n")
        for _, Entry in ColorFields do
            local ColorValue, Transparency = Color(Entry[2])
            if Entry[3] then PreviewState[Entry[1]] = ColorValue
            else PreviewState[Entry[4]] = ColorValue end
            PreviewState[Entry[5]] = Transparency or 0
        end
        return PreviewState
    end
    function Self:RefreshPreview()
        Self.Preview:Update(Self:GetPreviewState())
    end
    Self.Preview:SetStateProvider(function() return Self:GetPreviewState() end)
    function Self:Finish()
        if not Self.Settings then Self.Settings = Window:AddSettingsTab({Title = "Settings", Icon = "Gear", Watermark = false, KeybindList = false, MenuKeybind = Enum.KeyCode.RightShift}) end
        Self:RefreshPreview()
        Self.Tabs.Legit:Select(true)
        return Self
    end
State.UI = Self
end

State.UI.Parent = State.GuiParent

do
    local Library = State.Library
    local Window = State.UI.Window
    local Colors = State.UI.Colors
    local White, Black = Color3.new(1, 1, 1), Color3.new(0, 0, 0)
    local AimPage, TriggerPage, RagePage, AntiAimPage = State.UI.Tabs.Legit, State.UI.Tabs.Legit, State.UI.Tabs.Rage, State.UI.Tabs.Rage
    local AimSection = AimPage:AddSection({Title = "Aim Assist", Icon = "Bullseye", Side = 1})
    local Aimbot = AimSection:AddToggle({Text = "Aimbot", Flag = "Aimbot", Default = false})
    Aimbot:AddKeybind({Mode = "Toggle"})
    local AimSettings = Aimbot:Settings()
    AimSettings:AddDropdown({Text = "Mode", Flag = "Aim Mode", Options = {"Camera", "Mouse"}, Default = "Camera"})
    AimSettings:AddMultiDropdown({Text = "Hitboxes", Flag = "Aim Hitboxes", Options = {"Head", "Torso", "Arms", "Legs", "Random", "Closest"}, Default = {"Head"}})
    AimSettings:AddSlider({Text = "Smoothing", Flag = "Aim Speed", Min = 0, Max = 20, Default = 0, Increment = 0.1})
    AimSettings:AddSlider({Text = "FOV", Flag = "Aim FOV", Min = 10, Max = 1000, Default = 160, Increment = 1, Suffix = " px"})
    AimSettings:AddSlider({Text = "Deadzone", Flag = "Aim Deadzone", Min = 0, Max = 25, Default = 0, Increment = 1, Suffix = " px"})
    AimSettings:AddSlider({Text = "Random Change Interval", Flag = "Aim Random Interval", Min = 0.1, Max = 2, Default = 0.5, Increment = 0.05, Suffix = " s"})
    local SilentAim = AimSection:AddToggle({Text = "Silent Aim", Flag = "Silent Aim", Default = false})
    SilentAim:AddKeybind({Mode = "Toggle"})
    local SilentSettings = SilentAim:Settings()
    SilentSettings:AddMultiDropdown({Text = "Hitboxes", Flag = "Silent Aim Hitboxes", Options = {"Head", "Torso", "Arms", "Legs", "Random", "Closest"}, Default = {"Head"}})
    SilentSettings:AddSlider({Text = "FOV", Flag = "Silent Aim FOV", Min = 10, Max = 1000, Default = 160, Increment = 1, Suffix = " px"})
    SilentSettings:AddToggle({Text = "Visible Check", Flag = "Silent Aim Visible Check", Default = false})
    SilentSettings:AddSlider({Text = "Random Change Interval", Flag = "Silent Aim Random Interval", Min = 0.1, Max = 2, Default = 0.5, Increment = 0.05, Suffix = " s"})
    AimSection:AddToggle({Text = "Wall Check", Flag = "Wall Check", Default = false})
    AimSection:AddToggle({Text = "Ignore Protected", Flag = "Ignore Protected", Default = false})
    AimSection:AddToggle({Text = "Seed Prediction", Flag = "Seed Prediction", Default = false})
    local Recoil = AimSection:AddToggle({Text = "Recoil Control", Flag = "Legit Recoil Control", Default = false})
    local RecoilSettings = Recoil:Settings()
    RecoilSettings:AddSlider({Text = "Horizontal (X)", Flag = "Legit Recoil X", Min = 0, Max = 100, Default = 100, Increment = 1, Suffix = "%"})
    RecoilSettings:AddSlider({Text = "Vertical (Y)", Flag = "Legit Recoil Y", Min = 0, Max = 100, Default = 100, Increment = 1, Suffix = "%"})
    local FOVSection = AimPage:AddSection({Title = "FOV Circle", Icon = "Bullseye", Side = 2})
    local FOVCircle = FOVSection:AddToggle({Text = "Show Circle", Flag = "Aim FOV Circle", Default = false})
    Colors["Aim FOV Color A"] = FOVCircle:AddColorPicker({Text = "Circle Color", Flag = "Aim FOV Color A", Default = White})
    local FOVSettings = FOVCircle:Settings()
    FOVSettings:AddDropdown({Text = "Position", Flag = "Aim FOV Position", Options = {"Center", "Mouse"}, Default = "Center"})
    FOVSettings:AddSlider({Text = "Thickness", Flag = "Aim FOV Thickness", Min = 1, Max = 5, Default = 1, Increment = 1})
    local FOVGradient = FOVSettings:AddToggle({Text = "Gradient", Flag = "Aim FOV Gradient", Default = false})
    Colors["Aim FOV Color B"] = FOVGradient:AddColorPicker({Text = "End Color", Flag = "Aim FOV Color B", Default = White})
    FOVGradient:Settings():AddSlider({Text = "Rotation", Flag = "Aim FOV Rotation", Min = -180, Max = 180, Default = 0, Increment = 1, Suffix = "°"})
    local FOVFill = FOVSettings:AddToggle({Text = "Fill", Flag = "Aim FOV Fill", Default = false})
    FOVFill:Settings():AddSlider({Text = "Opacity", Flag = "Aim FOV Fill Opacity", Min = 0, Max = 1, Default = 0.15, Increment = 0.01})
    local SilentCircle = FOVSection:AddToggle({Text = "Silent Aim Circle", Flag = "Silent Aim FOV Circle", Default = false})
    Colors["Silent Aim FOV Color"] = SilentCircle:AddColorPicker({Text = "Circle Color", Flag = "Silent Aim FOV Color", Default = White})
    local SilentCircleSettings = SilentCircle:Settings()
    SilentCircleSettings:AddSlider({Text = "Thickness", Flag = "Silent Aim FOV Thickness", Min = 1, Max = 5, Default = 1, Increment = 1})
    local SilentFill = SilentCircleSettings:AddToggle({Text = "Fill", Flag = "Silent Aim FOV Fill", Default = false})
    SilentFill:Settings():AddSlider({Text = "Opacity", Flag = "Silent Aim FOV Fill Opacity", Min = 0, Max = 1, Default = 0.15, Increment = 0.01})
    local Snapline = AimPage:AddSection({Title = "Target", Icon = "HeartCrack", Side = 2}):AddToggle({Text = "Snapline", Flag = "Target Snapline", Default = false})
    Colors["Target Snapline Color"] = Snapline:AddColorPicker({Text = "Line Color", Flag = "Target Snapline Color", Default = White})

    local Trigger = TriggerPage:AddSection({Title = "Triggerbot", Icon = "HeartCrack", Side = 1}):AddToggle({Text = "Triggerbot", Flag = "Triggerbot", Default = false})
    Trigger:AddKeybind({Mode = "Toggle"})
    local TriggerSettings = Trigger:Settings()
    TriggerSettings:AddDropdown({Text = "Mode", Flag = "Trigger Mode", Options = {"Mouse", "Seed"}, Default = "Mouse"})
    TriggerSettings:AddDropdown({Text = "Position", Flag = "Trigger Position", Options = {"Center", "Mouse"}, Default = "Center"})
    TriggerSettings:AddToggle({Text = "Head Only", Flag = "Trigger Head Only", Default = false})

    local RageSection = RagePage:AddSection({Title = "Rage", Icon = "Robot", Side = 1})
    local Rage = RageSection:AddToggle({Text = "Ragebot", Flag = "Ragebot", Default = false})
    Rage:AddKeybind({Mode = "Toggle"})
    local RageSettings = Rage:Settings()
    RageSettings:AddSlider({Text = "Range", Flag = "Rage Range", Min = 10, Max = 2000, Default = 300, Increment = 1, Suffix = " st"})
    RageSettings:AddSlider({Text = "Minimum Damage", Flag = "Rage Minimum Damage", Min = 0, Max = 200, Default = 0, Increment = 1, Suffix = " HP"})
    local RageSmoothing = RageSettings:AddToggle({Text = "Smooth Aim", Flag = "Rage Smooth Aim", Default = false})
    RageSmoothing:Settings():AddSlider({Text = "Turn Speed", Flag = "Rage Smooth Aim Speed", Min = 90, Max = 1080, Default = 720, Increment = 10, Suffix = " deg/s"})
    RageSection:AddDropdown({Text = "Target Priority", Flag = "Rage Target Priority", Options = {"Highest Damage", "Closest", "Crosshair", "Lowest Health"}, Default = "Highest Damage"})
    RageSection:AddDropdown({Text = "Hitbox", Flag = "Rage Hitbox", Options = {"Highest Damage", "Head", "Torso", "Arms", "Legs"}, Default = "Highest Damage"})
    RageSection:AddToggle({Text = "Hitscan", Flag = "Rage Hitscan", Default = false})
    RageSection:AddToggle({Text = "Wallbang", Flag = "Rage Wallbang", Default = false})
    RageSection:AddToggle({Text = "Auto Stop", Flag = "Rage Auto Stop", Default = false})
    RageSection:AddToggle({Text = "Auto Scope", Flag = "Rage Auto Scope", Default = false})
    RageSection:AddToggle({Text = "Auto Reload", Flag = "Rage Auto Reload", Default = false})
    local Crouch = RageSection:AddToggle({Text = "Auto Crouch", Flag = "Rage Auto Crouch", Default = false})
    Crouch:Settings():AddSlider({Text = "Peek Lead Time", Flag = "Rage Crouch Lead Time", Min = 0.05, Max = 0.35, Default = 0.15, Increment = 0.01, Suffix = " s"})
    RageSection:AddToggle({Text = "Auto Peek", Flag = "Auto Peek", Default = false}):AddKeybind({Mode = "Hold", Default = Enum.KeyCode.X})
    local Accuracy = RagePage:AddSection({Title = "Accuracy", Icon = "Bullseye", Side = 2})
    local AccuracyCheck = Accuracy:AddToggle({Text = "Accuracy Check", Flag = "Rage Accuracy Check", Default = false})
    AccuracyCheck:Settings():AddSlider({Text = "Minimum Estimated Chance", Flag = "Rage Minimum Hit Chance", Min = 1, Max = 100, Default = 65, Increment = 1, Suffix = "%"})
    Accuracy:AddToggle({Text = "No Recoil", Flag = "No Recoil", Default = false})
    local NoSpread = Accuracy:AddToggle({Text = "No Spread", Flag = "No Spread", Default = false})
    local SpreadSettings = NoSpread:Settings()
    SpreadSettings:AddToggle({Text = "Fixed Pattern Only", Flag = "No Spread Fixed Pattern", Default = false})
    SpreadSettings:AddToggle({Text = "Vary Head Point", Flag = "No Spread Random Head", Default = true})
    Accuracy:AddToggle({Text = "Rapid Fire", Flag = "Rapid Fire", Default = false})
    Accuracy:AddToggle({Text = "Instant Reload", Flag = "Instant Reload", Default = false})
    local Knife = RagePage:AddSection({Title = "Knife", Icon = "Knife", Side = 2}):AddToggle({Text = "Knifebot", Flag = "Knifebot", Default = false})
    Knife:AddKeybind({Mode = "Toggle"})
    local KnifeSettings = Knife:Settings()
    KnifeSettings:AddDropdown({Text = "Attack", Flag = "Knife Mode", Options = {"Stab", "Slash"}, Default = "Stab"})
    KnifeSettings:AddSlider({Text = "Range", Flag = "Knife Range", Min = 1, Max = 12, Default = 7, Increment = 0.5, Suffix = " st"})

    local AntiAim = AntiAimPage:AddSection({Title = "Anti Aim", Icon = "Wrench", Side = 1}):AddToggle({Text = "Anti Aim", Flag = "Anti Aim", Default = false})
    AntiAim:AddKeybind({Mode = "Toggle"})
    local AntiSettings = AntiAim:Settings()
    AntiSettings:AddDropdown({Text = "Yaw", Flag = "Anti Aim Yaw", Options = {"Backward", "Left", "Right", "Spin", "Jitter", "Random"}, Default = "Backward"})
    AntiSettings:AddDropdown({Text = "Pitch", Flag = "Anti Aim Pitch", Options = {"None", "Up", "Down"}, Default = "None"})
    AntiSettings:AddSlider({Text = "Spin Speed", Flag = "Spin Speed", Min = 30, Max = 720, Default = 180, Increment = 1, Suffix = "°/s"})
    AntiSettings:AddSlider({Text = "Jitter Angle", Flag = "Jitter Angle", Min = 0, Max = 180, Default = 90, Increment = 1, Suffix = "°"})
    AntiSettings:AddToggle({Text = "Defensive", Flag = "Defensive Anti Aim", Default = false})
    local FakeYaw = AntiAimPage:AddSection({Title = "Fake Angles", Icon = "Wrench", Side = 2}):AddToggle({Text = "Fake Yaw", Flag = "Fake Yaw", Default = false})
    FakeYaw:Settings():AddSlider({Text = "Offset", Flag = "Fake Yaw Offset", Min = -180, Max = 180, Default = 90, Increment = 1, Suffix = "°"})
    local FakePitch = AntiAimPage:AddSection({Title = "Fake Pitch", Icon = "Wrench", Side = 2}):AddToggle({Text = "Fake Pitch", Flag = "Fake Pitch", Default = false})
    FakePitch:Settings():AddSlider({Text = "Angle", Flag = "Fake Pitch Angle", Min = -89, Max = 89, Default = 0, Increment = 1, Suffix = "°"})
end

do
    local Library = State.Library
    local Window = State.UI.Window
    local Colors = State.UI.Colors
    local Existing = {}
    for Flag in Library.Elements do Existing[Flag] = true end
    local White, Black = Color3.new(1, 1, 1), Color3.new(0, 0, 0)
    local PlayersPage, C4Page = State.UI.Tabs.Players, State.UI.Tabs.Players
    local ESP = PlayersPage:AddSection({Title = "ESP", Icon = "Smile", Side = 1})
    local Enabled = ESP:AddToggle({Text = "Enabled", Flag = "Esp Enabled", Default = false})
    local Base = Enabled:Settings()
    Base:AddToggle({Text = "Visible Check", Flag = "ESP Visible Check", Default = false})
    local Limit = Base:AddToggle({Text = "Distance Limit", Flag = "Distance Limit", Default = false})
    Limit:Settings():AddSlider({Text = "Max Distance", Flag = "Max Distance", Min = 0, Max = 10000, Default = 1000, Increment = 1, Suffix = " st"})
    Base:AddSlider({Text = "Text Size", Flag = "Text Size", Min = 8, Max = 24, Default = 10, Increment = 1, Suffix = " px"})
    Base:AddDropdown({Text = "Font", Flag = "ESP Font", Options = {"Pixel", "Code", "Gotham", "Arial"}, Default = "Pixel"})
    local TextOutline = Base:AddToggle({Text = "Text Outline", Flag = "ESP Text Outline", Default = false})
    Colors["ESP Text Outline Color"] = TextOutline:AddColorPicker({Text = "Outline Color", Flag = "ESP Text Outline Color", Default = Black})

    local Box = ESP:AddToggle({Text = "Box", Flag = "Box", Default = false})
    Colors["Box Color"] = Box:AddColorPicker({Text = "Box Color", Flag = "Box Color", Default = White})
    local BoxSettings = Box:Settings()
    BoxSettings:AddDropdown({Text = "Style", Flag = "Box Style", Options = {"Full", "Corners"}, Default = "Full"})
    BoxSettings:AddSlider({Text = "Corner Length", Flag = "Box Corner Length", Min = 10, Max = 50, Default = 25, Increment = 1, Suffix = "%"})
    BoxSettings:AddSlider({Text = "Thickness", Flag = "Box Thickness", Min = 1, Max = 4, Default = 1, Increment = 1})
    local BoxGradient = BoxSettings:AddToggle({Text = "Gradient", Flag = "Box Gradient", Default = false})
    Colors["High Contrast Box"] = BoxGradient:AddColorPicker({Text = "Start Color", Flag = "High Contrast Box", Default = White})
    Colors["Low Contrast Box"] = BoxGradient:AddColorPicker({Text = "End Color", Flag = "Low Contrast Box", Default = White})
    BoxGradient:Settings():AddSlider({Text = "Rotation", Flag = "Box Gradient Rotation", Min = -180, Max = 180, Default = 0, Increment = 1, Suffix = "°"})
    local Outline = BoxSettings:AddToggle({Text = "Outline", Flag = "Box Outline Enabled", Default = false})
    Colors["Box Outline Color"] = Outline:AddColorPicker({Text = "Outline Color", Flag = "Box Outline Color", Default = Black, Alpha = 0.5})
    Outline:Settings():AddSlider({Text = "Thickness", Flag = "Box Outline Thickness", Min = 1, Max = 6, Default = 3, Increment = 1})
    local Fill = BoxSettings:AddToggle({Text = "Fill", Flag = "Box Fill", Default = false})
    Colors["Fill Color"] = Fill:AddColorPicker({Text = "Fill Color", Flag = "Fill Color", Default = White, Alpha = 0.5})
    local FillGradient = Fill:Settings():AddToggle({Text = "Gradient", Flag = "Box Fill Gradient", Default = false})
    Colors["High Contrast Fill"] = FillGradient:AddColorPicker({Text = "Start Color", Flag = "High Contrast Fill", Default = White})
    Colors["Low Contrast Fill"] = FillGradient:AddColorPicker({Text = "End Color", Flag = "Low Contrast Fill", Default = White})
    FillGradient:Settings():AddSlider({Text = "Rotation", Flag = "Box Fill Rotation", Min = -180, Max = 180, Default = 0, Increment = 1, Suffix = "°"})
    local Glow = BoxSettings:AddToggle({Text = "Glow", Flag = "Box Glow", Default = false})
    Colors["Glow Color"] = Glow:AddColorPicker({Text = "Glow Color", Flag = "Glow Color", Default = White, Alpha = 0.5})
    local GlowSettings = Glow:Settings()
    GlowSettings:AddSlider({Text = "Opacity", Flag = "Glow Opacity", Min = 0, Max = 1, Default = 0.2, Increment = 0.01})
    GlowSettings:AddSlider({Text = "Size", Flag = "Glow Size", Min = 10, Max = 100, Default = 45, Increment = 1})
    local GlowGradient = GlowSettings:AddToggle({Text = "Gradient", Flag = "Box Glow Gradient", Default = false})
    Colors["High Contrast Glow"] = GlowGradient:AddColorPicker({Text = "Start Color", Flag = "High Contrast Glow", Default = White})
    Colors["Low Contrast Glow"] = GlowGradient:AddColorPicker({Text = "End Color", Flag = "Low Contrast Glow", Default = White})
    GlowGradient:Settings():AddSlider({Text = "Rotation", Flag = "Box Glow Rotation", Min = -180, Max = 180, Default = 0, Increment = 1, Suffix = "°"})

    local Health = ESP:AddToggle({Text = "Healthbar", Flag = "Healthbar", Default = false})
    Colors["Health Color"] = Health:AddColorPicker({Text = "Health Color", Flag = "Health Color", Default = Color3.fromRGB(0, 255, 0)})
    local HealthSettings = Health:Settings()
    HealthSettings:AddSlider({Text = "Width", Flag = "Healthbar Width", Min = 1, Max = 8, Default = 4, Increment = 1})
    local HealthGradient = HealthSettings:AddToggle({Text = "Gradient", Flag = "Health Gradient", Default = false})
    Colors["High Health"] = HealthGradient:AddColorPicker({Text = "High Health", Flag = "High Health", Default = Color3.fromRGB(0, 255, 0)})
    Colors["Mid Health"] = HealthGradient:AddColorPicker({Text = "Mid Health", Flag = "Mid Health", Default = Color3.fromRGB(255, 165, 0)})
    Colors["Low Health"] = HealthGradient:AddColorPicker({Text = "Low Health", Flag = "Low Health", Default = Color3.fromRGB(255, 0, 0)})
    local HealthText = HealthSettings:AddToggle({Text = "Text", Flag = "Healthbar Text", Default = false})
    Colors["Health Text Color"] = HealthText:AddColorPicker({Text = "Text Color", Flag = "Health Text Color", Default = White})
    HealthText:Settings():AddDropdown({Text = "Color Mode", Flag = "Health Text Color Mode", Options = {"Health", "Custom"}, Default = "Health"})

    local Names = ESP:AddToggle({Text = "Names", Flag = "Names", Default = false})
    Colors["Names Text Color"] = Names:AddColorPicker({Text = "Name Color", Flag = "Names Text Color", Default = White})
    Names:Settings():AddDropdown({Text = "Name Type", Flag = "ESP Name Type", Options = {"Display Name", "Username", "Both"}, Default = "Display Name"})
    local Distance = ESP:AddToggle({Text = "Distance", Flag = "Distance Text", Default = false})
    Colors["Distance Text Color"] = Distance:AddColorPicker({Text = "Distance Color", Flag = "Distance Text Color", Default = White})
    local Weapon = ESP:AddToggle({Text = "Weapon", Flag = "Weapon Text", Default = false})
    Colors["Weapon Text Color"] = Weapon:AddColorPicker({Text = "Weapon Color", Flag = "Weapon Text Color", Default = White})
    local Status = ESP:AddToggle({Text = "Flags", Flag = "Flags", Default = false})
    Colors["Flags Text Color"] = Status:AddColorPicker({Text = "Flags Color", Flag = "Flags Text Color", Default = White})
    Status:Settings():AddMultiDropdown({Text = "Show", Flag = "ESP Flags", Options = {"Defuse kit", "Bomb", "Planting", "Defusing", "Aiming", "Yaw", "Pitch", "Team"}, Default = {"Defuse kit", "Bomb", "Planting", "Defusing", "Aiming"}})
    local Skeleton = ESP:AddToggle({Text = "Skeleton", Flag = "Skeletons", Default = false})
    Colors["Skeleton Color"] = Skeleton:AddColorPicker({Text = "Skeleton Color", Flag = "Skeleton Color", Default = White})
    local SkeletonSettings = Skeleton:Settings()
    SkeletonSettings:AddSlider({Text = "Thickness", Flag = "Skeleton Thickness", Min = 1, Max = 4, Default = 1, Increment = 1})
    local SkeletonOutline = SkeletonSettings:AddToggle({Text = "Outline", Flag = "Skeleton Outline", Default = false})
    Colors["Skeleton Outline Color"] = SkeletonOutline:AddColorPicker({Text = "Outline Color", Flag = "Skeleton Outline Color", Default = Black})
    SkeletonOutline:Settings():AddSlider({Text = "Thickness", Flag = "Skeleton Outline Thickness", Min = 1, Max = 6, Default = 3, Increment = 1})

    local PlayerExtras = PlayersPage:AddSection({Title = "Extras", Icon = "Smile", Side = 2})
    local Armor = PlayerExtras:AddToggle({Text = "Armor Bar", Flag = "Player Armor", Default = false})
    Colors["Player Armor Color"] = Armor:AddColorPicker({Text = "Armor Color", Flag = "Player Armor Color", Default = Color3.fromRGB(60, 160, 255)})
    Armor:Settings():AddSlider({Text = "Width", Flag = "Player Armor Width", Min = 3, Max = 8, Default = 4, Increment = 1, Suffix = " px"})
    local WeaponIcon = PlayerExtras:AddToggle({Text = "Gun Icon", Flag = "Player Icon", Default = false})
    Colors["Player Icon Color"] = WeaponIcon:AddColorPicker({Text = "Icon Color", Flag = "Player Icon Color", Default = White})
    WeaponIcon:Settings():AddSlider({Text = "Size", Flag = "Player Icon Size", Min = 12, Max = 32, Default = 20, Increment = 1, Suffix = " px"})
    local AmmoText = PlayerExtras:AddToggle({Text = "Ammo Text", Flag = "Player Ammo Text", Default = false})
    Colors["Player Ammo Color"] = AmmoText:AddColorPicker({Text = "Ammo Color", Flag = "Player Ammo Color", Default = White})
    PlayerExtras:AddToggle({Text = "Ammo Bar", Flag = "Player Ammo Bar", Default = false}):Settings():AddSlider({Text = "Height", Flag = "Player Ammo Bar Height", Min = 3, Max = 8, Default = 4, Increment = 1, Suffix = " px"})
    local HeadDot = PlayerExtras:AddToggle({Text = "Head Dot", Flag = "Player Head Dot", Default = false})
    Colors["Player Head Dot Color"] = HeadDot:AddColorPicker({Text = "Dot Color", Flag = "Player Head Dot Color", Default = White})
    HeadDot:Settings():AddSlider({Text = "Size", Flag = "Player Head Dot Size", Min = 2, Max = 15, Default = 5, Increment = 1, Suffix = " px"})
    local Offscreen = PlayersPage:AddSection({Title = "Offscreen", Icon = "Bullseye", Side = 2})
    local Arrows = Offscreen:AddToggle({Text = "Offscreen Arrows", Flag = "Player Offscreen Arrows", Default = false})
    Colors["Player Arrow Color"] = Arrows:AddColorPicker({Text = "Arrow Color", Flag = "Player Arrow Color", Default = White})
    local ChamsSection = PlayersPage:AddSection({Title = "Chams", Icon = "Cube", Side = 2})
    local Chams = ChamsSection:AddToggle({Text = "Chams", Flag = "Player Chams", Default = false})
    Colors["Player Chams Color"] = Chams:AddColorPicker({Text = "Fill Color", Flag = "Player Chams Color", Default = Color3.fromRGB(255, 70, 70)})
    Colors["Player Chams Outline Color"] = Chams:AddColorPicker({Text = "Outline Color", Flag = "Player Chams Outline Color", Default = White})
    Chams:Settings():AddSlider({Text = "Opacity", Flag = "Player Chams Opacity", Min = 0, Max = 1, Default = 0.35, Increment = 0.01})
    local C4 = C4Page:AddSection({Title = "C4", Icon = "Bomb", Side = 1})
    C4:AddToggle({Text = "Enabled", Flag = "Bomb ESP", Default = false})
    local C4Box = C4:AddToggle({Text = "Box", Flag = "C4 Box", Default = false})
    Colors["C4 Box Color"] = C4Box:AddColorPicker({Text = "Box Color", Flag = "C4 Box Color", Default = White})
    local C4BoxSettings = C4Box:Settings()
    C4BoxSettings:AddSlider({Text = "Thickness", Flag = "C4 Box Thickness", Min = 1, Max = 4, Default = 1, Increment = 1})
    C4BoxSettings:AddToggle({Text = "Outline", Flag = "C4 Box Outline", Default = false})
    local C4Fill = C4BoxSettings:AddToggle({Text = "Fill", Flag = "C4 Box Fill", Default = false})
    Colors["C4 Box Fill Color"] = C4Fill:AddColorPicker({Text = "Fill Color", Flag = "C4 Box Fill Color", Default = White})
    C4Fill:Settings():AddSlider({Text = "Opacity", Flag = "C4 Box Fill Opacity", Min = 0, Max = 1, Default = 0.2, Increment = 0.01})
    local C4Gradient = C4Fill:Settings():AddToggle({Text = "Gradient", Flag = "C4 Box Gradient", Default = false})
    Colors["C4 Box Gradient Color"] = C4Gradient:AddColorPicker({Text = "End Color", Flag = "C4 Box Gradient Color", Default = White})
    C4Gradient:Settings():AddSlider({Text = "Rotation", Flag = "C4 Box Gradient Rotation", Min = -180, Max = 180, Default = 90, Increment = 1, Suffix = "°"})
    local C4Name = C4:AddToggle({Text = "Name", Flag = "C4 Name", Default = false})
    Colors["C4 Name Color"] = C4Name:AddColorPicker({Text = "Name Color", Flag = "C4 Name Color", Default = White})
    local C4Distance = C4:AddToggle({Text = "Distance", Flag = "C4 Distance", Default = false})
    Colors["C4 Distance Color"] = C4Distance:AddColorPicker({Text = "Distance Color", Flag = "C4 Distance Color", Default = White})
    local C4Icon = C4:AddToggle({Text = "Icon", Flag = "C4 Icon", Default = false})
    Colors["C4 Icon Color"] = C4Icon:AddColorPicker({Text = "Icon Color", Flag = "C4 Icon Color", Default = White})
    local C4Timer = C4:AddToggle({Text = "Explosion Time", Flag = "C4 Timer Text", Default = false})
    Colors["C4 Timer Color"] = C4Timer:AddColorPicker({Text = "Timer Color", Flag = "C4 Timer Color", Default = Color3.fromRGB(255, 120, 90)})
    C4:AddToggle({Text = "Explosion Bar", Flag = "C4 Timer Bar", Default = false})
    for Flag, Element in Library.Elements do
        if not Existing[Flag] and Element.OnChanged then Element:OnChanged(function() State.UI:RefreshPreview() end) end
    end
end

do
    local Library = State.Library
    local Window = State.UI.Window
    local Colors = State.UI.Colors
    local White, Black = Color3.new(1, 1, 1), Color3.new(0, 0, 0)
    local WorldPage, DroppedPage, EffectsPage = State.UI.Tabs.World, State.UI.Tabs.World, State.UI.Tabs.Effects
    local Dropped = DroppedPage:AddSection({Title = "Dropped Weapons", Icon = "Gun", Side = 1})
    Dropped:AddToggle({Text = "Enabled", Flag = "DroppedWeapon ESP", Default = false})
    local DroppedBox = Dropped:AddToggle({Text = "Box", Flag = "Dropped Box", Default = false})
    Colors["Dropped Box Color"] = DroppedBox:AddColorPicker({Text = "Box Color", Flag = "Dropped Box Color", Default = White})
    local DroppedBoxSettings = DroppedBox:Settings()
    DroppedBoxSettings:AddSlider({Text = "Thickness", Flag = "Dropped Box Thickness", Min = 1, Max = 4, Default = 1, Increment = 1})
    DroppedBoxSettings:AddToggle({Text = "Outline", Flag = "Dropped Box Outline", Default = false})
    local DroppedFill = DroppedBoxSettings:AddToggle({Text = "Fill", Flag = "Dropped Box Fill", Default = false})
    Colors["Dropped Box Fill Color"] = DroppedFill:AddColorPicker({Text = "Fill Color", Flag = "Dropped Box Fill Color", Default = White})
    DroppedFill:Settings():AddSlider({Text = "Opacity", Flag = "Dropped Box Fill Opacity", Min = 0, Max = 1, Default = 0.2, Increment = 0.01})
    local DroppedGradient = DroppedFill:Settings():AddToggle({Text = "Gradient", Flag = "Dropped Box Gradient", Default = false})
    Colors["Dropped Box Gradient Color"] = DroppedGradient:AddColorPicker({Text = "End Color", Flag = "Dropped Box Gradient Color", Default = White})
    DroppedGradient:Settings():AddSlider({Text = "Rotation", Flag = "Dropped Box Gradient Rotation", Min = -180, Max = 180, Default = 90, Increment = 1, Suffix = "°"})
    local DroppedName = Dropped:AddToggle({Text = "Name", Flag = "Dropped Name", Default = false})
    Colors["Dropped Name Color"] = DroppedName:AddColorPicker({Text = "Name Color", Flag = "Dropped Name Color", Default = White})
    local DroppedDistance = Dropped:AddToggle({Text = "Distance", Flag = "Dropped Distance", Default = false})
    Colors["Dropped Distance Color"] = DroppedDistance:AddColorPicker({Text = "Distance Color", Flag = "Dropped Distance Color", Default = White})
    local DroppedIcon = Dropped:AddToggle({Text = "Icon", Flag = "Dropped Icon", Default = false})
    Colors["Dropped Icon Color"] = DroppedIcon:AddColorPicker({Text = "Icon Color", Flag = "Dropped Icon Color", Default = White})
    local DroppedAmmo = Dropped:AddToggle({Text = "Ammo Text", Flag = "Dropped Ammo Text", Default = false})
    Colors["Dropped Ammo Color"] = DroppedAmmo:AddColorPicker({Text = "Ammo Color", Flag = "Dropped Ammo Color", Default = White})
    Dropped:AddToggle({Text = "Ammo Bar", Flag = "Dropped Ammo Bar", Default = false})

    local HitEffects = EffectsPage:AddSection({Title = "Hits", Icon = "Globe", Side = 1})
    local HitNotification = HitEffects:AddToggle({Text = "Hit Notification", Flag = "Hit Notification", Default = false})
    Colors["Hit Notification Color"] = HitNotification:AddColorPicker({Text = "Notification Color", Flag = "Hit Notification Color", Default = White})
    local HitSound = HitEffects:AddToggle({Text = "Hit Sound", Flag = "Hit Sound", Default = false})
    local HitSoundSettings = HitSound:Settings()
    HitSoundSettings:AddDropdown({Text = "Headshot Preset", Flag = "Headshot Sound Preset", Options = {"Custom", "Primordial", "Neverlose", "Sparkle", "MC Bow", "Skeet", "Break", "Rust"}, Default = "Custom"})
    HitSoundSettings:AddDropdown({Text = "Bodyshot Preset", Flag = "Bodyshot Sound Preset", Options = {"Custom", "Primordial", "Neverlose", "Sparkle", "MC Bow", "Skeet", "Break", "Rust"}, Default = "Custom"})
    HitSoundSettings:AddInput({Text = "Headshot Sound ID Or File", Flag = "Headshot Sound", Default = ""})
    HitSoundSettings:AddInput({Text = "Bodyshot Sound ID Or File", Flag = "Bodyshot Sound", Default = ""})
    HitSoundSettings:AddSlider({Text = "Volume", Flag = "Hit Sound Volume", Min = 0, Max = 5, Default = 1, Increment = 0.1})
    HitSoundSettings:AddSlider({Text = "Speed", Flag = "Hit Sound Speed", Min = 0.5, Max = 2, Default = 1, Increment = 0.05})
    HitSoundSettings:AddButton({Text = "Preview Headshot", Callback = function() if State.Controllers.Effects then State.Controllers.Effects:PreviewHitSound(true) end end})
    HitSoundSettings:AddButton({Text = "Preview Bodyshot", Callback = function() if State.Controllers.Effects then State.Controllers.Effects:PreviewHitSound(false) end end})
    local Tracer = EffectsPage:AddSection({Title = "Bullets", Icon = "Globe", Side = 2}):AddToggle({Text = "Bullet Tracer", Flag = "Bullet Tracer", Default = false})
    Colors["Bullet Tracer Color"] = Tracer:AddColorPicker({Text = "Tracer Color", Flag = "Bullet Tracer Color", Default = White})
    local TracerSettings = Tracer:Settings()
    TracerSettings:AddDropdown({Text = "Style", Flag = "Bullet Tracer Style", Options = {"Solid", "Laser", "Light", "Flow"}, Default = "Solid"})
    TracerSettings:AddSlider({Text = "Lifetime", Flag = "Bullet Tracer Lifetime", Min = 0.1, Max = 10, Default = 2, Increment = 0.1, Suffix = " s"})
    TracerSettings:AddSlider({Text = "Width", Flag = "Bullet Tracer Width", Min = 0.01, Max = 1, Default = 0.05, Increment = 0.01})
    TracerSettings:AddSlider({Text = "Opacity", Flag = "Bullet Tracer Opacity", Min = 0, Max = 1, Default = 0.9, Increment = 0.01})
    TracerSettings:AddSlider({Text = "Texture Speed", Flag = "Bullet Tracer Texture Speed", Min = 0, Max = 5, Default = 1.5, Increment = 0.1})
    Colors["Bullet Tracer End Color"] = TracerSettings:AddToggle({Text = "Gradient", Flag = "Bullet Tracer Gradient", Default = false}):AddColorPicker({Text = "End Color", Flag = "Bullet Tracer End Color", Default = Color3.fromRGB(180, 130, 255)})
    local Impact = EffectsPage:AddSection({Title = "Impacts", Icon = "Globe", Side = 2}):AddToggle({Text = "Bullet Impact", Flag = "Bullet Impact", Default = false})
    Colors["Bullet Impact Color"] = Impact:AddColorPicker({Text = "Impact Color", Flag = "Bullet Impact Color", Default = Color3.fromRGB(255, 70, 70)})
    local ImpactSettings = Impact:Settings()
    ImpactSettings:AddSlider({Text = "Lifetime", Flag = "Bullet Impact Lifetime", Min = 0.1, Max = 10, Default = 2, Increment = 0.1, Suffix = " s"})
    ImpactSettings:AddSlider({Text = "Size", Flag = "Bullet Impact Size", Min = 0.1, Max = 1, Default = 0.3, Increment = 0.05})
    local SoundESP = EffectsPage:AddSection({Title = "Sound ESP", Icon = "Globe", Side = 1}):AddToggle({Text = "Sound ESP", Flag = "Sound ESP", Default = false})
    Colors["Sound ESP Color"] = SoundESP:AddColorPicker({Text = "Text Color", Flag = "Sound ESP Color", Default = White})
    local SoundSettings = SoundESP:Settings()
    SoundSettings:AddMultiDropdown({Text = "Sounds", Flag = "Sound ESP Types", Options = {"Weapons", "Bomb", "Footsteps", "Impacts", "Items", "Misc", "Other"}, Default = {}})
    SoundSettings:AddSlider({Text = "Lifetime", Flag = "Sound ESP Lifetime", Min = 1, Max = 15, Default = 4, Increment = 1, Suffix = " s"})
    local ShootSound = EffectsPage:AddSection({Title = "Shoot Sound", Icon = "Globe", Side = 1}):AddToggle({Text = "Custom Shoot Sound", Flag = "Custom Shoot Sound", Default = false})
    local ShootSettings = ShootSound:Settings()
    ShootSettings:AddInput({Text = "Sound ID Or File", Flag = "Shoot Sound Id", Default = ""})
    ShootSettings:AddSlider({Text = "Volume", Flag = "Shoot Sound Volume", Min = 0, Max = 5, Default = 1, Increment = 0.1})
    ShootSettings:AddSlider({Text = "Speed", Flag = "Shoot Sound Speed", Min = 0.5, Max = 2, Default = 1, Increment = 0.05})
    ShootSettings:AddToggle({Text = "Replace Original", Flag = "Replace Shoot Sound", Default = false})

    do
    local World = WorldPage:AddSection({Title = "Lighting", Icon = "Globe", Side = 1})
    local Bright = World:AddToggle({Text = "Fullbright", Flag = "Fullbright", Default = false})
    local BrightSettings = Bright:Settings()
    BrightSettings:AddSlider({Text = "Brightness", Flag = "World Brightness", Min = 0, Max = 10, Default = 2, Increment = 0.1})
    BrightSettings:AddDropdown({Text = "Shadows", Flag = "World Shadows", Options = {"Off", "On"}, Default = "Off"})
    local Shadows = World:AddToggle({Text = "Global Shadows", Flag = "Global Shadows Enabled", Default = false})
    Shadows:Settings():AddDropdown({Text = "State", Flag = "Global Shadows", Options = {"Off", "On"}, Default = "On"})
    local Time = World:AddToggle({Text = "Time Changer", Flag = "Custom Time", Default = false})
    Time:Settings():AddSlider({Text = "Clock Time", Flag = "Clock Time", Min = 0, Max = 24, Default = 12, Increment = 0.1, Suffix = " h"})
    local Ambient = World:AddToggle({Text = "Ambient Changer", Flag = "Ambient Override", Default = false})
    Colors["Ambient Color"] = Ambient:AddColorPicker({Text = "Ambient Color", Flag = "Ambient Color", Default = Color3.fromRGB(178, 178, 178)})
    local Fog = World:AddToggle({Text = "Remove Fog", Flag = "Remove Fog", Default = false})
    Fog:Settings():AddSlider({Text = "Distance", Flag = "Fog Distance", Min = 1000, Max = 1000000, Default = 1000000, Increment = 1000, Suffix = " st"})
    local Exposure = World:AddToggle({Text = "Exposure", Flag = "Exposure Changer", Default = false})
    Exposure:Settings():AddSlider({Text = "Compensation", Flag = "World Exposure", Min = -3, Max = 3, Default = 0, Increment = 0.05})
    local Environment = World:AddToggle({Text = "Environment Lighting", Flag = "Environment Changer", Default = false})
    Colors["Light Top Color"] = Environment:AddColorPicker({Text = "Top Light", Flag = "Light Top Color", Default = Color3.new(0, 0, 0)})
    Colors["Light Bottom Color"] = Environment:AddColorPicker({Text = "Bottom Light", Flag = "Light Bottom Color", Default = Color3.new(0, 0, 0)})
    local EnvironmentSettings = Environment:Settings()
    EnvironmentSettings:AddSlider({Text = "Diffuse", Flag = "Environment Diffuse", Min = 0, Max = 1, Default = 1, Increment = 0.01})
    EnvironmentSettings:AddSlider({Text = "Reflections", Flag = "Environment Specular", Min = 0, Max = 1, Default = 1, Increment = 0.01})
    EnvironmentSettings:AddSlider({Text = "Sun Latitude", Flag = "Sun Latitude", Min = -90, Max = 90, Default = 41.73, Increment = 0.1, Suffix = "°"})
    local Post = WorldPage:AddSection({Title = "Post Processing", Icon = "Globe", Side = 2})
    local Bloom = Post:AddToggle({Text = "Bloom", Flag = "Bloom Changer", Default = false})
    local BloomSettings = Bloom:Settings()
    BloomSettings:AddSlider({Text = "Intensity", Flag = "Bloom Intensity", Min = 0, Max = 5, Default = 0.6, Increment = 0.01})
    BloomSettings:AddSlider({Text = "Size", Flag = "Bloom Size", Min = 0, Max = 56, Default = 24, Increment = 1})
    BloomSettings:AddSlider({Text = "Threshold", Flag = "Bloom Threshold", Min = 0, Max = 4, Default = 0.9, Increment = 0.01})
    local Grade = Post:AddToggle({Text = "Color Grading", Flag = "Color Grading", Default = false})
    Colors["Grade Tint"] = Grade:AddColorPicker({Text = "Tint", Flag = "Grade Tint", Default = White})
    local GradeSettings = Grade:Settings()
    GradeSettings:AddSlider({Text = "Brightness", Flag = "Grade Brightness", Min = -1, Max = 1, Default = 0, Increment = 0.01})
    GradeSettings:AddSlider({Text = "Contrast", Flag = "Grade Contrast", Min = -1, Max = 1, Default = 0.15, Increment = 0.01})
    GradeSettings:AddSlider({Text = "Saturation", Flag = "Grade Saturation", Min = -1, Max = 1, Default = 0.2, Increment = 0.01})
    local Depth = Post:AddToggle({Text = "Depth Of Field", Flag = "Depth Of Field", Default = false})
    local DepthSettings = Depth:Settings()
    DepthSettings:AddSlider({Text = "Focus Distance", Flag = "Focus Distance", Min = 0, Max = 500, Default = 25, Increment = 1, Suffix = " st"})
    DepthSettings:AddSlider({Text = "Focus Radius", Flag = "Focus Radius", Min = 0, Max = 500, Default = 20, Increment = 1, Suffix = " st"})
    DepthSettings:AddSlider({Text = "Near Blur", Flag = "Near Blur", Min = 0, Max = 1, Default = 0.1, Increment = 0.01})
    DepthSettings:AddSlider({Text = "Far Blur", Flag = "Far Blur", Min = 0, Max = 1, Default = 0.3, Increment = 0.01})
    local Air = WorldPage:AddSection({Title = "Atmosphere And Fog", Icon = "Globe", Side = 1})
    local Atmosphere = Air:AddToggle({Text = "Atmosphere", Flag = "Atmosphere Changer", Default = false})
    Colors["Atmosphere Color"] = Atmosphere:AddColorPicker({Text = "Color", Flag = "Atmosphere Color", Default = Color3.fromRGB(204, 217, 255)})
    Colors["Atmosphere Decay"] = Atmosphere:AddColorPicker({Text = "Decay", Flag = "Atmosphere Decay", Default = Color3.fromRGB(102, 115, 140)})
    local AtmosphereSettings = Atmosphere:Settings()
    AtmosphereSettings:AddSlider({Text = "Density", Flag = "Atmosphere Density", Min = 0, Max = 1, Default = 0.3, Increment = 0.01})
    AtmosphereSettings:AddSlider({Text = "Offset", Flag = "Atmosphere Offset", Min = -1, Max = 1, Default = 0, Increment = 0.01})
    AtmosphereSettings:AddSlider({Text = "Haze", Flag = "Atmosphere Haze", Min = 0, Max = 10, Default = 1, Increment = 0.1})
    AtmosphereSettings:AddSlider({Text = "Glare", Flag = "Atmosphere Glare", Min = 0, Max = 10, Default = 0, Increment = 0.1})
    local CustomFog = Air:AddToggle({Text = "Custom Fog", Flag = "Fog Changer", Default = false})
    Colors["World Fog Color"] = CustomFog:AddColorPicker({Text = "Fog Color", Flag = "World Fog Color", Default = Color3.fromRGB(178, 191, 204)})
    local FogSettings = CustomFog:Settings()
    FogSettings:AddSlider({Text = "Start", Flag = "World Fog Start", Min = 0, Max = 5000, Default = 0, Increment = 1, Suffix = " st"})
    FogSettings:AddSlider({Text = "End", Flag = "World Fog End", Min = 1, Max = 10000, Default = 500, Increment = 1, Suffix = " st"})
    local Water = WorldPage:AddSection({Title = "Water", Icon = "Globe", Side = 2}):AddToggle({Text = "Water Changer", Flag = "Water Changer", Default = false})
    Colors["Water Color"] = Water:AddColorPicker({Text = "Water Color", Flag = "Water Color", Default = Color3.fromRGB(26, 102, 128)})
    local WaterSettings = Water:Settings()
    WaterSettings:AddSlider({Text = "Transparency", Flag = "Water Transparency", Min = 0, Max = 1, Default = 0.3, Increment = 0.01})
    WaterSettings:AddSlider({Text = "Reflectance", Flag = "Water Reflectance", Min = 0, Max = 1, Default = 0.5, Increment = 0.01})
    WaterSettings:AddSlider({Text = "Wave Size", Flag = "Water Wave Size", Min = 0, Max = 1, Default = 0.15, Increment = 0.01})
    WaterSettings:AddSlider({Text = "Wave Speed", Flag = "Water Wave Speed", Min = 0, Max = 100, Default = 10, Increment = 1})
    local Sun = WorldPage:AddSection({Title = "Sun And Clouds", Icon = "Globe", Side = 2}):AddToggle({Text = "Sunrays Changer", Flag = "Sunrays Changer", Default = false})
    local SunSettings = Sun:Settings()
    SunSettings:AddSlider({Text = "Intensity", Flag = "Sunrays Intensity", Min = 0, Max = 1, Default = 0.25, Increment = 0.01})
    SunSettings:AddSlider({Text = "Spread", Flag = "Sunrays Spread", Min = 0, Max = 1, Default = 1, Increment = 0.01})
    local Clouds = WorldPage:AddSection({Title = "Clouds", Icon = "Globe", Side = 2}):AddToggle({Text = "Cloud Changer", Flag = "Cloud Changer", Default = false})
    Colors["Cloud Color"] = Clouds:AddColorPicker({Text = "Cloud Color", Flag = "Cloud Color", Default = White})
    local CloudSettings = Clouds:Settings()
    CloudSettings:AddSlider({Text = "Cover", Flag = "Cloud Cover", Min = 0, Max = 1, Default = 0.5, Increment = 0.01})
    CloudSettings:AddSlider({Text = "Density", Flag = "Cloud Density", Min = 0, Max = 1, Default = 0.6, Increment = 0.01})
    local Weather = WorldPage:AddSection({Title = "Weather", Icon = "Globe", Side = 1})
    local Rain = Weather:AddToggle({Text = "Rain", Flag = "Rain", Default = false})
    Colors["Rain Color"] = Rain:AddColorPicker({Text = "Rain Color", Flag = "Rain Color", Default = Color3.fromRGB(204, 217, 255), EnableAlpha = true})
    local RainSettings = Rain:Settings()
    RainSettings:AddSlider({Text = "Intensity", Flag = "Rain Intensity", Min = 0, Max = 1, Default = 0.45, Increment = 0.01})
    RainSettings:AddSlider({Text = "Opacity", Flag = "Rain Opacity", Min = 0, Max = 1, Default = 0.65, Increment = 0.01})
    RainSettings:AddSlider({Text = "Speed", Flag = "Rain Speed", Min = 0.1, Max = 1, Default = 0.8, Increment = 0.01})
    RainSettings:AddSlider({Text = "Radius", Flag = "Rain Radius", Min = 24, Max = 80, Default = 48, Increment = 1, Suffix = " studs"})
    RainSettings:AddSlider({Text = "Light Emission", Flag = "Rain Light Emission", Min = 0, Max = 1, Default = 0.05, Increment = 0.01})
    RainSettings:AddSlider({Text = "Light Influence", Flag = "Rain Light Influence", Min = 0, Max = 1, Default = 0.9, Increment = 0.01})
    RainSettings:AddToggle({Text = "Roof Check", Flag = "Rain Roof Check", Default = false})
    Weather:AddToggle({Text = "Splashes", Flag = "Rain Splashes", Default = false})
    local RainWind = Weather:AddToggle({Text = "Wind", Flag = "Rain Wind", Default = false})
    local WindSettings = RainWind:Settings()
    WindSettings:AddSlider({Text = "Strength", Flag = "Rain Wind Strength", Min = 0, Max = 2, Default = 0.25, Increment = 0.01})
    WindSettings:AddSlider({Text = "Direction", Flag = "Rain Wind Direction", Min = 0, Max = 360, Default = 0, Increment = 1, Suffix = "°"})
    local RainSound = Weather:AddToggle({Text = "Rain Sound", Flag = "Rain Sound", Default = false})
    RainSound:Settings():AddSlider({Text = "Volume", Flag = "Rain Volume", Min = 0, Max = 1, Default = 0.2, Increment = 0.01})
    local Snow = Weather:AddToggle({Text = "Snow", Flag = "Snow", Default = false})
    Colors["Snow Color"] = Snow:AddColorPicker({Text = "Snow Color", Flag = "Snow Color", Default = White, EnableAlpha = true})
    local SnowSettings = Snow:Settings()
    SnowSettings:AddSlider({Text = "Density", Flag = "Snow Density", Min = 1, Max = 250, Default = 90, Increment = 1})
    SnowSettings:AddSlider({Text = "Size", Flag = "Snow Size", Min = 0.05, Max = 1, Default = 0.15, Increment = 0.01})
    SnowSettings:AddSlider({Text = "Speed", Flag = "Snow Speed", Min = 1, Max = 20, Default = 6, Increment = 0.1})
    SnowSettings:AddSlider({Text = "Radius", Flag = "Snow Radius", Min = 10, Max = 80, Default = 35, Increment = 1})
    SnowSettings:AddSlider({Text = "Drift", Flag = "Snow Drift", Min = -10, Max = 10, Default = 1, Increment = 0.1})
    SnowSettings:AddSlider({Text = "Glow", Flag = "Snow Glow", Min = 0, Max = 1, Default = 0.2, Increment = 0.01})
    SnowSettings:AddInput({Text = "Custom Texture ID", Flag = "Snow Texture", Default = ""})
    do
        local Orbs = Weather:AddToggle({Text = "Floating Orbs", Flag = "Orbs", Default = false})
        Colors["Orbs Color"] = Orbs:AddColorPicker({Text = "Orb Color", Flag = "Orbs Color", Default = Color3.fromRGB(170, 150, 255), EnableAlpha = true})
        local OrbSettings = Orbs:Settings()
        OrbSettings:AddSlider({Text = "Count", Flag = "Orbs Count", Min = 5, Max = 100, Default = 24, Increment = 1})
        OrbSettings:AddSlider({Text = "Size", Flag = "Orbs Size", Min = 0.05, Max = 2, Default = 0.22, Increment = 0.01})
        OrbSettings:AddSlider({Text = "Speed", Flag = "Orbs Speed", Min = 0, Max = 5, Default = 0.6, Increment = 0.1})
        OrbSettings:AddSlider({Text = "Radius", Flag = "Orbs Radius", Min = 5, Max = 80, Default = 12, Increment = 1})
        OrbSettings:AddSlider({Text = "Glow", Flag = "Orbs Glow", Min = 0, Max = 1, Default = 0.7, Increment = 0.01})
        OrbSettings:AddInput({Text = "Custom Texture ID", Flag = "Orbs Texture", Default = ""})
    end
    local Sky = WorldPage:AddSection({Title = "Sky", Icon = "Globe", Side = 2}):AddToggle({Text = "Custom Sky", Flag = "Custom Sky", Default = false})
    local SkySettings = Sky:Settings()
    local SkyFields, SkyPreset = {}, nil
    local function ShowSkyFields(Value)
        local Selected = type(Value) == "string" and Value or SkyPreset and SkyPreset:Get()
        for _, Field in SkyFields do Field:SetVisible(Selected == "Custom") end
    end
    SkyPreset = SkySettings:AddDropdown({Text = "Preset", Flag = "Sky Preset", Options = {"Sunset", "Galaxy", "Red Night", "Warm Horizon", "Custom"}, Default = "Sunset", Callback = ShowSkyFields})
    table.insert(SkyFields, SkySettings:AddInput({Text = "All Faces ID", Flag = "Sky All Faces", Default = ""}))
    for _, Face in {"Back", "Down", "Front", "Left", "Right", "Up"} do
        table.insert(SkyFields, SkySettings:AddInput({Text = Face .. " ID", Flag = "Sky " .. Face, Default = ""}))
    end
    ShowSkyFields()

    end
end

do
    local Library = State.Library
    local Window = State.UI.Window
    local Colors = State.UI.Colors
    local White, Black = Color3.new(1, 1, 1), Color3.new(0, 0, 0)
    local LocalPage = State.UI.Tabs.Local
    local Cosmetics = LocalPage:AddSection({Title = "Cosmetics", Icon = "Brush", Side = 1})
    local Skins = Cosmetics:AddToggle({Text = "Skin Changer", Flag = "Skin Changer", Default = false})
    local KnifeModel = Skins:Settings():AddDropdown({Text = "Knife Model", Flag = "Knife Model", Options = {"Default"}, Default = "Default"})
    State.UI.KnifeModel = KnifeModel
    local Avatar
    Avatar = Cosmetics:AddToggle({Text = "Avatar Replacer", Flag = "Avatar Replacer", Default = false, Callback = function(Enabled)
        local Controller = State.Controllers.Avatar
        if not Controller then return end
        if Enabled then
            Controller:Apply(Library.Flags["Avatar User ID"], function(Okay) if Okay == false then Avatar:Set(false, true) end end)
        else Controller:Disable() end
    end})
    Avatar:Settings():AddInput({Text = "User ID", Flag = "Avatar User ID", Default = "", Placeholder = "Roblox user ID"})
    Avatar:Settings():AddButton({Text = "Apply Avatar", Callback = function()
        local Controller = State.Controllers.Avatar
        if Controller then Controller:Apply(Library.Flags["Avatar User ID"], function(Okay) Avatar:Set(Okay == true, true) end) end
    end})
    State.UI.AvatarToggle = Avatar
    local Camera = LocalPage:AddSection({Title = "Camera", Icon = "User", Side = 1})
    local FOV = Camera:AddToggle({Text = "FOV Changer", Flag = "FOV Override", Default = false})
    FOV:Settings():AddSlider({Text = "Field Of View", Flag = "Field of View", Min = 40, Max = 120, Default = 90, Increment = 1, Suffix = "°"})
    local Aspect = Camera:AddToggle({Text = "Aspect Ratio", Flag = "Aspect Ratio Enabled", Default = false})
    local AspectSettings = Aspect:Settings()
    AspectSettings:AddSlider({Text = "Horizontal", Flag = "Aspect Horizontal", Min = 0.25, Max = 3, Default = 1, Increment = 0.01, Suffix = "x"})
    AspectSettings:AddSlider({Text = "Vertical", Flag = "Aspect Vertical", Min = 0.25, Max = 3, Default = 1, Increment = 0.01, Suffix = "x"})
    local Zoom = Camera:AddToggle({Text = "Zoom Override", Flag = "Zoom Override", Default = false})
    Zoom:Settings():AddSlider({Text = "Distance", Flag = "Max Zoom", Min = 0, Max = 128, Default = 16, Increment = 0.5, Suffix = " st"})
    local ThirdPerson = LocalPage:AddSection({Title = "Third Person", Icon = "Eye", Side = 2}):AddToggle({Text = "Third Person", Flag = "Third Person", Default = false})
    ThirdPerson:AddKeybind({Mode = "Toggle"})
    ThirdPerson:Settings():AddSlider({Text = "Distance", Flag = "Third Person Distance", Min = 3, Max = 30, Default = 12, Increment = 1, Suffix = " st"})
    local Viewmodel = LocalPage:AddSection({Title = "Viewmodel", Icon = "User", Side = 2})
    Viewmodel:AddToggle({Text = "Remove Gloves", Flag = "Remove Viewmodel Gloves", Default = false})
    Viewmodel:AddToggle({Text = "Remove Sleeves", Flag = "Remove Viewmodel Sleeves", Default = false})
    do
        local Reticle = LocalPage:AddSection({Title = "Crosshair & Scope", Icon = "Bullseye", Side = 2})
        local Crosshair = Reticle:AddToggle({Text = "Custom Crosshair", Flag = "Custom Crosshair", Default = false})
        Colors["Crosshair Color"] = Crosshair:AddColorPicker({Text = "Color", Flag = "Crosshair Color", Default = White, EnableAlpha = true})
        local Options = Crosshair:Settings()
        Options:AddSlider({Text = "Length", Flag = "Crosshair Length", Min = 1, Max = 30, Default = 6, Increment = 1})
        Options:AddSlider({Text = "Gap", Flag = "Crosshair Gap", Min = 0, Max = 30, Default = 4, Increment = 1})
        Options:AddSlider({Text = "Thickness", Flag = "Crosshair Thickness", Min = 1, Max = 6, Default = 2, Increment = 1})
        Options:AddToggle({Text = "Center Dot", Flag = "Crosshair Dot", Default = true})
        Options:AddToggle({Text = "Hide While Scoped", Flag = "Crosshair Hide Scoped", Default = true})
        Reticle:AddToggle({Text = "Override Scope Image", Flag = "Override Scope Image", Default = false}):Settings()
            :AddInput({Text = "Image Asset ID", Flag = "Scope Image", Default = "", Placeholder = "Roblox image asset ID"})
    end
    do
        local LocalChams = LocalPage:AddSection({Title = "Local Chams", Icon = "Cube", Side = 2})
        local CharacterChams = LocalChams:AddToggle({Text = "Character", Flag = "Local Character Chams", Default = false})
        Colors["Local Character Chams Color"] = CharacterChams:AddColorPicker({Text = "Fill Color", Flag = "Local Character Chams Color", Default = Color3.fromRGB(160, 110, 255), EnableAlpha = true})
        local CharacterSettings = CharacterChams:Settings()
        CharacterSettings:AddDropdown({Text = "Style", Flag = "Local Character Chams Style", Options = {"Flat", "Neon", "ForceField", "Glass", "Metal"}, Default = "Flat"})
        CharacterSettings:AddSlider({Text = "Opacity", Flag = "Local Character Chams Opacity", Min = 0, Max = 1, Default = 0.65, Increment = 0.01})
        local CharacterWire = CharacterSettings:AddToggle({Text = "Wireframe", Flag = "Local Character Chams Wireframe", Default = false})
        Colors["Local Character Chams Wireframe Color"] = CharacterWire:AddColorPicker({Text = "Wireframe Color", Flag = "Local Character Chams Wireframe Color", Default = White, EnableAlpha = true})
        local CharacterWireSettings = CharacterWire:Settings()
        CharacterWireSettings:AddSlider({Text = "Opacity", Flag = "Local Character Chams Wireframe Opacity", Min = 0, Max = 1, Default = 1, Increment = 0.01})
        CharacterWireSettings:AddSlider({Text = "Thickness", Flag = "Local Character Chams Wireframe Thickness", Min = 0.5, Max = 4, Default = 1, Increment = 0.1, Suffix = " px"})
        local CharacterPulse = CharacterSettings:AddToggle({Text = "Pulse", Flag = "Local Character Chams Pulse", Default = false})
        local CharacterPulseSettings = CharacterPulse:Settings()
        CharacterPulseSettings:AddSlider({Text = "Speed", Flag = "Local Character Chams Pulse Speed", Min = 0.1, Max = 5, Default = 1, Increment = 0.1, Suffix = " Hz"})
        CharacterPulseSettings:AddSlider({Text = "Minimum Opacity", Flag = "Local Character Chams Pulse Minimum", Min = 0, Max = 1, Default = 0.25, Increment = 0.01})
        local ArmsChams = LocalChams:AddToggle({Text = "Arms", Flag = "Local Arms Chams", Default = false})
        Colors["Local Arms Chams Color"] = ArmsChams:AddColorPicker({Text = "Fill Color", Flag = "Local Arms Chams Color", Default = Color3.fromRGB(160, 110, 255), EnableAlpha = true})
        local ArmsSettings = ArmsChams:Settings()
        ArmsSettings:AddDropdown({Text = "Style", Flag = "Local Arms Chams Style", Options = {"Flat", "Neon", "ForceField", "Glass", "Metal"}, Default = "Flat"})
        ArmsSettings:AddSlider({Text = "Opacity", Flag = "Local Arms Chams Opacity", Min = 0, Max = 1, Default = 0.65, Increment = 0.01})
        local ArmsWire = ArmsSettings:AddToggle({Text = "Wireframe", Flag = "Local Arms Chams Wireframe", Default = false})
        Colors["Local Arms Chams Wireframe Color"] = ArmsWire:AddColorPicker({Text = "Wireframe Color", Flag = "Local Arms Chams Wireframe Color", Default = White, EnableAlpha = true})
        local ArmsWireSettings = ArmsWire:Settings()
        ArmsWireSettings:AddSlider({Text = "Opacity", Flag = "Local Arms Chams Wireframe Opacity", Min = 0, Max = 1, Default = 1, Increment = 0.01})
        ArmsWireSettings:AddSlider({Text = "Thickness", Flag = "Local Arms Chams Wireframe Thickness", Min = 0.5, Max = 4, Default = 1, Increment = 0.1, Suffix = " px"})
        local ArmsPulse = ArmsSettings:AddToggle({Text = "Pulse", Flag = "Local Arms Chams Pulse", Default = false})
        local ArmsPulseSettings = ArmsPulse:Settings()
        ArmsPulseSettings:AddSlider({Text = "Speed", Flag = "Local Arms Chams Pulse Speed", Min = 0.1, Max = 5, Default = 1, Increment = 0.1, Suffix = " Hz"})
        ArmsPulseSettings:AddSlider({Text = "Minimum Opacity", Flag = "Local Arms Chams Pulse Minimum", Min = 0, Max = 1, Default = 0.25, Increment = 0.01})
        local GunChams = LocalChams:AddToggle({Text = "Gun", Flag = "Local Gun Chams", Default = false})
        Colors["Local Gun Chams Color"] = GunChams:AddColorPicker({Text = "Fill Color", Flag = "Local Gun Chams Color", Default = Color3.fromRGB(160, 110, 255), EnableAlpha = true})
        local GunSettings = GunChams:Settings()
        GunSettings:AddDropdown({Text = "Style", Flag = "Local Gun Chams Style", Options = {"Flat", "Neon", "ForceField", "Glass", "Metal"}, Default = "Flat"})
        GunSettings:AddSlider({Text = "Opacity", Flag = "Local Gun Chams Opacity", Min = 0, Max = 1, Default = 0.65, Increment = 0.01})
        local GunWire = GunSettings:AddToggle({Text = "Wireframe", Flag = "Local Gun Chams Wireframe", Default = false})
        Colors["Local Gun Chams Wireframe Color"] = GunWire:AddColorPicker({Text = "Wireframe Color", Flag = "Local Gun Chams Wireframe Color", Default = White, EnableAlpha = true})
        local GunWireSettings = GunWire:Settings()
        GunWireSettings:AddSlider({Text = "Opacity", Flag = "Local Gun Chams Wireframe Opacity", Min = 0, Max = 1, Default = 1, Increment = 0.01})
        GunWireSettings:AddSlider({Text = "Thickness", Flag = "Local Gun Chams Wireframe Thickness", Min = 0.5, Max = 4, Default = 1, Increment = 0.1, Suffix = " px"})
        local GunPulse = GunSettings:AddToggle({Text = "Pulse", Flag = "Local Gun Chams Pulse", Default = false})
        local GunPulseSettings = GunPulse:Settings()
        GunPulseSettings:AddSlider({Text = "Speed", Flag = "Local Gun Chams Pulse Speed", Min = 0.1, Max = 5, Default = 1, Increment = 0.1, Suffix = " Hz"})
        GunPulseSettings:AddSlider({Text = "Minimum Opacity", Flag = "Local Gun Chams Pulse Minimum", Min = 0, Max = 1, Default = 0.25, Increment = 0.01})
        local KnifeChams = LocalChams:AddToggle({Text = "Knife", Flag = "Local Knife Chams", Default = false})
        Colors["Local Knife Chams Color"] = KnifeChams:AddColorPicker({Text = "Fill Color", Flag = "Local Knife Chams Color", Default = Color3.fromRGB(160, 110, 255), EnableAlpha = true})
        local KnifeSettings = KnifeChams:Settings()
        KnifeSettings:AddDropdown({Text = "Style", Flag = "Local Knife Chams Style", Options = {"Flat", "Neon", "ForceField", "Glass", "Metal"}, Default = "Flat"})
        KnifeSettings:AddSlider({Text = "Opacity", Flag = "Local Knife Chams Opacity", Min = 0, Max = 1, Default = 0.65, Increment = 0.01})
        local KnifeWire = KnifeSettings:AddToggle({Text = "Wireframe", Flag = "Local Knife Chams Wireframe", Default = false})
        Colors["Local Knife Chams Wireframe Color"] = KnifeWire:AddColorPicker({Text = "Wireframe Color", Flag = "Local Knife Chams Wireframe Color", Default = White, EnableAlpha = true})
        local KnifeWireSettings = KnifeWire:Settings()
        KnifeWireSettings:AddSlider({Text = "Opacity", Flag = "Local Knife Chams Wireframe Opacity", Min = 0, Max = 1, Default = 1, Increment = 0.01})
        KnifeWireSettings:AddSlider({Text = "Thickness", Flag = "Local Knife Chams Wireframe Thickness", Min = 0.5, Max = 4, Default = 1, Increment = 0.1, Suffix = " px"})
        local KnifePulse = KnifeSettings:AddToggle({Text = "Pulse", Flag = "Local Knife Chams Pulse", Default = false})
        local KnifePulseSettings = KnifePulse:Settings()
        KnifePulseSettings:AddSlider({Text = "Speed", Flag = "Local Knife Chams Pulse Speed", Min = 0.1, Max = 5, Default = 1, Increment = 0.1, Suffix = " Hz"})
        KnifePulseSettings:AddSlider({Text = "Minimum Opacity", Flag = "Local Knife Chams Pulse Minimum", Min = 0, Max = 1, Default = 0.25, Increment = 0.01})
    end
    do
        local Jump = LocalPage:AddSection({Title = "Jump Circles", Icon = "Globe", Side = 1}):AddToggle({Text = "Jump Circles", Flag = "Jump Circles", Default = false})
        Colors["Jump Circle Color"] = Jump:AddColorPicker({Text = "Start Color", Flag = "Jump Circle Color", Default = White, EnableAlpha = true})
        Colors["Jump Circle End Color"] = Jump:AddColorPicker({Text = "End Color", Flag = "Jump Circle End Color", Default = Color3.fromRGB(140, 100, 255)})
        local JumpSettings = Jump:Settings()
        JumpSettings:AddSlider({Text = "Radius", Flag = "Jump Circle Radius", Min = 0.5, Max = 10, Default = 4, Increment = 0.1, Suffix = " st"})
        JumpSettings:AddSlider({Text = "Thickness", Flag = "Jump Circle Thickness", Min = 0.02, Max = 0.5, Default = 0.1, Increment = 0.01})
        JumpSettings:AddSlider({Text = "Duration", Flag = "Jump Circle Duration", Min = 0.2, Max = 3, Default = 1, Increment = 0.05, Suffix = " s"})
        JumpSettings:AddToggle({Text = "Glow", Flag = "Jump Circle Glow", Default = false})
        JumpSettings:AddToggle({Text = "Landing Circle", Flag = "Jump Circle Landing", Default = false})
    end

    do
        local CharacterEffects = LocalPage:AddSection({Title = "Character Effects", Icon = "User", Side = 2})
        local Halo = CharacterEffects:AddToggle({Text = "Halo", Flag = "Character Halo", Default = false})
        Colors["Halo Color"] = Halo:AddColorPicker({Text = "Halo Color", Flag = "Halo Color", Default = Color3.fromRGB(255, 215, 110), EnableAlpha = true})
        local HaloSettings = Halo:Settings()
        HaloSettings:AddSlider({Text = "Radius", Flag = "Halo Radius", Min = 0.3, Max = 3, Default = 1, Increment = 0.05})
        HaloSettings:AddSlider({Text = "Thickness", Flag = "Halo Thickness", Min = 0.03, Max = 0.3, Default = 0.08, Increment = 0.01})
        HaloSettings:AddSlider({Text = "Height", Flag = "Halo Height", Min = 0.3, Max = 4, Default = 1.2, Increment = 0.1})
        HaloSettings:AddSlider({Text = "Tilt", Flag = "Halo Tilt", Min = -60, Max = 60, Default = 0, Increment = 1, Suffix = "°"})
        local HaloAnimation = HaloSettings:AddToggle({Text = "Animation", Flag = "Halo Animation", Default = false})
        HaloAnimation:Settings():AddSlider({Text = "Speed", Flag = "Halo Speed", Min = 0.1, Max = 5, Default = 1.5, Increment = 0.1})
        local Aura = CharacterEffects:AddToggle({Text = "Particle Aura", Flag = "Character Aura", Default = false})
        Colors["Character Aura Color"] = Aura:AddColorPicker({Text = "Aura Color", Flag = "Character Aura Color", Default = Color3.fromRGB(133, 220, 255), EnableAlpha = true})
        Aura:Settings():AddDropdown({Text = "Preset", Flag = "Character Aura Preset", Options = {"Starlight", "Heavenly", "Ribbon", "Sakura", "Angel", "Wind", "Flow", "Star"}, Default = "Angel"})
    end
end

do
    local Library = State.Library
    local Window = State.UI.Window
    local Colors = State.UI.Colors
    local White, Black = Color3.new(1, 1, 1), Color3.new(0, 0, 0)
    local CharacterPage, ChatbotPage = State.UI.Tabs.Movement, State.UI.Tabs.Utility
    local Character = CharacterPage:AddSection({Title = "Movement", Icon = "Smile", Side = 1})
    local DuckPeek = Character:AddToggle({Text = "Duck Peek Assist", Flag = "Duck Peek Assist", Default = false})
    DuckPeek:AddKeybind({Mode = "Hold", Default = Enum.KeyCode.C})
    local DuckSettings = DuckPeek:Settings()
    DuckSettings:AddSlider({Text = "Crouch Time", Flag = "Duck Peek Crouch Time", Min = 0.1, Max = 2, Default = 0.6, Increment = 0.05, Suffix = " s"})
    DuckSettings:AddSlider({Text = "Peek Time", Flag = "Duck Peek Stand Time", Min = 0.1, Max = 2, Default = 0.2, Increment = 0.05, Suffix = " s"})
    local Bhop = Character:AddToggle({Text = "Bhop", Flag = "Bhop", Default = false})
    Bhop:AddKeybind({Mode = "Toggle"})
    Bhop:Settings():AddSlider({Text = "Duck Delay", Flag = "Bhop Duck Delay", Min = 0, Max = 1000,
        Default = 50, Increment = 1, Suffix = " ms"})
    Character:AddToggle({Text = "Auto Hop", Flag = "Auto Hop", Default = false}):AddKeybind({Mode = "Toggle"})
    Character:AddToggle({Text = "No Slow", Flag = "No Slow", Default = false}):AddKeybind({Mode = "Toggle"})
    Character:AddToggle({Text = "Force Stop", Flag = "Force Stop", Default = false})
    Character:AddToggle({Text = "Auto Defuse", Flag = "Auto Defuse", Default = false})
    Character:AddToggle({Text = "Auto Plant", Flag = "Auto Plant", Default = false})
    Character:AddToggle({Text = "Anti AFK", Flag = "Anti AFK", Default = false})
    local Backtrack = CharacterPage:AddSection({Title = "Backtrack", Icon = "HeartCrack", Side = 2}):AddToggle({Text = "Backtrack", Flag = "Backtrack", Default = false})
    Backtrack:Settings():AddSlider({Text = "Time", Flag = "Backtrack Time", Min = 0, Max = 0.2, Default = 0.1, Increment = 0.01, Suffix = " s"})
    local ChatbotSection = ChatbotPage:AddSection({Title = "Chatbot", Icon = "Bomb", Side = 1})
    local ChatbotToggle = ChatbotSection:AddToggle({Text = "Chatbot", Flag = "Chatbot", Default = false})
    local ChatbotSettings = ChatbotToggle:Settings()
    ChatbotSettings:AddDropdown({Text = "Mode", Flag = "Chatbot Mode", Options = {"On Kill", "Timed", "Both"}, Default = "On Kill"})
    ChatbotSettings:AddDropdown({Text = "Message", Flag = "Chatbot Message", Options = {"Rotate", "Swift On Top", "Get Swift", "Custom"}, Default = "Rotate"})
    ChatbotSettings:AddInput({Text = "Custom Message", Flag = "Chatbot Custom Message", Default = "", MaxLength = 100})
    ChatbotSettings:AddSlider({Text = "Interval", Flag = "Chatbot Interval", Min = 5, Max = 120, Default = 15, Increment = 1, Suffix = " s"})
    local Staff = CharacterPage:AddSection({Title = "Staff", Icon = "Warning", Side = 2})
    local AntiStaff = Staff:AddToggle({Text = "Anti Staff", Flag = "Anti Staff", Default = false})
    AntiStaff:Settings():AddDropdown({Text = "Action", Flag = "Staff Action", Options = {"Notify", "Unload", "Kick"}, Default = "Notify"})
end

do
    local Get, Modules = Functions.Config.Get, State.Modules
    local Shot = {}
    local function Finite(Value)
        return type(Value) == "number" and Value == Value and math.abs(Value) < math.huge
    end
    function Shot.Seed(Tick, Weapon)
        local Value = Weapon and Weapon.RandomSeed
        if Finite(Value) and Value >= 0 then Tick = Value end
        if not Finite(Tick) then Tick = 0 end
        local A = bit32.bxor(Tick, bit32.rshift(Tick, 16))
        local B = (A * 34283 % 65536 * 65536 + A * 51819) % 4294967296
        B = bit32.bxor(B, bit32.rshift(B, 13))
        local C = (B * 49842 % 65536 * 65536 + B * 44597) % 4294967296
        return bit32.band(bit32.bxor(C, bit32.rshift(C, 16)), 255) + 1
    end
    function Shot.Gun(Weapon)
        return Weapon and type(Weapon.Data) == "table" and type(Weapon.Data.Ammo) == "number"
            and type(Weapon.Data.FireRate) == "table"
    end
    function Shot.Burst(Weapon)
        local Alternate = Weapon and Weapon.Data and Weapon.Data.AltFunction
        local Remaining = Weapon and Weapon.BurstFireRemaining or 0
        return Alternate and Alternate.Name == "Burst" and Weapon.Mode == 2
            and Remaining > 0 and Remaining < Alternate.BaseBurstAmount
    end
    function Shot.Origin(Camera, Simulation)
        if Simulation and type(Simulation.BuildShotCFrame) == "function" then
            local Success, Frame = pcall(Simulation.BuildShotCFrame, Simulation, true)
            if Success and typeof(Frame) == "CFrame" then return Frame.Position end
        end
        return Camera and Camera.CFrame.Position
    end
    function Shot.Scale()
        local Config = Modules.SimulationConfig and Modules.SimulationConfig.CFG
        local Value = Config and Config.RecoilScale
        if Finite(Value) then return Value end
        return (tonumber(Functions.Game.Config("Weapon", "RecoilScale")) or 2)
            * (tonumber(Functions.Game.Config("Weapon", "HitboxRecoilScale")) or 1)
    end
    function Shot.Offset(Tick, Weapon, Simulation, Seed, Native)
        if not Shot.Gun(Weapon) or type(Weapon.GetInaccuracy) ~= "function" or type(Weapon.GetSpread) ~= "function" then return nil end
        local Success, X, Y, Cone, Spread = pcall(function()
            local Inaccuracy, Radius = Weapon:GetInaccuracy(Simulation), Weapon:GetSpread(Weapon)
            if not Native and Get("No Spread Fixed Pattern", false) then
                local Data = Weapon.Data
                local Index = math.floor(Weapon.RecoilIndex or 0) * (Data.Bullets or 1)
                if Index >= 0 and Index < (Data.SpreadOffsetsLength or 0) and typeof(Data.SpreadOffsets) == "buffer" then
                    local Angle = buffer.readf32(Data.SpreadOffsets, Index * 8)
                    local Weight = buffer.readf32(Data.SpreadOffsets, Index * 8 + 4) * Radius
                    return math.cos(Angle) * Weight, math.sin(Angle) * Weight, Inaccuracy, Radius
                end
                return 0, 0, Inaccuracy, Radius
            end
            local Random = Modules.Math.UniformRandomStream(Seed or Shot.Seed(Tick, Weapon))
            local Side, Up = Modules.Bullet.SpreadOffset(Weapon, Random, Inaccuracy, Radius, 1)
            return Side, Up, Inaccuracy, Radius
        end)
        if not Success or not Finite(X) or not Finite(Y) or not Finite(Cone) or not Finite(Spread) then return nil end
        return X, Y, Cone, Spread
    end
    function Shot.Angles(Direction, Tick, Weapon, Simulation, Seed, CompensateRecoil, CompensateSpread)
        if typeof(Direction) ~= "Vector3" or Direction.Magnitude < 0.000001 then return nil end
        Direction = Direction.Unit
        local X, Y = 0, 0
        if CompensateSpread then
            X, Y = Shot.Offset(Tick, Weapon, Simulation, Seed)
            if X == nil then return nil end
        end
        local Punch = Simulation and (Simulation.SeenAimPunch or Simulation.AimPunchAngle)
        local RecoilX, RecoilY, Roll = 0, 0, 0
        if CompensateRecoil and typeof(Punch) == "Vector3" then
            local Scale = Shot.Scale()
            RecoilX, RecoilY, Roll = math.rad(Punch.X * Scale), math.rad(Punch.Y * Scale), math.rad(Punch.Z * Scale)
        end
        local Side = X * math.cos(Roll) - Y * math.sin(Roll)
        local Up = X * math.sin(Roll) + Y * math.cos(Roll)
        local Height = Direction.Y * math.sqrt(1 + Side * Side + Up * Up) / math.sqrt(1 + Up * Up)
        if not Finite(Height) or math.abs(Height) > 1 then return nil end
        local Tilt = math.asin(Height) - math.atan(Up)
        local Back = Up * math.sin(Tilt) - math.cos(Tilt)
        local Yaw = math.atan2(-Direction.X, -Direction.Z) - math.atan2(-Side, -Back) - RecoilY
        local Pitch = RecoilX - Tilt
        if not Finite(Yaw) or not Finite(Pitch) or math.abs(Pitch) > 1.55334 then return nil end
        local EncodedYaw, EncodedPitch = Functions.Angles.Encode(Yaw, Pitch)
        local ActualYaw, ActualPitch = Functions.Angles.Decode(EncodedYaw, EncodedPitch)
        if CompensateSpread and Get("No Spread Fixed Pattern", false)
            or not CompensateSpread and Seed ~= nil and Shot.Gun(Weapon) then
            X, Y = Shot.Offset(Tick, Weapon, Simulation, Seed, true)
            if X == nil then return nil end
            Side = X * math.cos(Roll) - Y * math.sin(Roll)
            Up = X * math.sin(Roll) + Y * math.cos(Roll)
        end
        local ActualTilt = RecoilX - ActualPitch
        local ActualBack = Up * math.sin(ActualTilt) - math.cos(ActualTilt)
        local Vertical = Up * math.cos(ActualTilt) + math.sin(ActualTilt)
        ActualYaw += RecoilY
        local Ray = Vector3.new(Side * math.cos(ActualYaw) + ActualBack * math.sin(ActualYaw), Vertical,
            -Side * math.sin(ActualYaw) + ActualBack * math.cos(ActualYaw)).Unit
        return EncodedYaw, EncodedPitch, Ray
    end
Functions.Combat.Shot = Shot
end

do
    local Get, Modules = Functions.Config.Get, State.Modules
    local Reload = {Ammo = setmetatable({}, {__mode = "k"})}
    function Reload.Apply(Map, Weapon)
        local Inventory = type(Modules.Weapon.GetWeaponInventory) == "function" and Modules.Weapon.GetWeaponInventory()
        local Return = Reload.Return
        if Return then
            if not Get("Instant Reload", false) or not Inventory or Inventory[Return.From] ~= Return.Weapon or not Inventory[Return.To]
                or Map.WishEquip ~= Return.From and Map.WishEquip ~= Return.To then Reload.Return = nil
            elseif Weapon and Weapon.Slot == Return.To then
                Map.WishEquip, Map.WishBooleans.WishReload = Return.From, false
                Reload.Release, Reload.Return = Return.Weapon, nil
            else
                Return.Attempts += 1
                if Return.Attempts > 60 then Reload.Return = nil
                else Map.WishEquip, Map.WishBooleans.WishReload = Return.To, false end
            end
        end
        local Data = Weapon and Weapon.Data
        if not Data or type(Data.Ammo) ~= "number" then return end
        if Get("Auto Reload", false) or Get("Ragebot", false) and Get("Rage Auto Reload", false) then
            if Data.Ammo <= 0 and (Data.ReserveAmmo or Weapon.ReserveAmmo or Weapon.AmmoReserve or Data.AmmoReserve or 1) > 0 then
                Map.WishBooleans.WishReload = true
            end
        end
        local Cancel = true
        if type(Weapon.ReloadDelay) == "number" and type(Weapon.Timer) == "number" and type(Data.EquipDelay) == "number" then
            local Rate = tonumber(Functions.Game.Config("Game", "TickRate")) or 60
            Cancel = Weapon.ReloadDelay - Weapon.Timer > Data.EquipDelay + 2 / math.max(1, Rate)
        end
        if Get("Instant Reload", false) and Cancel and Weapon.Reloading and Data.Reload and not Data.Reload.Shotgun
            and Map.WishEquip == Weapon.Slot then
            local Start = Reload.Ammo[Weapon]
            if Start == nil then Reload.Ammo[Weapon] = Data.Ammo end
            if Weapon.AmmoClip == true or Start ~= nil and Data.Ammo > Start then
                local Alternate
                if Inventory and Inventory[Weapon.Slot] == Weapon then
                    Alternate = Inventory[3] and Weapon.Slot ~= 3 and 3 or nil
                    if not Alternate then
                        for Slot, Candidate in Inventory do if Candidate ~= Weapon then Alternate = Slot; break end end
                    end
                end
                if Alternate then
                    Map.WishEquip, Map.WishBooleans.WishReload = Alternate, false
                    Reload.Return = {From = Weapon.Slot, To = Alternate, Weapon = Weapon, Attempts = 0}
                end
                Reload.Ammo[Weapon] = nil
            end
        else Reload.Ammo[Weapon] = nil end
        if Reload.Release then
            if not Get("Instant Reload", false) then Reload.Release = nil
            elseif Weapon == Reload.Release then
                Map.WishBooleans.WishReload = false
                if Weapon.WaitForNoAttack then Map.WishBooleans.WishFire, Map.WishBooleans.WishFire2 = false, false
                else Reload.Release = nil end
            end
        end
    end
    function Reload.Reset()
        Reload.Return, Reload.Release = nil, nil
        table.clear(Reload.Ammo)
    end
Functions.Combat.Reload = Reload
end

do
    local Cache, Basis, Sampler
    local function Finite(Value)
        return type(Value) == "number" and Value == Value and math.abs(Value) < math.huge
    end
    local function Vector(Value)
        return typeof(Value) == "Vector3" and Finite(Value.X) and Finite(Value.Y) and Finite(Value.Z)
    end
    local function Unavailable(Details, Reason)
        Details.Reason = Reason
        return nil
    end
    local function Slab(Position, Step, Half, Near, Far)
        if math.abs(Step) < 0.000001 then
            if math.abs(Position) > Half then return nil end
        else
            local Entry, Exit = (-Half - Position) / Step, (Half - Position) / Step
            if Entry > Exit then Entry, Exit = Exit, Entry end
            Near, Far = math.max(Near, Entry), math.min(Far, Exit)
            if Near > Far then return nil end
        end
        return Near, Far
    end
    local function Intersects(Start, Forward, Right, Up, Half, X, Y, Range)
        local DX = Forward.X + Right.X * X + Up.X * Y
        local DY = Forward.Y + Right.Y * X + Up.Y * Y
        local DZ = Forward.Z + Right.Z * X + Up.Z * Y
        local Length = math.sqrt(DX * DX + DY * DY + DZ * DZ)
        if not Finite(Length) or Length <= 0 then return nil end
        local Near, Far = Slab(Start.X, DX / Length, Half.X, 0, Range)
        if Near == nil then return false end
        Near, Far = Slab(Start.Y, DY / Length, Half.Y, Near, Far)
        if Near == nil then return false end
        Near, Far = Slab(Start.Z, DZ / Length, Half.Z, Near, Far)
        return Near ~= nil and Far >= 0
    end
    local function Sample(Details, Weapon, Bullet, Math, Index, Inaccuracy, Spread)
        Details.Reason = "Random Stream Error"
        local Stream = Math.UniformRandomStream(5 + (Index - 1) * 8)
        Details.Reason = "Spread Sampling Error"
        return Bullet.SpreadOffset(Weapon, Stream, Inaccuracy, Spread, 1)
    end
    local function ConeSamples(Details, Weapon, Simulation, Bullet, Math, Tick, Inaccuracy, Spread)
        if not Sampler or Sampler.Offset ~= Bullet.SpreadOffset or Sampler.Stream ~= Math.UniformRandomStream then
            Sampler = {Offset = Bullet.SpreadOffset, Stream = Math.UniformRandomStream}
            Cache, Basis = nil, nil
        end
        local FirstX, FirstY
        if Sampler.Components == nil then
            local IX, IY, SX, SY
            FirstX, FirstY, IX, IY, SX, SY = Sample(Details, Weapon, Bullet, Math, 1, Inaccuracy, Spread)
            Sampler.Components = Finite(IX) and Finite(IY) and Finite(SX) and Finite(SY)
                and Finite(FirstX) and Finite(FirstY)
                and math.abs(FirstX - IX - SX) < 0.000001 and math.abs(FirstY - IY - SY) < 0.000001
        end
        local Now = os.clock()
        if Sampler.Components then
            local Data = Weapon.Data
            local Recoil = math.floor(Weapon.RecoilIndex or 0)
            local Index = Recoil * (Data.Bullets or 1)
            local Pattern, Weight
            if Index >= 0 and Index < (Data.SpreadOffsetsLength or 0) and typeof(Data.SpreadOffsets) == "buffer" then
                Pattern, Weight = buffer.readf32(Data.SpreadOffsets, Index * 8), buffer.readf32(Data.SpreadOffsets, Index * 8 + 4)
            end
            if not Basis or Basis.Weapon ~= Weapon or Basis.Data ~= Data or Basis.Mode ~= Weapon.Mode
                or Basis.Recoil ~= Recoil or Basis.Bullets ~= Data.Bullets or Basis.Buffer ~= Data.SpreadOffsets
                or Basis.Length ~= Data.SpreadOffsetsLength or Basis.Pattern ~= Pattern or Basis.Weight ~= Weight then
                local Factors = table.create(32)
                for Entry = 1, 32 do
                    local X, Y, IX, IY, SX, SY = Sample(Details, Weapon, Bullet, Math, Entry, 1, 1)
                    if not Finite(X) or not Finite(Y) or not Finite(IX) or not Finite(IY) or not Finite(SX) or not Finite(SY) then
                        Cache, Basis = nil, nil
                        return Unavailable(Details, "Invalid Spread Sample")
                    end
                    Factors[Entry] = {IX, IY, SX, SY}
                end
                Basis = {Weapon = Weapon, Data = Data, Mode = Weapon.Mode, Recoil = Recoil, Bullets = Data.Bullets,
                    Buffer = Data.SpreadOffsets, Length = Data.SpreadOffsetsLength, Pattern = Pattern, Weight = Weight, Factors = Factors}
                Cache = nil
            end
            if Cache and Cache.Basis == Basis and Cache.Inaccuracy == Inaccuracy and Cache.Spread == Spread then return Cache.Samples end
            local Samples = table.create(32)
            for Entry, Factor in Basis.Factors do
                Samples[Entry] = {Factor[1] * Inaccuracy + Factor[3] * Spread, Factor[2] * Inaccuracy + Factor[4] * Spread}
            end
            Cache = {Basis = Basis, Inaccuracy = Inaccuracy, Spread = Spread, Samples = Samples}
            return Samples
        end
        if Cache and Tick ~= nil and Cache.Tick == Tick and Cache.Simulation == Simulation and Cache.Weapon == Weapon
            and Cache.Data == Weapon.Data and Cache.Mode == Weapon.Mode and Cache.Recoil == Weapon.RecoilIndex
            and Cache.Inaccuracy == Inaccuracy and Cache.Spread == Spread
            and Now >= Cache.Time and Now - Cache.Time <= 1 / 60 then return Cache.Samples end
        local Samples = table.create(32)
        for Index = 1, 32 do
            local X, Y
            if Index == 1 and FirstX ~= nil then X, Y = FirstX, FirstY
            else X, Y = Sample(Details, Weapon, Bullet, Math, Index, Inaccuracy, Spread) end
            if not Finite(X) or not Finite(Y) then Cache = nil; return Unavailable(Details, "Invalid Spread Sample") end
            Samples[Index] = {X, Y}
        end
        Cache = {Tick = Tick, Simulation = Simulation, Weapon = Weapon, Data = Weapon.Data, Mode = Weapon.Mode,
            Recoil = Weapon.RecoilIndex, Inaccuracy = Inaccuracy, Spread = Spread, Time = Now, Samples = Samples}
        return Samples
    end
    local function Estimate(Details, Weapon, Simulation, Target, Origin, EncodedYaw, EncodedPitch)
        if type(Weapon) ~= "table" then return Unavailable(Details, "Missing Weapon") end
        Details.Weapon = type(Weapon.Name) == "string" and string.sub(Weapon.Name, 1, 120) or "Unknown"
        if Finite(Weapon.RecoilIndex) then Details.RecoilIndex = Weapon.RecoilIndex end
        if type(Weapon.Data) ~= "table" then return Unavailable(Details, "Missing Weapon Data") end
        if type(Simulation) ~= "table" then return Unavailable(Details, "Missing Simulation") end
        if type(Target) ~= "table" then return Unavailable(Details, "Missing Target") end
        if typeof(Target.Frame) ~= "CFrame" or not Vector(Target.Frame.Position) then return Unavailable(Details, "Invalid Hitbox Frame") end
        if not Vector(Target.Frame.LookVector) or not Vector(Target.Frame.RightVector) or not Vector(Target.Frame.UpVector) then
            return Unavailable(Details, "Invalid Hitbox Orientation")
        end
        if not Vector(Target.Half) or Target.Half.X <= 0 or Target.Half.Y <= 0 or Target.Half.Z <= 0 then
            return Unavailable(Details, "Invalid Hitbox Size")
        end
        Details.HalfSize = {X = Target.Half.X, Y = Target.Half.Y, Z = Target.Half.Z}
        if not Vector(Origin) then return Unavailable(Details, "Invalid Origin") end
        local Distance = (Target.Frame.Position - Origin).Magnitude
        if Finite(Distance) then Details.Distance = Distance end
        if not Finite(EncodedYaw) or not Finite(EncodedPitch) or EncodedYaw < 0 or EncodedYaw > 65535
            or EncodedPitch < 0 or EncodedPitch > 65535 then return Unavailable(Details, "Invalid Encoded Angles") end
        if type(Weapon.GetInaccuracy) ~= "function" then return Unavailable(Details, "Missing Inaccuracy Function") end
        if type(Weapon.GetSpread) ~= "function" then return Unavailable(Details, "Missing Spread Function") end
        if type(Functions.Angles.Decode) ~= "function" then return Unavailable(Details, "Missing Angle Decoder") end
        if type(Functions.Target.RayHitsHitbox) ~= "function" then return Unavailable(Details, "Missing Hitbox Intersection") end
        local Range = Functions.Target.Range(Weapon)
        if not Finite(Range) or Range <= 0 then return Unavailable(Details, "Invalid Weapon Range") end
        Range += 2.776
        Details.Range = Range
        local Modules = State.Modules
        local Bullet, Math, Config = Modules and Modules.Bullet, Modules and Modules.Math, Modules and Modules.GameConfig
        if not Bullet or type(Bullet.SpreadOffset) ~= "function" then return Unavailable(Details, "Missing Spread Sampler") end
        if not Math or type(Math.UniformRandomStream) ~= "function" then return Unavailable(Details, "Missing Random Stream") end
        if not Config or type(Config.Get) ~= "function" then return Unavailable(Details, "Missing Recoil Configuration") end
        Details.Reason = "Native Inaccuracy Error"
        local Inaccuracy = Weapon:GetInaccuracy(Simulation)
        if not Finite(Inaccuracy) or Inaccuracy < 0 then return Unavailable(Details, "Invalid Inaccuracy") end
        Details.Inaccuracy, Details.Reason = Inaccuracy, "Native Spread Error"
        local Spread = Weapon:GetSpread(Weapon)
        if not Finite(Spread) or Spread < 0 then return Unavailable(Details, "Invalid Spread") end
        Details.Spread = Spread
        local Punch = Simulation.SeenAimPunch or Simulation.AimPunchAngle
        if not Vector(Punch) then return Unavailable(Details, "Invalid Recoil Punch") end
        Details.Reason = "Recoil Configuration Error"
        local SimulationConfig = Modules.SimulationConfig and Modules.SimulationConfig.CFG
        local Scale = SimulationConfig and SimulationConfig.RecoilScale
        if not Finite(Scale) then
            local Base = Config.Get("Weapon", "RecoilScale")
            local Hitbox = Config.Get("Weapon", "HitboxRecoilScale")
            Scale = Finite(Base) and Base * (Finite(Hitbox) and Hitbox or 1) or nil
        end
        if not Finite(Scale) then return Unavailable(Details, "Invalid Recoil Scale") end
        Details.Reason = "Angle Decode Error"
        local Yaw, Pitch = Functions.Angles.Decode(EncodedYaw, EncodedPitch)
        if not Finite(Yaw) or not Finite(Pitch) then return Unavailable(Details, "Invalid Decoded Angles") end
        Details.Reason = "Shot Frame Error"
        local Frame = CFrame.fromEulerAnglesYXZ(-Pitch + math.rad(Punch.X * Scale),
            Yaw + math.rad(Punch.Y * Scale), math.rad(Punch.Z * Scale))
        if not Vector(Frame.LookVector) or not Vector(Frame.RightVector) or not Vector(Frame.UpVector) then
            return Unavailable(Details, "Invalid Shot Frame")
        end
        if Inaccuracy == 0 and Spread == 0 then
            Details.Reason = "Hitbox Intersection Error"
            local Hit = Functions.Target.RayHitsHitbox(Target, Origin, Frame.LookVector, Range)
            if type(Hit) ~= "boolean" then return Unavailable(Details, "Invalid Hitbox Result") end
            Details.Samples, Details.Hits = 1, Hit and 1 or 0
            return Hit and 100 or 0
        end
        local Tick
        if type(Functions.Game.Simulation) == "function" then
            Details.Reason = "Simulation State Error"
            local Current, Character = Functions.Game.Simulation()
            Tick = Current == Simulation and Character and Character.CurrentCommand and Character.CurrentCommand.ClientTick
            if not Finite(Tick) then Tick = nil end
        end
        local Samples = ConeSamples(Details, Weapon, Simulation, Bullet, Math, Tick, Inaccuracy, Spread)
        if not Samples then return nil end
        Details.Reason = "Hitbox Transform Error"
        local Start = Target.Frame:PointToObjectSpace(Origin)
        local Forward = Target.Frame:VectorToObjectSpace(Frame.LookVector)
        local Right = Target.Frame:VectorToObjectSpace(Frame.RightVector)
        local Up = Target.Frame:VectorToObjectSpace(Frame.UpVector)
        if not Vector(Start) or not Vector(Forward) or not Vector(Right) or not Vector(Up) then
            return Unavailable(Details, "Invalid Hitbox Transform")
        end
        local Hits = 0
        for _, Sample in Samples do
            local Hit = Intersects(Start, Forward, Right, Up, Target.Half, Sample[1], Sample[2], Range)
            if Hit == nil then return Unavailable(Details, "Invalid Sample Direction") end
            if Hit then Hits += 1 end
            Details.Samples += 1
            Details.Hits = Hits
        end
        return Hits * 100 / 32
    end
Functions.Combat.Accuracy = function(...)
        local Details = {State = "Unavailable", Reason = "Estimator Error", Samples = 0, Hits = 0}
        local Okay, Result = pcall(Estimate, Details, ...)
        if not Okay then
            Cache, Basis = nil, nil
            local Message = type(Result) == "string" and Result or Finite(Result) and tostring(Result) or "Native call failed"
            Details.Error = string.sub(string.gsub(Message, "%c", " "), 1, 200)
            return nil, Details
        end
        if Result ~= nil then Details.State, Details.Chance, Details.Reason = "Ready", Result, nil end
        return Result, Details
    end
end

do
    local Workspace = State.Services.Workspace
    local Parameters, ExitParameters = RaycastParams.new(), RaycastParams.new()
    Parameters.IgnoreWater, ExitParameters.IgnoreWater = true, true
    ExitParameters.FilterType = Enum.RaycastFilterType.Include
    local Overrides = {[Enum.Material.Wood] = 3, [Enum.Material.WoodPlanks] = 3,
        [Enum.Material.Cardboard] = 3, [Enum.Material.Plastic] = 2, [Enum.Material.SmoothPlastic] = 2}
    local Epsilon = 0.001
    local function Finite(Value)
        return type(Value) == "number" and Value == Value and math.abs(Value) < math.huge
    end
    local function Config(Name, Default)
        local Value = State.Modules.GameConfig.Get("Weapon", Name)
        return Finite(Value) and Value or Default
    end
    local function Surface(Hit)
        local Enums = State.Modules.Enums
        local Materials = Enums and Enums.MaterialPenetrationData
        if not Materials then return nil end
        local Variant = Enums.MaterialVariantPenetrationData and Enums.MaterialVariantPenetrationData[Hit.Instance.MaterialVariant]
        local Material = Variant and Variant.Material or Hit.Material or "Default"
        local Data = Materials[Material]
        local Modifier = Variant and Variant.PenetrationModifier or Data and Data.PenetrationModifier
        return Material, Modifier
    end
    local function TraceCover(Entry, Direction, Maximum, TargetDistance, Geometry)
        if Entry.Instance.Name == "nowallbang" then return nil end
        local EntryMaterial, EntryModifier = Surface(Entry)
        if not Finite(EntryModifier) or EntryModifier < 0.1 then return nil end
        local Step = 0.2776
        local Steps = math.floor(Maximum / Step) + 1
        if Steps < 1 or Steps > 256 then return nil end
        local Position, Reach = Entry.Position, Steps * Step
        ExitParameters.FilterDescendantsInstances = {Geometry or Entry.Instance}
        local Entries, Exits = {}, {}
        local Start = Epsilon
        for _ = 1, 16 do
            local Hit = Workspace:Raycast(Position + Direction * Start, Direction * (Reach - Start), ExitParameters)
            if not Hit then break end
            local Distance = Start + Hit.Distance
            table.insert(Entries, Distance)
            Start = Distance + Epsilon
            if Start >= Reach then break end
        end
        for _ = 1, 16 do
            if Reach <= Epsilon then break end
            local Hit = Workspace:Raycast(Position + Direction * Reach, Direction * -(Reach - Epsilon), ExitParameters)
            if not Hit then break end
            local Distance = Reach - Hit.Distance
            table.insert(Exits, {Distance = Distance, Hit = Hit})
            Reach = Distance - Epsilon
        end
        local EntryIndex, ExitIndex, Solid, Exit = 1, #Exits, 1, nil
        for Index = 1, Steps do
            local Sample = Index * Step
            while EntryIndex <= #Entries and Entries[EntryIndex] <= Sample do
                Solid += 1
                EntryIndex += 1
            end
            while ExitIndex >= 1 and Exits[ExitIndex].Distance <= Sample do
                Solid -= 1
                Exit = Exits[ExitIndex].Hit
                ExitIndex -= 1
            end
            if Solid <= 0 then break end
        end
        if Solid > 0 or not Exit then return nil end
        local Thickness = (Exit.Position - Position):Dot(Direction)
        if not Finite(Thickness) or Thickness <= 0 or Thickness >= TargetDistance then return nil end
        local ExitMaterial, ExitModifier = Surface(Exit)
        if not Finite(ExitModifier) then return nil end
        local Combined = EntryMaterial == Enum.Material.Glass and 3 or (EntryModifier + ExitModifier) * 0.5
        if EntryMaterial == ExitMaterial then Combined = Overrides[EntryMaterial] or Combined end
        if not Finite(Combined) or Combined <= 0 then return nil end
        return Exit.Position, 1 / Combined, EntryMaterial == Enum.Material.Glass and 0.05 or 0.16
    end
Functions.Combat.Penetration = function(Position, Origin, Weapon)
        local Data = Weapon and Weapon.Data
        local Delta = Position - Origin
        local Distance = Delta.Magnitude
        if not Data or not Finite(Distance) or Distance <= 0 then return false, 0, 0 end
        local Range = tonumber(Data.Range)
        if not Finite(Range) or Range <= 0 then return false, 0, 0 end
        if Distance > Range then return false, 0, 0 end
        local Map = Workspace:FindFirstChild("Map")
        local Geometry = Map and Map:FindFirstChild("Geometry")
        Parameters.FilterType = Geometry and Enum.RaycastFilterType.Include or Enum.RaycastFilterType.Exclude
        Parameters.FilterDescendantsInstances = Geometry and {Geometry} or {Functions.Game.Camera(), State.Characters}
        local Direction, Current = Delta.Unit, Origin
        local Damage, Power = tonumber(Data.Damage) or 0, tonumber(Data.Penetration) or 0
        if not Finite(Damage) or not Finite(Power) or Damage < 1 or Power <= 0 then return false, 0, 0 end
        local FallOff = math.max(0.01, Config("DistanceFallOff", 34.7))
        local Modifier = tonumber(Data.RangeModifier)
        if not Finite(Modifier) or Modifier < 0 or Modifier > 1 then return false, 0, 0 end
        local Maximum = math.max(0, Config("MaxPenetrationDistance", 6.246))
        local Limit = Config("MinimumPenetrationStartDistance", 208.2)
        local Divisor = math.max(0.0001, Config("PenetrationLossDivisor", 0.1156))
        local Travel, Walls = 0, 0
        while Damage >= 1 do
            local Remaining = (Position - Current):Dot(Direction)
            if Remaining <= Epsilon then return Walls > 0 and Damage >= 1, Damage, Walls end
            local Entry = Workspace:Raycast(Current, Direction * Remaining, Parameters)
            if not Entry then
                Damage *= Modifier ^ ((Travel + Remaining) / FallOff)
                return Walls > 0 and Damage >= 1, Damage, Walls
            end
            Travel += Entry.Distance
            Damage *= Modifier ^ (Travel / FallOff)
            if Walls >= 4 or Travel > Limit or Damage < 1 then return false, 0, Walls end
            local Exit, Inverse, Fraction = TraceCover(Entry, Direction, Maximum, (Position - Entry.Position):Dot(Direction), Geometry)
            if not Exit then return false, 0, Walls end
            local Thickness = (Exit - Entry.Position).Magnitude
            local Loss = Damage * Fraction
                + math.max(0, 3 / Power * 1.25) * Inverse * 3 + Inverse * Thickness * Thickness / Divisor
            Damage -= math.max(0, Loss)
            Walls += 1
            Current = Exit
        end
        return false, 0, Walls
    end
end

do
    local Get = Functions.Config.Get
    local Shot = Functions.Combat.Shot
    local Estimate = Functions.Combat.Accuracy
    local Trace = Functions.Combat.Penetration
    Functions.Target.Wallbang = Trace
    local Scan = {Stats = {}, Random = {}, Head = setmetatable({}, {__mode = "k"})}
    local Groups = {
        Head = {"Head"}, Torso = {"UpperTorso", "Torso", "LowerTorso"},
        Arms = {"LeftUpperArm", "LeftLowerArm", "LeftHand", "RightUpperArm", "RightLowerArm", "RightHand", "Left Arm", "Right Arm"},
        Legs = {"LeftUpperLeg", "LeftLowerLeg", "LeftFoot", "RightUpperLeg", "RightLowerLeg", "RightFoot", "Left Leg", "Right Leg"},
    }
    local Categories = {"Head", "Torso", "Arms", "Legs"}
    local function Preference(Entity)
        return State.PlayerSettings and State.PlayerSettings[Entity.UserId] or {}
    end
    function Scan.Allowed(Entity)
        return Functions.Target.Valid(Entity) and Functions.Target.Enemy(Entity) and not Preference(Entity).Ignore
    end
    local function SelectionMode(Selection)
        if type(Selection) == "string" then return (Selection == "Random" or Selection == "Closest") and Selection or nil end
        if type(Selection) ~= "table" then return nil end
        local Closest
        for Key, Value in Selection do
            local Category = type(Value) == "string" and Value or Value == true and Key or nil
            if Category == "Random" then return "Random" end
            if Category == "Closest" then Closest = "Closest" end
        end
        return Closest
    end
    local function Names(Selection, Entity)
        if Preference(Entity).BodyAim then Selection = {"Torso"} end
        if SelectionMode(Selection) or Selection == "Highest Damage" then Selection = Categories end
        if type(Selection) == "string" then Selection = {Selection} end
        if type(Selection) ~= "table" then Selection = {"Head"} end
        local Result, Selected = {}, {}
        for Key, Value in Selection do
            local Category = type(Value) == "string" and Value or Value == true and Key or nil
            if Groups[Category] then Selected[Category] = true end
        end
        for _, Category in Categories do
            if Selected[Category] then
                for _, Name in Groups[Category] do Result[#Result + 1] = Name end
            end
        end
        if #Result == 0 then return {"Head"} end
        return Result
    end
    local function Hydrate(Value)
        if not Value then return nil end
        local Frame, Half = Functions.Game.Hitbox(Value.Data, Value.Part)
        if not Frame then Frame, Half = Functions.Game.PartFrame(Value.Data, Value.Part), Value.Part.Size * 0.5 end
        Value.Frame, Value.Half = Frame, Half
        return Value
    end
    local function Target(Entity, Part, Lazy)
        if not Part.Parent then return nil end
        local Position = Functions.Game.PartPosition(Entity, Part)
        if not Position then return nil end
        local Value = {Data = Entity, Entity = Entity, Part = Part, Position = Position}
        return Lazy and Value or Hydrate(Value)
    end
    local function Current(TargetValue)
        if not TargetValue or not Scan.Allowed(TargetValue.Data) or not TargetValue.Part.Parent then return false end
        return TargetValue.Data.Model and TargetValue.Data.Model:FindFirstChild(TargetValue.Part.Name) == TargetValue.Part
    end
    Scan.Current = Current
    local function PreparationCurrent(Value)
        if not Current(Value) or not Get("Ragebot", false)
            or (Value.Damage or 0) < math.max(1, Get("Rage Minimum Damage", 0)) then return false end
        if Value.Preparing == "Weapon Spread" then
            return not Get("No Spread", false) and (Get("Rage Auto Stop", false)
                or Get("Rage Auto Crouch", false) or Get("Rage Auto Scope", false))
        end
        return Value.Preparing == "Weapon Accuracy" and Get("Rage Accuracy Check", false)
            and type(Value.Chance) == "number" and Value.Chance < Get("Rage Minimum Hit Chance", 65)
    end
    local function CommandBudget(Tick, Weapon, Simulation)
        local Budget = Scan.CommandBudget
        if not Budget or Budget.Tick ~= Tick or Budget.Weapon ~= Weapon or Budget.Simulation ~= Simulation then
            Budget = {Tick = Tick, Weapon = Weapon, Simulation = Simulation, Walls = 0, Checks = 0}
            Scan.CommandBudget = Budget
        end
        return Budget
    end
    local function CharacterLine(TargetValue, Origin, Direction, Distance, Budget)
        local Boxes = Budget.Hitboxes
        Scan.Stats.HitboxChecks = Budget.HitboxChecks or 0
        if not Boxes then
            Boxes = {}
            local Parts = {}
            local Entities, Count = Functions.Game.Entities("Character") or {}, 0
            local Friendly = Functions.Game.Config("Damage", "Teammate", false)
            for _, Entity in Entities do
                Count += 1
                if Count > 128 then Scan.Stats.Reject = "Hitbox Budget"; return false end
                if Entity.UserId == State.LocalPlayer.UserId or not Entity.Model or not Entity.Model.Parent
                    or (Entity.Health or 0) <= 0 or Functions.Target.Current and not Functions.Target.Current(Entity)
                    or not Friendly and not Functions.Target.Enemy(Entity) then continue end
                local Player = type(Entity.UserId) == "number" and State.Services.Players:GetPlayerByUserId(Entity.UserId)
                if Player and Player:GetAttribute("SpawnProtected") then continue end
                for _, Part in Functions.Target.Parts(Entity) do
                    if not Part.Parent then continue end
                    if #Boxes >= 1024 then Scan.Stats.Reject = "Hitbox Budget"; return false end
                    local Frame, Half = Functions.Game.Hitbox(Entity, Part)
                    if Frame and Half then
                        Boxes[#Boxes + 1] = {Data = Entity, Part = Part, Model = Entity.Model,
                            Frame = Frame, Half = Half, SourceFrame = Part.CFrame, SourceSize = Part.Size}
                        Parts[Part] = Entity
                    end
                end
            end
            Budget.Hitboxes, Budget.HitboxParts = Boxes, Parts
        end
        if Budget.HitboxParts[TargetValue.Part] ~= TargetValue.Data then Scan.Stats.Reject = "Hitbox Unavailable"; return false end
        for _, Box in Boxes do
            local Part, Entity = Box.Part, Box.Data
            if Part == TargetValue.Part or not Part.Parent or Entity.Model ~= Box.Model or not Box.Model.Parent
                or Box.Model:FindFirstChild(Part.Name) ~= Part or (Entity.Health or 0) <= 0 then continue end
            if Box.SourceFrame ~= Part.CFrame or Box.SourceSize ~= Part.Size then
                Box.Frame, Box.Half = Functions.Game.Hitbox(Entity, Part)
                Box.SourceFrame, Box.SourceSize = Part.CFrame, Part.Size
            end
            if not Box.Frame or not Box.Half then continue end
            local Offset, Radius = Box.Frame.Position - Origin, Box.Half.Magnitude
            local Along = Offset:Dot(Direction)
            if Along + Radius < 0 or Along - Radius >= Distance - 0.0001
                or Offset:Dot(Offset) - Along * Along > Radius * Radius then continue end
            if (Budget.HitboxChecks or 0) >= 1024 then Scan.Stats.Reject = "Hitbox Budget"; return false end
            Budget.HitboxChecks = (Budget.HitboxChecks or 0) + 1
            Scan.Stats.HitboxChecks = Budget.HitboxChecks
            local Hit, Entry = Functions.Target.RayHitsHitbox(Box, Origin, Direction, Distance)
            if Hit and Entry < Distance - 0.0001 then Scan.Stats.Reject = "Character Obstruction"; return false end
        end
        return true
    end
    function Scan.Peek(Simulation, Command)
        if not Get("Ragebot", false) or not Get("Rage Auto Crouch", false) or not Simulation or Simulation.OnGround ~= true
            or State.AutoDefusing or State.AutoPeekReturning or Simulation.Climbing or Simulation.Noclip or Simulation.Frozen
            or Simulation.Preparation or Simulation.Planting or Simulation.Defusing then return nil end
        local Additional = Command and Command.AdditionalInputs
        if Additional and (Additional.Jump or Additional.PressE) then return nil end
        local function Finite(Value)
            return type(Value) == "number" and Value == Value and math.abs(Value) < math.huge
        end
        local Velocity = Simulation.Velocity
        if typeof(Velocity) ~= "Vector3" or not Finite(Velocity.X) or not Finite(Velocity.Y) or not Finite(Velocity.Z) then return nil end
        local Horizontal = Vector3.new(Velocity.X, 0, Velocity.Z)
        local Inputs, Constants = Command and Command.Inputs, Simulation.Constants
        if Inputs and Functions.Angles and type(Functions.Angles.Decode) == "function" then
            local Forward = (Inputs.Forward and 1 or 0) - (Inputs.Backward and 1 or 0)
            local Side = (Inputs.Right and 1 or 0) - (Inputs.Left and 1 or 0)
            if Forward ~= 0 or Side ~= 0 then
                local Okay, Yaw = pcall(Functions.Angles.Decode, Command.Yaw, Command.Pitch)
                local Speed = Constants and tonumber(Constants.Speed)
                if Okay and Finite(Yaw) and Finite(Speed) and Speed > 0 then
                    local Wish = Vector3.new(Side * math.cos(Yaw) - Forward * math.sin(Yaw), 0,
                        -Side * math.sin(Yaw) - Forward * math.cos(Yaw))
                    Horizontal = Wish.Unit * math.max(Horizontal.Magnitude, Speed)
                end
            end
        end
        if Horizontal.Magnitude < 0.5 then return nil end
        local Lead = tonumber(Get("Rage Crouch Lead Time", 0.15))
        if not Finite(Lead) then Lead = 0.15 end
        Lead = math.clamp(Lead, 0.05, 0.35)
        local Camera = Functions.Game.Camera()
        local Origin = Shot.Origin(Camera, Simulation)
        if typeof(Origin) ~= "Vector3" or not Finite(Origin.X) or not Finite(Origin.Y) or not Finite(Origin.Z) then return nil end
        local Future = Origin + Horizontal * Lead
        local Range, Selection = Get("Rage Range", 300), Get("Rage Hitbox", "Highest Damage")
        local Candidates = {}
        for _, Entity in Functions.Game.Entities("Character") or {} do
            if not Scan.Allowed(Entity) or not Entity.Model then continue end
            local Score
            for _, Name in Names(Selection, Entity) do
                local Part = Entity.Model:FindFirstChild(Name)
                local Value = Part and Part:IsA("BasePart") and Target(Entity, Part, true)
                if not Value then continue end
                Score = Score or (Value.Position - Origin).Magnitude - (Preference(Entity).Priority and 10000 or 0)
                Value.Score, Value.Order = Score, #Candidates + 1
                Candidates[#Candidates + 1] = Value
            end
        end
        table.sort(Candidates, function(A, B) return A.Score == B.Score and A.Order < B.Order or A.Score < B.Score end)
        if #Candidates == 0 or not Functions.Target.Visible(Candidates[1].Part, Origin, Future) then return nil end
        for Index = 1, math.min(#Candidates, 8) do
            local Value = Hydrate(Candidates[Index])
            Value.Position = Value.Frame and Value.Frame.Position or Value.Position
            if Current(Value) and (Value.Position - Origin).Magnitude <= Range and (Value.Position - Future).Magnitude <= Range
                and not Functions.Target.Visible(Value.Part, Origin, Value.Position)
                and Functions.Target.Visible(Value.Part, Future, Value.Position) then
                Value.Approaching, Value.Origin, Value.FutureOrigin = true, Origin, Future
                return Value
            end
        end
        return nil
    end
    local function Candidate(Entity, Name, Camera, Origin, RequireVisible, Range, World)
        local Part = Entity.Model:FindFirstChild(Name)
        local Value = Part and Part:IsA("BasePart") and Target(Entity, Part, true)
        if not Value then return nil end
        local Point, OnScreen = Camera:WorldToViewportPoint(Value.Position)
        local Distance = World and (Value.Position - Origin).Magnitude or (Vector2.new(Point.X, Point.Y) - Camera.ViewportSize * 0.5).Magnitude
        Value.Point = Point
        if not OnScreen and not World or Distance > Range
            or RequireVisible and not Functions.Target.Visible(Part, Origin, Value.Position) then return nil, Distance, Value end
        return Value, Distance
    end
    local function Closest(Camera, Range, Mode, RequireVisible, Origin, Selection)
        local Best, Score, Rejected, RejectedScore = nil, math.huge, nil, math.huge
        for _, Entity in Functions.Game.Entities("Character") or {} do
            if not Scan.Allowed(Entity) or not Entity.Model then continue end
            for _, Name in Names(Selection, Entity) do
                local Value, Distance, Failed = Candidate(Entity, Name, Camera, Origin, RequireVisible, Range, Mode == "World")
                if not Value and not Failed then continue end
                if Preference(Entity).Priority then Distance *= 0.7 end
                if Failed and Distance < RejectedScore then
                    Rejected, RejectedScore = Failed, Distance
                elseif Value and Distance < Score then
                    Score, Best = Distance, Value
                end
            end
        end
        return Best, Rejected
    end
    function Scan.Closest(Range, Mode, RequireVisible, Origin, Selection)
        local Camera = Functions.Game.Camera()
        if not Camera then return nil end
        return Hydrate(Closest(Camera, Range or math.huge, Mode, RequireVisible, Origin or Camera.CFrame.Position, Selection))
    end
    Functions.Target.Closest = Scan.Closest
    local function SelectionKey(Selection)
        if type(Selection) ~= "table" then return type(Selection) .. ":" .. tostring(Selection) end
        local Selected, Key = {}, {SelectionMode(Selection) or ""}
        for Index, Value in Selection do
            local Category = type(Value) == "string" and Value or Value == true and Index or nil
            if Groups[Category] then Selected[Category] = true end
        end
        for _, Category in Categories do Key[#Key + 1] = Selected[Category] and Category or "" end
        return table.concat(Key, "|")
    end
    function Scan.Legit(Silent, Origin, Tick)
        local Prefix = Silent and "Silent Aim" or "Aim"
        local Range, Selection = Get(Prefix .. " FOV", 160), Get(Prefix .. " Hitboxes", {"Head"})
        local Visible = Get(Silent and "Silent Aim Visible Check" or "Wall Check", false)
        local Camera = Functions.Game.Camera()
        local Cache = Silent and Tick ~= nil
        if Silent and not Cache then Scan.LegitCache = nil end
        if not Camera then
            Scan.Random[Prefix] = nil
            if Silent then Scan.LegitCache = nil end
            return nil
        end
        Origin = Origin or Camera.CFrame.Position
        local Mode = SelectionMode(Selection)
        local Interval = Get(Prefix .. " Random Interval", 0.5)
        local Key = Cache and SelectionKey(Selection)
        local function Finish(Value, Rejected)
            Value = Hydrate(Value)
            if Cache then
                local Reference = Value or Rejected
                Scan.LegitCache = {Tick = Tick, Camera = Camera, Frame = Camera.CFrame, Viewport = Camera.ViewportSize,
                    Origin = Origin, Range = Range, Selection = Key, Visible = Visible, Interval = Interval,
                    BodyAim = Reference and Preference(Reference.Data).BodyAim, Target = Value, Recheck = not Value and Rejected or nil}
            end
            return Value
        end
        local Cached = Cache and Scan.LegitCache
        local Matches = Cached and Cached.Tick == Tick and Cached.Camera == Camera and Cached.Frame == Camera.CFrame
            and Cached.Viewport == Camera.ViewportSize and Cached.Origin == Origin and Cached.Range == Range
            and Cached.Selection == Key and Cached.Visible == Visible and Cached.Interval == Interval
        if Matches then
            local Value = Cached.Target or Cached.Recheck
            if not Value or not Cached.Target and not Current(Value) then return nil end
            if Value and Current(Value) and Cached.BodyAim == Preference(Value.Data).BodyAim then
                local Selected = false
                for _, Name in Names(Selection, Value.Data) do
                    if Name == Value.Part.Name then Selected = true; break end
                end
                local Saved = Scan.Random[Prefix]
                local Held = Mode ~= "Random" or Saved and Saved.Data == Value.Data and Saved.Part == Value.Part
                    and os.clock() - Saved.Time < Interval
                if Selected then
                    local Updated = Candidate(Value.Data, Value.Part.Name, Camera, Origin, Visible, Range, false)
                    if Updated and Updated.Part == Value.Part and Held then
                        if Mode == "Random" then Updated.Time = Saved.Time; Scan.Random[Prefix] = Updated
                        else Scan.Random[Prefix] = nil end
                        return Finish(Updated)
                    end
                    if not Cached.Target and not Updated then return nil end
                end
            end
        end
        local Recheck = Matches and (Cached.Target or Cached.Recheck)
        if Cache then Scan.LegitCache = nil end
        local Best, Failed = Closest(Camera, Range, nil, Visible, Origin, Selection)
        if not Best or Mode ~= "Random" then Scan.Random[Prefix] = nil; return Finish(Best, Recheck or Failed) end
        local Saved = Scan.Random[Prefix]
        local Choices, Held, Now = {}, nil, os.clock()
        for _, Name in Names(Selection, Best.Data) do
            local Value = Candidate(Best.Data, Name, Camera, Origin, Visible, Range, false)
            if not Value then continue end
            Choices[#Choices + 1] = Value
            if Saved and Saved.Data == Value.Data and Saved.Part == Value.Part and Current(Saved) then Held = Value end
        end
        if Held and Now - Saved.Time < Interval then
            Held.Time = Saved.Time
            Scan.Random[Prefix] = Held
            return Finish(Held)
        end
        if #Choices == 0 then Scan.Random[Prefix] = nil; return Finish(nil, Recheck or Best) end
        Best = Choices[math.random(1, #Choices)]
        Best.Time = Now
        Scan.Random[Prefix] = Best
        return Finish(Best)
    end
    local function Point(TargetValue, Tick)
        if TargetValue.Part.Name ~= "Head" or not Get("No Spread", false) or not Get("No Spread Random Head", true)
            or not TargetValue.Frame or not TargetValue.Half then return TargetValue.Frame and TargetValue.Frame.Position or TargetValue.Position end
        local Saved = Scan.Head[TargetValue.Part]
        if not Saved or Saved.Tick ~= Tick then
            Saved = {Tick = Tick, Offset = Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5) * 0.45}
            Scan.Head[TargetValue.Part] = Saved
        end
        local Half, Offset = TargetValue.Half, Saved.Offset
        return TargetValue.Frame:PointToWorldSpace(Vector3.new(Half.X * Offset.X, Half.Y * Offset.Y, Half.Z * Offset.Z))
    end
    local function QualifyLine(TargetValue, Origin, Ray, Distance, Weapon, Budget)
        if not CharacterLine(TargetValue, Origin, Ray, Distance, Budget) then return false end
        local Position, Remaining = Origin + Ray * (Distance + 0.001), nil
        if not Functions.Target.Visible(TargetValue.Part, Origin, Position) then
            if not Get("Ragebot", false) or not Get("Rage Wallbang", false) then Scan.Stats.Reject = "Map Obstruction"; return false end
            if Budget.Walls >= 8 then Scan.Stats.Reject = "Wallbang Budget"; return false end
            Budget.Walls += 1
            Scan.Stats.Walls = Budget.Walls
            local Possible, Damage = Trace(Position, Origin, Weapon)
            if not Possible then Scan.Stats.Reject = "Map Obstruction"; return false end
            Remaining, TargetValue.Penetrating = Damage, true
        end
        TargetValue.Damage = Functions.Target.Damage(TargetValue.Data, TargetValue.Part, Distance, Weapon, Remaining)
        if Get("Ragebot", false) and (TargetValue.Damage or 0) < math.max(1, Get("Rage Minimum Damage", 0)) then
            Scan.Stats.Reject = "Minimum Damage"; return false
        end
        return true
    end
    function Scan.Shot(TargetValue, Origin, Tick, Weapon, Simulation, Seed, CheckAccuracy, Budget)
        if TargetValue then TargetValue.Preparing = nil end
        if TargetValue and TargetValue.Approaching then Scan.Stats.Reject = "Approaching Cover"; return nil end
        if not Current(TargetValue) then return nil end
        local Range = Functions.Target.Range(Weapon)
        if Range <= 0 then Scan.Stats.Reject = "Weapon Range"; return nil end
        Budget = CommandBudget(Tick, Weapon, Simulation)
        local Frame, Half = Functions.Game.Hitbox(TargetValue.Data, TargetValue.Part)
        if not Frame or not Half then Frame, Half = Functions.Game.PartFrame(TargetValue.Data, TargetValue.Part), TargetValue.Part.Size * 0.5 end
        if not Frame or not Half then Scan.Stats.Reject = "Hitbox Unavailable"; return nil end
        TargetValue.Frame, TargetValue.Half, TargetValue.Penetrating = Frame, Half, false
        local Direction = TargetValue.Position - Origin
        if Direction.Magnitude <= 0.000001 then return nil end
        local Spread = Seed ~= nil and Get("No Spread", false)
        local Yaw, Pitch, Ray = Shot.Angles(Direction, Tick, Weapon, Simulation, Seed, true, Spread)
        if not Yaw then Scan.Stats.Reject = Spread and "Spread Correction Unavailable" or "Aim Angle Limit"; return nil end
        local Preparing = false
        if TargetValue.Frame and TargetValue.Half then
            local Hit, Distance = Functions.Target.RayHitsHitbox(TargetValue, Origin, Ray, Range + 2.776)
            if not Hit then
                if Spread or Seed == nil or not CheckAccuracy or not Get("Ragebot", false)
                    or not (Get("Rage Auto Stop", false) or Get("Rage Auto Crouch", false) or Get("Rage Auto Scope", false)) then
                    Scan.Stats.Reject = "Hitbox Ray"; return nil
                end
                Ray = Direction.Unit
                Hit, Distance = Functions.Target.RayHitsHitbox(TargetValue, Origin, Ray, Range + 2.776)
                if not Hit then Scan.Stats.Reject = "Hitbox Ray"; return nil end
                Preparing = true
            end
            if not QualifyLine(TargetValue, Origin, Ray, Distance, Weapon, Budget) then return nil end
        end
        if Preparing then
            TargetValue.Preparing, Scan.Stats.Reject = "Weapon Spread", "Weapon Spread"
            return nil
        end
        if CheckAccuracy and Get("Rage Accuracy Check", false) then
            local Native, Inaccuracy, Radius
            if type(Weapon.GetInaccuracy) == "function" and type(Weapon.GetSpread) == "function" then
                Native, Inaccuracy, Radius = pcall(function() return Weapon:GetInaccuracy(Simulation), Weapon:GetSpread(Weapon) end)
            end
            local Budget = Scan.Accuracy
            if not Budget or Budget.Tick ~= Tick or Budget.Weapon ~= Weapon or Budget.Simulation ~= Simulation then
                Budget = {Tick = Tick, Weapon = Weapon, Simulation = Simulation, Checks = 0, Entries = {}}
                Scan.Accuracy = Budget
            end
            local Entry
            for _, Saved in Budget.Entries do
                if Saved.Part == TargetValue.Part and Saved.Position == TargetValue.Position and Saved.Yaw == Yaw and Saved.Pitch == Pitch
                    and Saved.Origin == Origin and Saved.Frame == Frame and Saved.Half == Half and Saved.Mode == Weapon.Mode and Saved.Data == Weapon.Data
                    and Saved.Duck == Simulation.DuckAmount and Saved.Ground == Simulation.OnGround
                    and Saved.Native == Native and Saved.Inaccuracy == Inaccuracy and Saved.Radius == Radius
                    and Saved.Recoil == Weapon.RecoilIndex and Saved.Punch == (Simulation.SeenAimPunch or Simulation.AimPunchAngle)
                    and Saved.Penalty == Weapon.AccuracyPenalty and Saved.Velocity == Simulation.Velocity and Saved.Zoom == Weapon.ZoomLevel then
                    Entry = Saved
                    break
                end
            end
            if not Entry then
                if Budget.Checks >= 4 then Scan.Stats.Reject = "Accuracy Budget"; return nil end
                Budget.Checks += 1
                local Chance, Details = Estimate(Weapon, Simulation, TargetValue, Origin, Yaw, Pitch)
                Entry = {Part = TargetValue.Part, Position = TargetValue.Position, Yaw = Yaw, Pitch = Pitch, Origin = Origin, Frame = Frame, Half = Half,
                    Mode = Weapon.Mode, Data = Weapon.Data, Duck = Simulation.DuckAmount, Ground = Simulation.OnGround, Recoil = Weapon.RecoilIndex,
                    Native = Native, Inaccuracy = Inaccuracy, Radius = Radius,
                    Punch = Simulation.SeenAimPunch or Simulation.AimPunchAngle, Penalty = Weapon.AccuracyPenalty,
                    Velocity = Simulation.Velocity, Zoom = Weapon.ZoomLevel, Chance = Chance, Details = Details}
                Budget.Entries[#Budget.Entries + 1] = Entry
            end
            TargetValue.Chance, TargetValue.Accuracy = Entry.Chance, Entry.Details
            Scan.Stats.Chance, Scan.Stats.Accuracy, Scan.Stats.Checks = Entry.Chance, Entry.Details, Budget.Checks
            if not Entry.Chance or Entry.Chance < Get("Rage Minimum Hit Chance", 65) then
                if type(Entry.Chance) == "number" then TargetValue.Preparing = "Weapon Accuracy" end
                Scan.Stats.Reject = "Weapon Accuracy"; return nil
            end
        end
        Scan.Stats.Reject = nil
        return Yaw, Pitch
    end
    function Scan.Rage(Command, Simulation, Weapon, Seed)
        local Camera = Functions.Game.Camera()
        if not Camera or not Simulation or not Shot.Gun(Weapon) then Scan.Pending = nil; return nil end
        local Tick, Origin = Command.ClientTick, Shot.Origin(Camera, Simulation)
        local Budget = CommandBudget(Tick, Weapon, Simulation)
        local PreviousPending = Scan.Pending
        Scan.Pending = nil
        if Budget.Checks >= 48 then
            if Budget.Pending == PreviousPending and PreparationCurrent(PreviousPending) then Scan.Pending = PreviousPending end
            Scan.Stats.Walls, Scan.Stats.Qualifications, Scan.Stats.Reject = Budget.Walls, Budget.Checks, "Qualification Budget"
            return nil
        end
        local Candidates, Center = {}, Camera.ViewportSize * 0.5
        local Range, Minimum = Get("Rage Range", 300), math.max(1, Get("Rage Minimum Damage", 0))
        local Selection, Priority = Get("Rage Hitbox", "Highest Damage"), Get("Rage Target Priority", "Highest Damage")
        local Hitscan, Wallbang = Get("Rage Hitscan", false), Get("Rage Wallbang", false)
        local Accuracy, Chance, Spread = Get("Rage Accuracy Check", false), Get("Rage Minimum Hit Chance", 65), Get("No Spread", false)
        local Search = Scan.Search
        if not Search or Search.Weapon ~= Weapon or Search.Simulation ~= Simulation or Search.Selection ~= Selection
            or Search.Priority ~= Priority or Search.Hitscan ~= Hitscan or Search.Wallbang ~= Wallbang
            or Search.Range ~= Range or Search.Minimum ~= Minimum or Search.Accuracy ~= Accuracy or Search.Chance ~= Chance or Search.Spread ~= Spread then
            Search = {Weapon = Weapon, Simulation = Simulation, Selection = Selection, Priority = Priority,
                Hitscan = Hitscan, Wallbang = Wallbang, Range = Range, Minimum = Minimum, Accuracy = Accuracy, Chance = Chance, Spread = Spread, Cursor = 1}
            Scan.Search = Search
        end
        local function Score(Value)
            local Result = Priority == "Closest" and Value.Distance or Priority == "Crosshair" and (Vector2.new(Value.Point.X, Value.Point.Y) - Center).Magnitude
                or Priority == "Lowest Health" and (Value.Data.Health or 100) or -Value.Damage
            return Result - (Preference(Value.Data).Priority and 10000 or 0)
        end
        for _, Entity in Functions.Game.Entities("Character") or {} do
            if not Scan.Allowed(Entity) or not Entity.Model then continue end
            for _, Name in Names(Selection, Entity) do
                local Part = Entity.Model:FindFirstChild(Name)
                local Candidate = Part and Part:IsA("BasePart") and Target(Entity, Part)
                if not Candidate then continue end
                Candidate.Position = Point(Candidate, Tick)
                local MinimumDistance = math.max(0, ((Candidate.Frame and Candidate.Frame.Position or Candidate.Position) - Origin).Magnitude
                    - (Candidate.Half and Candidate.Half.Magnitude or 0))
                local Damage = Functions.Target.Damage(Entity, Part, MinimumDistance, Weapon)
                if Damage < Minimum then continue end
                local Positions = {Candidate.Position}
                if Hitscan and Candidate.Frame and Candidate.Half then
                    for _, Offset in {Vector3.new(0.6, 0, 0), Vector3.new(-0.6, 0, 0), Vector3.new(0, 0.6, 0), Vector3.new(0, -0.6, 0)} do
                        local Half = Candidate.Half
                        Positions[#Positions + 1] = Candidate.Frame:PointToWorldSpace(Vector3.new(Half.X * Offset.X, Half.Y * Offset.Y, Half.Z * Offset.Z))
                    end
                end
                for _, Position in Positions do
                    local Distance = (Position - Origin).Magnitude
                    if Distance > Range then continue end
                    local Screen, OnScreen = Camera:WorldToViewportPoint(Position)
                    if Priority == "Crosshair" and (not OnScreen or Screen.Z <= 0) then continue end
                    local Value = table.clone(Candidate)
                    Value.Position, Value.Point, Value.Damage, Value.Distance = Position, Screen, Damage, Distance
                    Value.Score, Value.Order = Score(Value), #Candidates + 1
                    Candidates[#Candidates + 1] = Value
                end
            end
        end
        table.sort(Candidates, function(A, B) return A.Score == B.Score and A.Order < B.Order or A.Score < B.Score end)
        local Count, Available = #Candidates, 48 - Budget.Checks
        Scan.Stats.Candidates, Scan.Stats.Walls, Scan.Stats.Reject = Count, Budget.Walls, nil
        if Count == 0 then Search.Cursor = 1; Budget.Pending = nil; return nil end
        local Start = (Search.Cursor - 1) % Count + 1
        local Best, BestYaw, BestPitch, BestScore, PendingScore, Deferred, Next = nil, nil, nil, math.huge, math.huge, nil, Start
        local Limited = Count > Available
        for Offset = 0, math.min(Count, Available) - 1 do
            local Index = (Start + Offset - 1) % Count + 1
            local Candidate = Candidates[Index]
            Next = Index % Count + 1
            Budget.Checks += 1
            local Yaw, Pitch = Scan.Shot(Candidate, Origin, Tick, Weapon, Simulation, Seed, true, Budget)
            if PreviousPending and PreviousPending.Part == Candidate.Part and PreviousPending.Position == Candidate.Position
                and Scan.Stats.Reject ~= "Accuracy Budget" and Scan.Stats.Reject ~= "Wallbang Budget" then PreviousPending = nil end
            if Yaw then
                local Value = Score(Candidate)
                if Value < BestScore then Best, BestYaw, BestPitch, BestScore = Candidate, Yaw, Pitch, Value end
                if Priority ~= "Highest Damage" then Limited = false; break end
            elseif Scan.Stats.Reject == "Accuracy Budget" then
                Deferred = Deferred or Index
                break
            elseif Scan.Stats.Reject == "Wallbang Budget" then
                Deferred = Deferred or Index
            elseif Candidate.Preparing then
                local Value = Score(Candidate)
                if Value < PendingScore then Scan.Pending, PendingScore = Candidate, Value end
            end
            local Following = Candidates[Next]
            if Best and (Next == 1 or Following.Score >= BestScore) then Limited = false; break end
        end
        Search.Cursor = Deferred or (Limited and Next) or (Best and 1 or Next)
        Scan.Stats.Walls, Scan.Stats.Qualifications = Budget.Walls, Budget.Checks
        if Best then
            Scan.Pending = nil
            Scan.Stats.Reject, Scan.Stats.Chance, Scan.Stats.Accuracy = nil, Best.Chance, Best.Accuracy
            return Best, BestYaw, BestPitch
        end
        if not Scan.Pending and Limited and Budget.Checks >= 48 and Budget.Pending == PreviousPending and PreparationCurrent(PreviousPending) then
            Scan.Pending = PreviousPending
        end
        Budget.Pending = Scan.Pending
        return nil
    end
    function Scan.Reset()
        Scan.Random, Scan.Accuracy, Scan.Search, Scan.Pending, Scan.LegitCache, Scan.CommandBudget = {}, nil, nil, nil, nil, nil
        table.clear(Scan.Head)
    end
Functions.Combat.Targets = Scan
end

do
    local Self = {}
    local Sources = setmetatable({}, {__mode = "k"})
    local function Finite(Value)
        return type(Value) == "number" and Value == Value and math.abs(Value) < math.huge
    end
    local function Vector(Value)
        return typeof(Value) == "Vector3" and Finite(Value.X) and Finite(Value.Y) and Finite(Value.Z)
    end
    function Self:Angles(Origin, Position)
        if not Vector(Origin) or not Vector(Position) then return nil end
        local Delta = Position - Origin
        if not Finite(Delta.Magnitude) or Delta.Magnitude <= 0.000001 then return nil end
        local Pitch, Yaw = CFrame.lookAt(Origin, Position):ToOrientation()
        if not Finite(Pitch) or not Finite(Yaw) then return nil end
        return Yaw, -Pitch
    end
    function Self:Apply(Command, Aim)
        if type(Command) ~= "table" or type(Aim) ~= "table" or Aim.Tick ~= Command.ClientTick then return nil end
        local Yaw, Pitch = Aim.Yaw, Aim.Pitch
        if not Finite(Yaw) or not Finite(Pitch) or Yaw < 0 or Yaw > 65535 or Pitch < 0 or Pitch > 65535 then return nil end
        local Result = table.clone(Command)
        Result.Yaw, Result.Pitch = Yaw, Pitch
        local Source = Sources[Command]
        if Source and Source.Tick ~= Command.ClientTick then Source = nil end
        local Inputs = Aim.MoveInputs or Source and Source.Inputs or Command.Inputs
        if type(Inputs) == "table" then
            local BaseYaw = Aim.MoveInputs and Aim.MoveYaw or Source and Source.Yaw or Aim.MoveYaw or Command.Yaw
            local BasePitch = Aim.MoveInputs and Aim.MovePitch or Source and Source.Pitch or Aim.MovePitch or Command.Pitch
            local MoveYaw = Functions.Angles.Decode(BaseYaw, BasePitch)
            local ShotYaw = Functions.Angles.Decode(Yaw, Pitch)
            Result.Inputs = Functions.Angles.RotateInputs(Inputs, MoveYaw, ShotYaw)
            Sources[Result] = {Tick = Command.ClientTick, Inputs = table.clone(Inputs), Yaw = BaseYaw, Pitch = BasePitch}
        end
        return Result
    end
Functions.Combat.Packet = Self
end

do
    local Self = {}
    
    local function Finite(Value)
        return type(Value) == "number" and Value == Value and math.abs(Value) < math.huge
    end
    local function Encoded(Value)
        return Finite(Value) and Value >= 0 and Value <= 65535
    end
    function Self:Reset()
        self.Last, self.Anchor = nil, nil
    end
    function Self:Step(Command, Simulation, Yaw, Pitch, BaseYaw, BasePitch)
        if not Encoded(Yaw) or not Encoded(Pitch) then return nil, nil, false end
        if not Functions.Config.Get("Ragebot", false) or not Functions.Config.Get("Rage Smooth Aim", false) then
            self:Reset()
            return Yaw, Pitch, true
        end
        local Tick = Command.ClientTick
        if not Finite(Tick) then return nil, nil, false end
        local Anchor = self.Anchor
        if not Anchor or Anchor.Tick ~= Tick or Anchor.Simulation ~= Simulation then
            local Last = self.Last
            if Last and Last.Simulation == Simulation and Tick > Last.Tick then
                BaseYaw, BasePitch = Last.Yaw, Last.Pitch
            end
            if not Encoded(BaseYaw) or not Encoded(BasePitch) then return nil, nil, false end
            Anchor = {Tick = Tick, Simulation = Simulation, Yaw = BaseYaw, Pitch = BasePitch}
            self.Anchor = Anchor
        end
        local Rate = State.Modules.GameConfig.Get("Game", "TickRate")
        if not Finite(Rate) or Rate <= 0 then Rate = 60 end
        local Speed = tonumber(Functions.Config.Get("Rage Smooth Aim Speed", 720))
        if not Finite(Speed) then Speed = 720 end
        local Maximum = math.rad(math.clamp(Speed, 90, 1080)) / Rate
        local FromYaw, FromPitch = Functions.Angles.Decode(Anchor.Yaw, Anchor.Pitch)
        local ToYaw, ToPitch = Functions.Angles.Decode(Yaw, Pitch)
        local DeltaYaw = (ToYaw - FromYaw + math.pi) % (math.pi * 2) - math.pi
        local DeltaPitch = ToPitch - FromPitch
        local Distance = math.sqrt(DeltaYaw * DeltaYaw + DeltaPitch * DeltaPitch)
        if Distance <= Maximum then return Yaw, Pitch, true end
        local Fraction = math.max(0, Maximum - 0.00015) / Distance
        local NextYaw, NextPitch = Functions.Angles.Encode(FromYaw + DeltaYaw * Fraction, FromPitch + DeltaPitch * Fraction)
        return NextYaw, NextPitch, false
    end
    function Self:Commit(Command, Simulation)
        if not Command or not Finite(Command.ClientTick) or not Encoded(Command.Yaw) or not Encoded(Command.Pitch) then return end
        self.Last = {Tick = Command.ClientTick, Simulation = Simulation, Yaw = Command.Yaw, Pitch = Command.Pitch}
    end
Functions.Combat.Steering = Self
end

do
    local Closest = Functions.Target.Closest
    local Self = {Phase = 0}
    
    local function Number(Name, Default, Minimum, Maximum)
        local Value = Functions.Config.Get(Name, Default)
        if type(Value) ~= "number" or Value ~= Value or math.abs(Value) == math.huge then Value = Default end
        return math.clamp(Value, Minimum, Maximum)
    end
    function Self:Reset()
        self.Tick, self.Phase, self.RandomTick, self.RandomYaw = nil, 0, nil, nil
        State.AntiAimYaw, State.AntiAimPitch = nil, nil
    end
    function Self:Apply(Packet, Command, Blocked)
        local Enabled = Functions.Config.Get("Anti Aim", false)
        local FakeYaw, FakePitch = Functions.Config.Get("Fake Yaw", false), Functions.Config.Get("Fake Pitch", false)
        if not Enabled and not FakeYaw and not FakePitch then self:Reset(); return end
        local Tick = Command and Command.ClientTick
        if type(Tick) ~= "number" or Tick ~= Tick or math.abs(Tick) == math.huge then self:Reset(); return end
        local Rate = State.Modules.GameConfig.Get("Game", "TickRate")
        if type(Rate) ~= "number" or Rate <= 0 or Rate ~= Rate then Rate = 60 end
        if self.Tick and Tick >= self.Tick then
            self.Phase = (self.Phase + math.min(Tick - self.Tick, Rate * 0.25) / Rate * math.rad(Number("Spin Speed", 180, 30, 720))) % (math.pi * 2)
        elseif self.Tick then
            self.Phase, self.RandomTick = 0, nil
        end
        self.Tick = Tick
        local Simulation = Functions.Game.Simulation()
        local Additional = Command.AdditionalInputs
        if Blocked or State.AutoDefusing or State.AutoPeekReturning
            or Simulation and (Simulation.OnGround == false or Simulation.Defusing or Simulation.Planting
                or Simulation.Frozen or Simulation.Preparation or Simulation.Climbing or Simulation.Noclip)
            or Additional and (Additional.Jump or Additional.PressE) then
            State.AntiAimYaw, State.AntiAimPitch = nil, nil
            return
        end
        local Yaw, Pitch = Command.Yaw, Command.Pitch
        if type(Yaw) ~= "number" or type(Pitch) ~= "number" or Yaw ~= Yaw or Pitch ~= Pitch
            or Yaw < 0 or Yaw > 65535 or Pitch < 0 or Pitch > 65535 then
            State.AntiAimYaw, State.AntiAimPitch = nil, nil
            return
        end
        Yaw, Pitch = Functions.Angles.Decode(Yaw, Pitch)
        local Offset, Mode = 0, Enabled and Functions.Config.Get("Anti Aim Yaw", "Backward") or "None"
        if Mode == "Backward" then Offset = math.pi
        elseif Mode == "Left" then Offset = math.pi * 0.5
        elseif Mode == "Right" then Offset = -math.pi * 0.5
        elseif Mode == "Spin" then Offset = self.Phase
        elseif Mode == "Jitter" then Offset = (Tick % 2 == 0 and 1 or -1) * math.rad(Number("Jitter Angle", 90, 0, 180))
        elseif Mode == "Random" then
            if self.RandomTick ~= Tick then self.RandomTick, self.RandomYaw = Tick, math.rad(math.random(-180, 180)) end
            Offset = self.RandomYaw
        end
        if Enabled and Functions.Config.Get("Defensive Anti Aim", false) and Closest and Closest(400) then Offset += math.pi end
        if FakeYaw then Offset += math.rad(Number("Fake Yaw Offset", 90, -180, 180)) end
        local Inputs = Command.Inputs
        local OriginalYaw = Yaw
        Yaw = (Yaw + Offset + math.pi) % (math.pi * 2) - math.pi
        if FakePitch then Pitch = -math.rad(Number("Fake Pitch Angle", 0, -89, 89))
        elseif Enabled then
            local Mode = Functions.Config.Get("Anti Aim Pitch", "None")
            if Mode == "Up" then Pitch = -1.55334 elseif Mode == "Down" then Pitch = 1.55334 end
        end
        local Spoof = table.clone(Command)
        Spoof.Yaw, Spoof.Pitch = Functions.Angles.Encode(Yaw, Pitch)
        Yaw, Pitch = Functions.Angles.Decode(Spoof.Yaw, Spoof.Pitch)
        if type(Inputs) == "table" then Spoof.Inputs = Functions.Angles.RotateInputs(Inputs, OriginalYaw, Yaw) end
        Packet.CurrentCommand = Spoof
        State.AntiAimYaw, State.AntiAimPitch = Yaw, Pitch
    end
    function Self:Destroy() self:Reset() end
Functions.Combat.Anti = Self
end

do
    local Get, White = Functions.Config.Get, Color3.new(1, 1, 1)
    local Display = {}
    local function Circle()
        local Frame = Functions.Utility.Own(Instance.new("Frame"))
        Frame.BackgroundTransparency, Frame.BorderSizePixel, Frame.Visible = 1, 0, false
        Frame.AnchorPoint, Frame.Parent = Vector2.new(0.5, 0.5), State.GuiParent
        Instance.new("UICorner", Frame).CornerRadius = UDim.new(1, 0)
        local Stroke, Gradient, Fill = Instance.new("UIStroke", Frame), Instance.new("UIGradient"), Instance.new("UIGradient", Frame)
        Gradient.Parent = Stroke
        return Frame, Stroke, Gradient, Fill
    end
    local Aim, AimStroke, AimGradient, AimFill = Circle()
    local Silent, SilentStroke = Circle()
    local Line = Functions.Utility.Own(Instance.new("Frame"))
    Line.AnchorPoint, Line.BackgroundTransparency, Line.BorderSizePixel = Vector2.new(0, 0.5), 0, 0
    Line.Visible, Line.Parent = false, State.GuiParent
    function Display.Update(Camera, Target)
        Aim.Visible, Silent.Visible = Camera ~= nil and Get("Aim FOV Circle", false), Camera ~= nil and Get("Silent Aim FOV Circle", false)
        Line.Visible = Camera ~= nil and Target ~= nil and Get("Target Snapline", false)
        if not Camera then return end
        local Center = Camera.ViewportSize * 0.5
        if Aim.Visible then
            local Radius, Position = Get("Aim FOV", 160), Center
            if Get("Aim FOV Position", "Center") == "Mouse" then Position = State.Services.UserInputService:GetMouseLocation() end
            Aim.Position, Aim.Size = UDim2.fromOffset(Position.X, Position.Y), UDim2.fromOffset(Radius * 2, Radius * 2)
            local Color, Alpha = Functions.Config.Color("Aim FOV Color A", White)
            local Second = Functions.Config.Color("Aim FOV Color B", White)
            AimStroke.Color, AimStroke.Transparency, AimStroke.Thickness = Color, 1 - Alpha, Get("Aim FOV Thickness", 1)
            AimGradient.Enabled, AimGradient.Color, AimGradient.Rotation = Get("Aim FOV Gradient", false), ColorSequence.new(Color, Second), Get("Aim FOV Rotation", 0)
            Aim.BackgroundColor3 = Color
            Aim.BackgroundTransparency = Get("Aim FOV Fill", false) and 1 - Get("Aim FOV Fill Opacity", 0.15) * Alpha or 1
            AimFill.Enabled, AimFill.Color, AimFill.Rotation = AimGradient.Enabled, AimGradient.Color, AimGradient.Rotation
        end
        if Silent.Visible then
            local Radius = Get("Silent Aim FOV", 160)
            local Color, Alpha = Functions.Config.Color("Silent Aim FOV Color", White)
            Silent.Position, Silent.Size = UDim2.fromOffset(Center.X, Center.Y), UDim2.fromOffset(Radius * 2, Radius * 2)
            SilentStroke.Color, SilentStroke.Transparency, SilentStroke.Thickness = Color, 1 - Alpha, Get("Silent Aim FOV Thickness", 1)
            Silent.BackgroundColor3 = Color
            Silent.BackgroundTransparency = Get("Silent Aim FOV Fill", false) and 1 - Get("Silent Aim FOV Fill Opacity", 0.15) * Alpha or 1
        end
        if Line.Visible then
            local Point, Visible = Camera:WorldToViewportPoint(Target.Position)
            Line.Visible = Visible
            if Visible then
                local Delta = Vector2.new(Point.X, Point.Y) - Center
                Line.Position, Line.Size = UDim2.fromOffset(Center.X, Center.Y), UDim2.fromOffset(Delta.Magnitude, 1)
                Line.Rotation, Line.BackgroundColor3 = math.deg(math.atan2(Delta.Y, Delta.X)), Functions.Config.Color("Target Snapline Color", White)
            end
        end
    end
    function Display.Destroy()
        Aim:Destroy()
        Silent:Destroy()
        Line:Destroy()
    end
Functions.Combat.Display = Display
end

do
    local Self = {}
    local function Horizontal(Value)
        return math.sqrt(Value.X * Value.X + Value.Z * Value.Z)
    end
    function Self:Stop()
        self.Returning, State.AutoPeekReturning = false, false
        self.ProgressDistance, self.ProgressTime, self.ReturnTime = nil, nil, nil
    end
    function Self:Reset()
        self.Anchor, self.Simulation, self.LastPosition, self.ShotSequence = nil, nil, nil, nil
        self.Path, self.Waypoint = nil, nil
        self:Stop()
    end
    function Self:Apply(Simulation, Command, Delta)
        local Aim = State.Controllers.Combat
        if not Aim then self:Reset(); return false end
        local _, Character = Functions.Game.Simulation()
        local Position = Simulation.Position
        if not Functions.Config.Get("Auto Peek", false) or not Command.Inputs or not Command.AdditionalInputs
            or not Position or Simulation.Frozen or Simulation.Preparation or Simulation.Noclip or Simulation.Climbing
            or Simulation.Planting or Simulation.Defusing or Character and Character.Health and Character.Health <= 0 then
            self:Reset()
            return false
        end
        local Sequence = Aim.ShotSequence or 0
        if self.Simulation ~= Simulation or not self.Anchor
            or self.LastPosition and (Position - self.LastPosition).Magnitude > 32 then
            self.Anchor, self.Simulation, self.ShotSequence = Position, Simulation, Sequence
            self.Path = {Position}
            self:Stop()
        elseif Sequence ~= self.ShotSequence then
            self.ShotSequence = Sequence
            if not self.Returning and Horizontal(self.Anchor - Position) > 0.3 then
                self.Returning, self.Waypoint = true, #self.Path
                self.ProgressTime, self.ReturnTime = 0, 0
                self.ProgressDistance = nil
            end
        end
        self.LastPosition = Position
        State.AutoPeekReturning = self.Returning
        if not self.Returning then
            if (Position - self.Path[#self.Path]).Magnitude >= 0.6 then
                table.insert(self.Path, Position)
                if #self.Path > 128 then table.remove(self.Path, 2) end
            end
            return false
        end
        while self.Waypoint > 1 and Horizontal(self.Path[self.Waypoint] - Position) <= 0.45 do
            self.Waypoint -= 1
            self.ProgressDistance, self.ProgressTime = nil, 0
        end
        local Offset = self.Path[self.Waypoint] - Position
        local Distance, AnchorDistance = Horizontal(Offset), Horizontal(self.Anchor - Position)
        local Velocity = Simulation.Velocity or Vector3.new(0, 0, 0)
        local Speed, Step = Horizontal(Velocity), math.clamp(Delta or 0, 0, 0.1)
        self.ReturnTime += Step
        if not self.ProgressDistance or Distance < self.ProgressDistance - 0.025 then
            self.ProgressDistance, self.ProgressTime = Distance, 0
        else
            self.ProgressTime += Step
        end
        if self.ProgressTime > 0.75 or self.ReturnTime > 8 then
            for Index = #self.Path, self.Waypoint + 1, -1 do self.Path[Index] = nil end
            self.Waypoint = nil
            self:Stop()
            return false
        end
        for _, Name in {"Forward", "Backward", "Left", "Right"} do Command.Inputs[Name] = false end
        Command.AdditionalInputs.Jump = false
        Command.AdditionalInputs.Walk = false
        if AnchorDistance <= 0.3 and Speed <= 0.75 then
            self.Path, self.Waypoint = {self.Anchor}, nil
            self:Stop()
            return true
        end
        if self.Waypoint == 1 and Speed > 0.75 and AnchorDistance <= math.max(0.3, Speed * Step * 2) then
            Offset = Vector3.new(-Velocity.X, 0, -Velocity.Z)
        end
        if Horizontal(Offset) > 0.001 then
            local CameraYaw = Functions.Angles.Decode(Command.Yaw, Command.Pitch)
            local Inputs = Functions.Angles.RotateInputs({Forward = true}, math.atan2(-Offset.X, -Offset.Z), CameraYaw)
            for _, Name in {"Forward", "Backward", "Left", "Right"} do Command.Inputs[Name] = Inputs[Name] == true end
        end
        return true
    end
    function Self:Destroy() self:Reset() end
Functions.Combat.Peek = Self
end

do
    local Self = {}
    function Self:Reset()
        self.Simulation, self.LastJumped = nil, nil
    end
    function Self:Apply(Simulation, Command, Now)
        if self.Simulation ~= Simulation then self:Reset(); self.Simulation = Simulation end
        local Additional, Inputs = Command.AdditionalInputs, Command.Inputs
        if not Additional or Simulation.Noclip or Simulation.Frozen or Simulation.Preparation
            or Simulation.Planting or Simulation.Defusing then self.LastJumped = nil; return false end
        local Automatic = Functions.Config.Get("Auto Hop", false)
        local Held = State.Services.UserInputService:IsKeyDown(Enum.KeyCode.Space)
        if not Automatic and not (Functions.Config.Get("Bhop", false) and Held) then self.LastJumped = nil; return false end
        if Automatic and (Simulation.Climbing or not Inputs or Additional.Walk or Additional.Duck) then return false end
        local Forward = Inputs and ((Inputs.Forward and 1 or 0) - (Inputs.Backward and 1 or 0)) or 0
        local Side = Inputs and ((Inputs.Right and 1 or 0) - (Inputs.Left and 1 or 0)) or 0
        local Moving = Forward ~= 0 or Side ~= 0
        local Requested = Held or Automatic and Moving
        if not Requested then self.LastJumped = nil; Additional.Jump = false; return false end
        Now = Now or os.clock()
        if Simulation.OnGround or not Automatic and Simulation.Climbing then
            Additional.Jump, Simulation.DoJump = true, true
            Simulation.HasWalkMovedSinceLastJump = false
            self.LastJumped = Now
        else
            Additional.Jump, Simulation.DoJump = false, false
            local Delay = tonumber(Functions.Config.Get("Bhop Duck Delay", 50)) or 50
            if not Automatic and self.LastJumped and Now >= self.LastJumped
                and Now - self.LastJumped < math.clamp(Delay, 0, 1000) / 1000 then Additional.Duck = true end
        end
        return Moving
    end
Functions.Character.Hop = Self
end

do
    local Self = {}
    function Self:Reset() self.StartTick, self.Simulation = nil, nil end
    function Self:Apply(Simulation, Command, Blocked)
        local Inputs, Tick = Command.AdditionalInputs, Command.ClientTick
        if not Functions.Config.Get("Duck Peek Assist", false) or Blocked or not Inputs or type(Tick) ~= "number"
            or Tick ~= Tick or math.abs(Tick) == math.huge or Simulation.OnGround == false or Simulation.Climbing
            or Simulation.Frozen or Simulation.Preparation or Simulation.Noclip or Simulation.Defusing
            or Simulation.Planting or Inputs.Jump or Inputs.PressE then self:Reset(); return false end
        local Rate = State.Modules.GameConfig.Get("Game", "TickRate")
        if type(Rate) ~= "number" or Rate ~= Rate or Rate <= 0 or Rate == math.huge then Rate = 60 end
        local function Duration(Flag, Default)
            local Value = tonumber(Functions.Config.Get(Flag, Default))
            if not Value or Value ~= Value or math.abs(Value) == math.huge then Value = Default end
            return math.max(1, math.floor(math.clamp(Value, 0.1, 2) * Rate + 0.5))
        end
        if self.Simulation ~= Simulation or not self.StartTick or Tick < self.StartTick then
            self.Simulation, self.StartTick = Simulation, Tick
        end
        local Duck, Peek = Duration("Duck Peek Crouch Time", 0.6), Duration("Duck Peek Stand Time", 0.2)
        Inputs.Duck = (Tick - self.StartTick) % (Duck + Peek) < Duck
        return true
    end
    function Self:Destroy() self:Reset() end
Functions.Character.Duck = Self
end

do
    local Modules = State.Modules
    local Self = {}
    local function Setting(Name, Default)
        local Config = Modules.SimulationConfig.CFG
        local Value = Config and Config[Name]
        if Value == nil then Value = Modules.GameConfig.Get("Bomb", Name) end
        return Value == nil and Default or Value
    end
    function Self:Apply(Simulation, Command)
        State.AutoDefusing = false
        local Additional = Command.AdditionalInputs
        if not Functions.Config.Get("Auto Defuse", false) or not Additional or not Simulation.OnGround
            or Simulation.Noclip or Simulation.Climbing or Simulation.Frozen or Simulation.Preparation
            or Simulation.Planting or type(Simulation.BuildCameraCFrame) ~= "function" then return false end
        local Teams = Modules.GameConfig.Get("Bomb", "CanDefuse") or {CT = true}
        if not Teams[Simulation.Team] then return false end
        local Collision = Modules.CollisionModule
        local SweepBox = Collision and Collision.SweepBox
        if type(SweepBox) ~= "function" then
            Collision = Modules.Collision
            SweepBox = Collision and Collision.SweepBox
        end
        if type(SweepBox) ~= "function" then return false end
        local Frame = Simulation:BuildCameraCFrame(true, true)
        local Origin = Frame.Position
        local Reach, Best = Setting("DefuseRange", 4.303), nil
        local Range = Reach
        local Delay = Setting("InterpolationDelay", 0)
        for _, Bomb in Functions.Game.Entities("Bomb") or {} do
            local Part = Bomb.Model and Bomb.Model.PrimaryPart
            if not Part or not Part.Parent or Bomb.Defused or Bomb.Exploded
                or type(Bomb.BlowTimer) == "number" and Bomb.BlowTimer <= Delay
                or Bomb.Defusing and Bomb.Defusing ~= 0 and Bomb.Defusing ~= Simulation.Identifier then continue end
            local Delta = Part.Position - Origin
            local Distance = math.sqrt(Delta.X * Delta.X + Delta.Z * Delta.Z)
            if Distance > Range or Delta.Magnitude > Reach * 1.1612903225806452
                or Delta.Magnitude <= 0.001 then continue end
            local Okay, Hit = pcall(SweepBox, Origin, Part.Position, Vector3.new(0.02, 0.02, 0.02))
            if Okay and type(Hit) == "table" and type(Hit.Fraction) == "number" and Hit.Fraction >= 0.98 then
                Best, Range = Part, Distance
            end
        end
        if not Best then return false end
        local Direction = (Best.Position - Origin).Unit
        local Config = Modules.SimulationConfig.CFG or {}
        local Scale = Config.RecoilScale or Modules.GameConfig.Get("Weapon", "RecoilScale") or 2
        local Tracking = Config.ViewRecoilTracking or Modules.GameConfig.Get("Weapon", "ViewRecoilTracking") or 1
        local Punch = (Simulation.AimPunchAngle or Vector3.new()) * (Scale * Tracking)
            + (Simulation.ViewPunchAngle or Vector3.new())
        Command.Yaw, Command.Pitch = Functions.Angles.Encode(math.atan2(-Direction.X, -Direction.Z) - math.rad(Punch.Y),
            math.asin(math.clamp(-Direction.Y, -1, 1)) + math.rad(Punch.X))
        if Command.Inputs then
            Command.Inputs = table.clone(Command.Inputs)
            for Name in Command.Inputs do Command.Inputs[Name] = false end
        end
        Additional = table.clone(Additional)
        Command.AdditionalInputs = Additional
        Additional.PressE, Additional.Jump = true, false
        State.AutoDefusing = true
        return true
    end
    function Self:Destroy()
        State.AutoDefusing = nil
    end
Functions.Character.Defuse = Self
end

do
    local Get, Modules = Functions.Config.Get, State.Modules
    local Shot = Functions.Combat.Shot
    local Scan = Functions.Combat.Targets
    local Packet = Functions.Combat.Packet
    local Steering = Functions.Combat.Steering
    local Anti = Functions.Combat.Anti
    local Reload = Functions.Combat.Reload
    local Display = Functions.Combat.Display
    local Combat = {FireHeld = false, ShotSequence = 0, Stats = {State = "Disabled"}, Installed = {}}
    local function Manual()
        return Functions.Game.ManualFire()
    end
    local function Fire(Value, Alternate)
        if Combat.FireHeld and (not Value or Alternate ~= Combat.FireAlternate) then
            pcall(Modules.Weapon.UpdateKeyState, Combat.FireAlternate and "WishFire2" or "WishFire", false)
        end
        Combat.FireHeld, Combat.FireAlternate = Value, Alternate
        if Value then pcall(Modules.Weapon.UpdateKeyState, Alternate and "WishFire2" or "WishFire", true) end
    end
    local function Paused(Simulation)
        return State.AutoDefusing or State.AutoPeekReturning or Simulation and (Simulation.Defusing or Simulation.Planting
            or Simulation.Frozen or Simulation.Preparation or Simulation.Noclip)
    end
    function Combat.Pause()
        Combat.Saved, Combat.Prepared, Combat.RageTarget, Combat.RageFiring = nil, nil, nil, false
        Combat.RejectedTick, Combat.Recoil = nil, nil
        Fire(false)
    end
    function Combat.Reset(Reason, PreserveReload)
        Combat.Pause()
        Combat.Target, Combat.MoveCommand, Combat.Simulation, Combat.Weapon = nil, nil, nil, nil
        Combat.FiredTick, Combat.ScanTime = nil, nil
        Steering:Reset()
        Scan.Reset()
        if not PreserveReload then Reload.Reset() end
        Anti:Reset()
        Combat.Stats.State = Reason or "Disabled"
    end
    local function Context(Simulation, Weapon)
        if Combat.Simulation ~= Simulation or Combat.Weapon ~= Weapon then
            Combat.Reset(Combat.Simulation ~= Simulation and "New Character" or "Weapon Changed", Simulation ~= nil and Combat.Simulation == Simulation)
            Combat.Simulation, Combat.Weapon = Simulation, Weapon
        end
    end
    function Combat.BeginCommand(Simulation, Command)
        Context(Simulation, Functions.Game.Weapon())
        if not Command or type(Command.ClientTick) ~= "number" then return end
        Combat.LastTick = Command.ClientTick
        Combat.MoveCommand = {Tick = Command.ClientTick, ViewYaw = Command.Yaw, ViewPitch = Command.Pitch,
            Yaw = Command.Yaw, Pitch = Command.Pitch, Inputs = type(Command.Inputs) == "table" and table.clone(Command.Inputs)}
    end
    function Combat.Anticipate(Simulation, Command)
        if Get("Ragebot", false) and Get("Rage Auto Crouch", false) and not Paused(Simulation) then
            return Scan.Peek(Simulation, Command)
        end
        return nil
    end
    function Combat.Movement(Command)
        local Move = Combat.MoveCommand
        if Move and Command and Move.Tick == Command.ClientTick then
            Move.Yaw, Move.Pitch = Command.Yaw, Command.Pitch
            Move.Inputs = type(Command.Inputs) == "table" and table.clone(Command.Inputs)
        end
    end
    local function Save(Command, Simulation, Weapon, Target, Yaw, Pitch, Rage)
        local Move, Ready = Combat.MoveCommand, true
        if Move and Move.Tick ~= Command.ClientTick then Move = nil end
        local BaseYaw, BasePitch = Move and Move.Yaw or Command.Yaw, Move and Move.Pitch or Command.Pitch
        if Rage then Yaw, Pitch, Ready = Steering:Step(Command, Simulation, Yaw, Pitch, BaseYaw, BasePitch) end
        if not Yaw then return nil end
        local Saved = {Tick = Command.ClientTick, Yaw = Yaw, Pitch = Pitch, MoveYaw = BaseYaw, MovePitch = BasePitch,
            MoveInputs = Move and Move.Inputs or type(Command.Inputs) == "table" and table.clone(Command.Inputs),
            Target = Target, Ready = Ready, Rage = Rage, Simulation = Simulation, Weapon = Weapon}
        Combat.Saved, Combat.Target = Saved, Target
        if Rage then
            Combat.RageTarget, Combat.RageFiring = Target, Ready
            Combat.Stats.State = Ready and "Ready" or "Turning"
            if not Ready then Combat.RejectedTick = Command.ClientTick end
        end
        return Saved
    end
    local function Prepare(Command, Simulation, Weapon, Seed)
        Context(Simulation, Weapon)
        if not Command or not Simulation or not Shot.Gun(Weapon) or Paused(Simulation) then return nil end
        local Camera = Functions.Game.Camera()
        local Origin = Shot.Origin(Camera, Simulation)
        if not Origin then return nil end
        if Get("Ragebot", false) then
            local Prepared, Target, Yaw, Pitch = Combat.Prepared
            local Punch = Simulation.SeenAimPunch or Simulation.AimPunchAngle
            local Frame, Half
            if Prepared and Scan.Current(Prepared.Target) then
                Frame, Half = Functions.Game.Hitbox(Prepared.Target.Data, Prepared.Target.Part)
                if not Frame or not Half then
                    Frame, Half = Functions.Game.PartFrame(Prepared.Target.Data, Prepared.Target.Part), Prepared.Target.Part.Size * 0.5
                end
            end
            if Prepared and Prepared.Tick == Command.ClientTick and Prepared.Weapon == Weapon and Prepared.Simulation == Simulation
                and Prepared.Seed == Seed and Prepared.Punch == Punch and Prepared.Velocity == Simulation.Velocity
                and Prepared.Duck == Simulation.DuckAmount and Prepared.Ground == Simulation.OnGround
                and Prepared.Recoil == Weapon.RecoilIndex and Prepared.Penalty == Weapon.AccuracyPenalty
                and Prepared.Mode == Weapon.Mode and Prepared.Zoom == Weapon.ZoomLevel and Prepared.Origin == Origin
                and Prepared.NoSpread == Get("No Spread", false) and Prepared.Pattern == Get("No Spread Fixed Pattern", false)
                and Prepared.Minimum == Get("Rage Minimum Damage", 0) and Prepared.Accuracy == Get("Rage Accuracy Check", false)
                and Prepared.Chance == Get("Rage Minimum Hit Chance", 65) and Scan.Current(Prepared.Target)
                and Prepared.Frame == Frame and Prepared.Half == Half
                and Prepared.Position == Functions.Game.PartPosition(Prepared.Target.Data, Prepared.Target.Part) then
                Yaw, Pitch = Scan.Shot(Prepared.Target, Origin, Command.ClientTick, Weapon, Simulation, Seed, true)
                if Yaw then Target = Prepared.Target end
            end
            if not Yaw then
                Target, Yaw, Pitch = Scan.Rage(Command, Simulation, Weapon, Seed)
                if Target then
                    Combat.Prepared = {Tick = Command.ClientTick, Weapon = Weapon, Simulation = Simulation, Seed = Seed,
                        Punch = Punch, Velocity = Simulation.Velocity, Duck = Simulation.DuckAmount, Ground = Simulation.OnGround,
                        Recoil = Weapon.RecoilIndex, Penalty = Weapon.AccuracyPenalty, Mode = Weapon.Mode, Zoom = Weapon.ZoomLevel,
                        Origin = Origin, Position = Functions.Game.PartPosition(Target.Data, Target.Part), Target = Target, Frame = Target.Frame, Half = Target.Half,
                        Yaw = Yaw, Pitch = Pitch, NoSpread = Get("No Spread", false), Pattern = Get("No Spread Fixed Pattern", false),
                        Minimum = Get("Rage Minimum Damage", 0), Accuracy = Get("Rage Accuracy Check", false), Chance = Get("Rage Minimum Hit Chance", 65)}
                else Combat.Prepared = nil end
            end
            Combat.RageTarget, Combat.Target = Target or Scan.Pending, Target or Scan.Pending
            if not Yaw then
                Combat.Saved, Combat.RageFiring, Combat.RejectedTick = nil, false, Command.ClientTick
                Combat.Stats.State = Scan.Stats.Reject or "No Target"
                return nil
            end
            return Save(Command, Simulation, Weapon, Target, Yaw, Pitch, true)
        end
        if Get("Silent Aim", false) then
            local Target = Scan.Legit(true, Origin, Command.ClientTick)
            if Target then
                local Yaw, Pitch = Scan.Shot(Target, Origin, Command.ClientTick, Weapon, Simulation, Seed, false)
                if Yaw then return Save(Command, Simulation, Weapon, Target, Yaw, Pitch, false) end
            end
        end
        if Get("No Recoil", false) or Get("No Spread", false) then
            local Move = Combat.MoveCommand
            if Move and Move.Tick ~= Command.ClientTick then Move = nil end
            local Yaw, Pitch = Functions.Angles.Decode(Move and Move.ViewYaw or Command.Yaw, Move and Move.ViewPitch or Command.Pitch)
            local Direction = Functions.Angles.Direction(Yaw, Pitch)
            if Camera and (Camera.CFrame.Position - Origin).Magnitude > 0.1 then
                if not Combat.AimRay then
                    Combat.AimRay = RaycastParams.new()
                    Combat.AimRay.FilterType, Combat.AimRay.IgnoreWater = Enum.RaycastFilterType.Exclude, true
                end
                local Ignore = {Camera}
                local Character = State.Services.Players.LocalPlayer.Character
                if Character then Ignore[#Ignore + 1] = Character end
                if State.ThirdPersonModel then Ignore[#Ignore + 1] = State.ThirdPersonModel end
                Combat.AimRay.FilterDescendantsInstances = Ignore
                local Range = Weapon.Data.Range or 2000
                local Hit = State.Services.Workspace:Raycast(Camera.CFrame.Position, Direction * Range, Combat.AimRay)
                local Position = Hit and Hit.Position or Camera.CFrame.Position + Direction * Range
                if (Position - Origin).Magnitude > 0 then Direction = (Position - Origin).Unit end
            end
            local NewYaw, NewPitch = Shot.Angles(Direction, Command.ClientTick, Weapon, Simulation, Seed,
                Get("No Recoil", false), Seed ~= nil and Get("No Spread", false))
            if NewYaw then return Save(Command, Simulation, Weapon, nil, NewYaw, NewPitch, false) end
        end
        Combat.Saved = nil
        return nil
    end
    local function Apply(Command, Simulation, Saved)
        local Result = Packet:Apply(Command, Saved)
        if not Result then return false end
        Command.Yaw, Command.Pitch, Command.Inputs = Result.Yaw, Result.Pitch, Result.Inputs
        Simulation.Yaw, Simulation.Pitch = Functions.Angles.Decode(Result.Yaw, Result.Pitch)
        return Saved.Ready
    end
    function Combat.EndCommand(Simulation, Command)
        local Move = Combat.MoveCommand
        if not Move or not Command or Move.Tick ~= Command.ClientTick then return end
        local Saved = Combat.Saved
        if Get("Ragebot", false) and Saved and Saved.Tick == Command.ClientTick and Saved.Simulation == Simulation then
            Apply(Command, Simulation, Saved)
        else
            Simulation.Yaw, Simulation.Pitch = Functions.Angles.Decode(Move.ViewYaw, Move.ViewPitch)
        end
    end
    local function Scope(Map, Weapon, Target)
        if not Get("Rage Auto Scope", false) or not Target or not Weapon or Weapon.Data.Ammo <= 0 then return false end
        local Alternate = Weapon.Data.AltFunction
        local Kind = Alternate and Alternate.Name
        if Kind ~= "Scope" and Kind ~= "ScopeRifle" then return false end
        if Kind == "Scope" and (Weapon.ZoomLevel or 0) > 0 or Kind == "ScopeRifle" and Weapon.Mode == 2 then return false end
        if not Manual() then Map.WishBooleans.WishFire = false end
        local Restoring = Kind == "Scope" and (Weapon.SniperShotActive or (Weapon.SavedZoom or 0) > 0)
        local Ready = not Weapon.Equipping and not Weapon.Reloading and not Weapon.Firing and not Weapon.WaitForNoAttack
            and not Weapon.Silencer and not Restoring and (Weapon.Timer or 0) > (Weapon.AltFunctionDelay or 0)
        if Ready and not Weapon.AltFunctionHeld then Map.WishBooleans.WishFire2 = true end
        return true
    end
    local function Input(Original, ...)
        local Results = table.pack(Original(...))
        local Native = Results[1]
        if type(Native) ~= "table" or type(Native.WishBooleans) ~= "table" then return table.unpack(Results, 1, Results.n) end
        local Map = table.clone(Native)
        Map.WishBooleans = table.clone(Native.WishBooleans)
        Results[1] = Map
        local Simulation, Character = Functions.Game.Simulation()
        local Weapon = Functions.Game.Weapon()
        local Command = Character and Character.CurrentCommand
        if Paused(Simulation) then
            Combat.Pause()
            if not Manual() then Map.WishBooleans.WishFire, Map.WishBooleans.WishFire2 = false, false end
            return table.unpack(Results, 1, Results.n)
        end
        if Get("Ragebot", false) and Shot.Gun(Weapon) and Command then
            local Saved = Prepare(Command, Simulation, Weapon, Shot.Seed(Command.ClientTick, Weapon))
            Combat.RageFiring = Saved ~= nil and Saved.Ready and Weapon.Data.Ammo > 0 and not Weapon.WaitForNoAttack
            if Combat.RageFiring then Map.WishBooleans.WishFire = true
            elseif not Manual() then Map.WishBooleans.WishFire = false end
            if Saved and not Saved.Ready then Map.WishBooleans.WishFire = false end
            if Scope(Map, Weapon, Combat.RageTarget) then Combat.RageFiring = false end
        end
        if Shot.Gun(Weapon) and (Get("Rapid Fire", false) or Get("Ragebot", false)) then
            local Alternate = Weapon.Data.AltFunction
            local NeedsRelease = not Weapon.Data.Automatic or Alternate and Alternate.Name == "Burst" and Weapon.Mode == 2
            if NeedsRelease and Map.WishBooleans.WishFire then Map.WishBooleans.WishFire = Weapon.WannaShoot ~= true end
            if Weapon.WaitForNoAttack then Map.WishBooleans.WishFire, Map.WishBooleans.WishFire2 = false, false end
        end
        Reload.Apply(Map, Weapon)
        Combat.Stats.RequestedFire = Map.WishBooleans.WishFire
        return table.unpack(Results, 1, Results.n)
    end
    local function Tick(Original, Weapon, Character, WeaponCommand, Resim, ...)
        local Simulation, Local = Functions.Game.Simulation()
        if not Resim and Character == Local and Simulation and Shot.Gun(Weapon) and Weapon == Functions.Game.Weapon()
            and Get("Ragebot", false) and not Paused(Simulation) then
            local Command = Character.CurrentCommand
            local Wishes = WeaponCommand and WeaponCommand.WishBooleans
            if Command and (Wishes and Wishes.WishFire or Shot.Burst(Weapon)) then
                local Saved = Prepare(Command, Simulation, Weapon, Shot.Seed(Command.ClientTick, Weapon))
                if Saved then Apply(Command, Simulation, Saved) end
                if not Saved or not Saved.Ready then
                    if Saved or not Manual() and not Shot.Burst(Weapon) then
                        if Wishes then Wishes.WishFire = false end
                        Combat.RejectedTick = Command.ClientTick
                    end
                end
            end
        end
        return Original(Weapon, Character, WeaponCommand, Resim, ...)
    end
    local function NativeFire(Original, Weapon, Character, Resim, RenderTime, Seed, ...)
        local Simulation, Local = Functions.Game.Simulation()
        local LocalShot = not Resim and Character ~= nil and Character == Local and Simulation
            and Character.Simulation == Simulation and Weapon == Functions.Game.Weapon() and Shot.Gun(Weapon)
        local Command, Ammo, Recoil
        if LocalShot then
            Command, Ammo, Recoil = Character.CurrentCommand, Weapon.Data.Ammo, Weapon.RecoilIndex
            Combat.Stats.FireCalls = (Combat.Stats.FireCalls or 0) + 1
            if Command and not Paused(Simulation) then
                local Saved = Prepare(Command, Simulation, Weapon, Seed)
                if Saved then
                    Apply(Command, Simulation, Saved)
                    if Saved.Rage and not Saved.Ready and not Shot.Burst(Weapon) then
                        Combat.RejectedTick = Command.ClientTick
                        local Map = Character.CurrentWeaponCommand
                        if Map and Map.WishBooleans then Map.WishBooleans.WishFire = false end
                        return nil
                    end
                elseif Get("Ragebot", false) and not Manual() and not Shot.Burst(Weapon) then
                    Combat.RejectedTick, Combat.RageFiring = Command.ClientTick, false
                    local Map = Character.CurrentWeaponCommand
                    if Map and Map.WishBooleans then Map.WishBooleans.WishFire = false end
                    return nil
                end
            end
        end
        local Results = table.pack(Original(Weapon, Character, Resim, RenderTime, Seed, ...))
        if LocalShot and (Results[1] ~= nil or Weapon.Data.Ammo < Ammo
            or type(Recoil) == "number" and type(Weapon.RecoilIndex) == "number" and Weapon.RecoilIndex > Recoil) then
            Combat.ShotSequence += 1
            Combat.FiredTick, Combat.Stats.State = Command and Command.ClientTick, "Fired"
            Combat.Stats.Shots = Combat.ShotSequence
        end
        return table.unpack(Results, 1, Results.n)
    end
    local function Hold(PacketValue)
        local Map = PacketValue.CurrentWeaponCommand
        if Map and Map.WishBooleans then
            Map = table.clone(Map)
            Map.WishBooleans = table.clone(Map.WishBooleans)
            Map.WishBooleans.WishFire = false
            PacketValue.CurrentWeaponCommand = Map
        end
    end
    local function Network(Original, Native, ...)
        if type(Native) ~= "table" or type(Native.CurrentCommand) ~= "table" then return Original(Native, ...) end
        local Value, Command = table.clone(Native), Native.CurrentCommand
        local Simulation = Functions.Game.Simulation()
        local Weapon, Saved = Functions.Game.Weapon(), Combat.Saved
        local Wishes = Value.CurrentWeaponCommand and Value.CurrentWeaponCommand.WishBooleans
        local Requested = Manual() or Combat.FireHeld or Wishes and Wishes.WishFire
            or Value.CurrentWeaponCommand and Value.CurrentWeaponCommand.Shot
        if Combat.FiredTick ~= Command.ClientTick then
            if not Paused(Simulation) and Shot.Gun(Weapon) and (Requested or Get("Ragebot", false)) then
                Saved = Prepare(Command, Simulation, Weapon, Shot.Seed(Command.ClientTick, Weapon))
            else Saved = nil end
        end
        local Applied = Saved and Saved.Tick == Command.ClientTick and Saved.Simulation == Simulation and Saved.Weapon == Weapon
        if Applied then
            Value.CurrentCommand = Packet:Apply(Command, Saved) or Command
            if Saved.Rage and not Saved.Ready then Hold(Value) end
        elseif Get("Ragebot", false) and Combat.RejectedTick == Command.ClientTick and Combat.FiredTick ~= Command.ClientTick then Hold(Value) end
        if not Applied then
            local Shooting = Requested or Combat.FiredTick == Command.ClientTick or Wishes and Wishes.WishFire2
            Anti:Apply(Value, Command, Shooting)
        end
        if Get("Backtrack", false) and not Get("Ragebot", false) and (Requested or Combat.FiredTick == Command.ClientTick)
            and Value.CurrentWeaponCommand then
            local Map = table.clone(Value.CurrentWeaponCommand)
            Map.RenderTime = (Map.RenderTime or Command.RenderTime or os.clock()) - math.clamp(Get("Backtrack Time", 0.1), 0, 0.2)
            Value.CurrentWeaponCommand = Map
        end
        if Get("Ragebot", false) and Get("Rage Smooth Aim", false) then Steering:Commit(Value.CurrentCommand, Simulation)
        else Steering:Reset() end
        return Original(Value, ...)
    end
    local function Install(Name, Module, Member, Callback)
        local Target = Module and Module[Member]
        if type(Target) == "function" and Combat.Installed[Name] ~= Target then
            if Combat.Installed[Name] then Functions.Hooks.Remove("Combat." .. Name) end
            if Functions.Hooks.Add("Combat." .. Name, Target, Callback) then Combat.Installed[Name] = Target end
        end
    end
    local function Crosshair(Weapon, Simulation)
        local Camera = Functions.Game.Camera()
        if not Camera then return nil end
        local Origin, Direction = Camera.CFrame.Position, Camera.CFrame.LookVector
        if Get("Trigger Position", "Center") == "Mouse" then
            local Mouse = State.Services.UserInputService:GetMouseLocation()
            Direction = Camera:ViewportPointToRay(Mouse.X, Mouse.Y).Direction
        end
        if Get("Trigger Mode", "Mouse") == "Seed" then
            local X, Y = Shot.Offset((Combat.LastTick or 0) + 1, Weapon, Simulation)
            if X == nil then return nil end
            local Frame = CFrame.lookAt(Vector3.zero, Direction)
            Direction = (Direction + Frame.RightVector * X + Frame.UpVector * Y).Unit
        end
        local Best, Range = nil, Weapon.Data.Range or 2000
        for _, Entity in Functions.Game.Entities("Character") or {} do
            if not Scan.Allowed(Entity) then continue end
            for _, Part in Functions.Target.Parts(Entity) or {} do
                if Get("Trigger Head Only", false) and Part.Name ~= "Head" then continue end
                local Frame, Half = Functions.Game.Hitbox(Entity, Part)
                if not Frame then continue end
                local Candidate = {Data = Entity, Part = Part, Frame = Frame, Half = Half}
                local Hit, Distance = Functions.Target.RayHitsHitbox(Candidate, Origin, Direction, Range)
                if Hit and Distance < Range and Functions.Target.Visible(Part, Origin, Origin + Direction * (Distance + 0.001)) then
                    Best, Range = Candidate, Distance
                end
            end
        end
        return Best
    end
    function Combat.Update(Delta)
        Install("Input", Modules.WeaponInput, "GetCommandMap", Input)
        Install("Tick", Modules.GunWeapon, "TickCommand", Tick)
        Install("Fire", Modules.GunWeapon, "Fire", NativeFire)
        Install("Packet", Modules.Networking, "ProcessPacket", Network)
        local Camera, Simulation = Functions.Game.Camera(), Functions.Game.Simulation()
        local Weapon = Functions.Game.Weapon()
        if not Camera or not Simulation then Combat.Reset(not Camera and "No Camera" or "No Character"); Display.Update(Camera, nil); return end
        Context(Simulation, Weapon)
        if Paused(Simulation) then Combat.Pause(); Display.Update(Camera, nil); return end
        local Rage = Get("Ragebot", false)
        if not Rage then Combat.RageTarget, Combat.RageFiring = nil, false end
        local Target = Rage and Combat.RageTarget or (Get("Aimbot", false) or Get("Target Snapline", false)) and Scan.Legit(false)
        Combat.Target = Target
        Display.Update(Camera, Target)
        local RecoilYaw, RecoilPitch = 0, 0
        if not Rage and Get("Legit Recoil Control", false) and not Get("No Recoil", false) and Shot.Gun(Weapon)
            and not Weapon.Reloading and not Weapon.Equipping and (Manual() or Weapon.Firing) then
            local Punch = Simulation.AimPunchAngle
            if typeof(Punch) == "Vector3" then
                local Scale = math.rad(tonumber(Functions.Game.Config("Weapon", "RecoilScale")) or 2)
                RecoilYaw = -Punch.Y * Scale * Get("Legit Recoil X", 100) / 100
                RecoilPitch = Punch.X * Scale * Get("Legit Recoil Y", 100) / 100
                local Previous = Combat.Recoil or {Yaw = 0, Pitch = 0}
                if Modules.Camera and Modules.Camera.GetAngles and Modules.Camera.SetAngles then
                    local Yaw, Pitch = Modules.Camera.GetAngles()
                    Modules.Camera.SetAngles(Yaw + RecoilYaw - Previous.Yaw, Pitch + RecoilPitch - Previous.Pitch)
                end
                Combat.Recoil = {Yaw = RecoilYaw, Pitch = RecoilPitch}
            end
        else Combat.Recoil = nil end
        if not Rage and Target and Get("Aimbot", false) and Modules.Camera and Modules.Camera.GetAngles and Modules.Camera.SetAngles then
            local Point = Camera:WorldToViewportPoint(Target.Position)
            local ScreenDistance = (Vector2.new(Point.X, Point.Y) - Camera.ViewportSize * 0.5).Magnitude
            if ScreenDistance >= Get("Aim Deadzone", 0) then
                local Direction = (Target.Position - Camera.CFrame.Position).Unit
                if Get("Seed Prediction", false) and Shot.Gun(Weapon) then
                    for _ = 1, 3 do
                        local X, Y = Shot.Offset((Combat.LastTick or 0) + 1, Weapon, Simulation)
                        if X == nil then break end
                        local Frame = CFrame.lookAt(Vector3.zero, Direction)
                        local Predicted = (Direction + Frame.RightVector * X + Frame.UpVector * Y).Unit
                        Direction = (Direction + (Target.Position - Camera.CFrame.Position).Unit - Predicted).Unit
                    end
                end
                local Yaw, Pitch = math.atan2(-Direction.X, -Direction.Z), math.asin(-Direction.Y)
                local CurrentYaw, CurrentPitch = Modules.Camera.GetAngles()
                local Speed = Get("Aim Speed", 0)
                local Alpha = Speed <= 0 and 1 or 1 - math.exp(-Speed * math.max(Delta, 0))
                if Get("Aim Mode", "Camera") == "Mouse" and type(mousemoverel) == "function" then
                    local Mouse = State.Services.UserInputService:GetMouseLocation()
                    mousemoverel((Point.X - Mouse.X) * Alpha, (Point.Y - Mouse.Y) * Alpha)
                else
                    Yaw, Pitch = Yaw + RecoilYaw, Pitch + RecoilPitch
                    Modules.Camera.SetAngles(CurrentYaw + math.atan2(math.sin(Yaw - CurrentYaw), math.cos(Yaw - CurrentYaw)) * Alpha,
                        CurrentPitch + (Pitch - CurrentPitch) * Alpha)
                end
            end
        end
        if Rage and Shot.Gun(Weapon) then Fire(false); return end
        local Shoot, Alternate = false, false
        if Get("Triggerbot", false) and Shot.Gun(Weapon) then Shoot = Crosshair(Weapon, Simulation) ~= nil end
        if Get("Knifebot", false) and Weapon and Weapon.Data and Weapon.Data.Type == "Melee" then
            Shoot = Scan.Closest(Get("Knife Range", 7), "World", true) ~= nil
            Alternate = Shoot and Get("Knife Mode", "Stab") == "Stab"
        end
        Fire(Shoot, Alternate)
    end
    function Combat.Diagnostics()
        local Status = {}
        for Name in Combat.Installed do Status[Name] = true end
        return {State = Combat.Stats.State, Shots = Combat.ShotSequence, FireCalls = Combat.Stats.FireCalls,
            RequestedFire = Combat.Stats.RequestedFire, Target = Combat.Target and Combat.Target.Data.UserId,
            Part = Combat.Target and Combat.Target.Part.Name, Damage = Combat.Target and Combat.Target.Damage,
            Accuracy = Scan.Stats.Accuracy, Chance = Scan.Stats.Chance, Checks = Scan.Stats.Checks,
            Reject = Scan.Stats.Reject, Candidates = Scan.Stats.Candidates, Hooks = Status}
    end
    function Combat.Destroy()
        Combat.Reset("Unloaded")
        for Name in Combat.Installed do Functions.Hooks.Remove("Combat." .. Name) end
        table.clear(Combat.Installed)
        Display.Destroy()
    end
State.Controllers.Combat = Combat
end

Functions.Utility.Register("Combat", State.Controllers.Combat, "Dot")

do
    local Get, Modules = Functions.Config.Get, State.Modules
    local Combat = State.Controllers.Combat
    local Hop = Functions.Character.Hop
    local Duck = Functions.Character.Duck
    local Defuse = Functions.Character.Defuse
    local Peek = Functions.Combat.Peek
    local Movement = {History = {}, Installed = {}, PlantHeld = false, JumpBoost = false}
    local function Restricted(Simulation)
        return Simulation.Climbing or Simulation.Noclip or Simulation.Frozen or Simulation.Preparation
            or Simulation.Planting or Simulation.Defusing
    end
    local function Moving(Command)
        local Inputs = Command.Inputs
        return Inputs and ((Inputs.Forward and 1 or 0) ~= (Inputs.Backward and 1 or 0)
            or (Inputs.Right and 1 or 0) ~= (Inputs.Left and 1 or 0))
    end
    local function Strafe(Simulation, Command, Delta)
        local Velocity, Inputs, Constants = Simulation.Velocity, Command.Inputs, Simulation.Constants
        if not Velocity or not Inputs or not Constants or type(Delta) ~= "number" or Delta <= 0 then return end
        local Forward = (Inputs.Forward and 1 or 0) - (Inputs.Backward and 1 or 0)
        local Side = (Inputs.Right and 1 or 0) - (Inputs.Left and 1 or 0)
        if Forward == 0 and Side == 0 then return end
        local Speed = math.sqrt(Velocity.X * Velocity.X + Velocity.Z * Velocity.Z)
        local Factor = tonumber(Functions.Game.Config("Character", "BunnyHopMaxSpeedFactor")) or 1.1
        if Factor <= 0 or Speed < 0.01 then return end
        local Maximum = 18.044 * Factor
        local Yaw = Functions.Angles.Decode(Command.Yaw, Command.Pitch)
        local InputAngle = math.atan2(-Side, Forward)
        local Heading = math.atan2(-Velocity.X, -Velocity.Z)
        local Error = math.atan2(math.sin(Yaw + InputAngle - Heading), math.cos(Yaw + InputAngle - Heading))
        local WishSpeed = math.min(Constants.Speed, Constants.MaxSpeed) * math.clamp(1 - (Simulation.Stamina or 0) * 0.01, 0, 1) ^ 2
        local Cap = math.min(Constants.MaxAirStrafeSpeed, WishSpeed)
        local Acceleration = Constants.AirAcceleration * WishSpeed * Delta * (Simulation.AirFrictionReduced and 0.65 or 1)
        if Cap <= 0 or Acceleration <= 0 then return end
        local Projection = math.max(0, Cap - Acceleration)
        local Gain = math.min(Acceleration, Cap - Projection)
        if Speed * Speed + 2 * Projection * Gain + Gain * Gain > Maximum * Maximum then
            Gain = math.min(Acceleration, 2 * Cap)
            Projection = (Maximum * Maximum - Speed * Speed - Gain * Gain) / (2 * Gain)
        end
        local Angle = math.max(math.abs(Error), math.acos(math.clamp(Projection / Speed, -1, 1)))
        local Sign = Error >= 0 and 1 or -1
        if math.abs(Error) < 0.0001 then
            if Speed >= Maximum - 0.01 then return end
            Sign = (Command.ClientTick or 0) % 2 == 0 and 1 or -1
        end
        local Allowed = math.abs(Error)
        if Speed < Maximum - 0.01 then Allowed = math.max(Allowed, math.rad(3.5)) end
        local function Turn(Value)
            local Along = math.cos(Value)
            local Amount = math.clamp(Cap - Speed * Along, 0, Acceleration)
            return math.atan2(Amount * math.sin(Value), Speed + Amount * Along)
        end
        if Turn(Angle) > Allowed then
            local Low, High = math.acos(math.clamp(Cap / Speed, -1, 1)), Angle
            for _ = 1, 12 do
                local Middle = (Low + High) * 0.5
                if Turn(Middle) > Allowed then High = Middle else Low = Middle end
            end
            Angle = Low
        end
        local _, Pitch = Functions.Angles.Decode(Command.Yaw, Command.Pitch)
        Command.Yaw = Functions.Angles.Encode(Heading + Sign * Angle - InputAngle, Pitch)
    end
    local function Plant(Value)
        if Movement.PlantHeld and not Value then pcall(Modules.Weapon.UpdateKeyState, "WishFire", false) end
        Movement.PlantHeld = Value
        if Value then pcall(Modules.Weapon.UpdateKeyState, "WishFire", true) end
    end
    local function PlantZone(Position)
        local Map = State.Services.Workspace:FindFirstChild("Map")
        local Zones = Map and Map:FindFirstChild("Zones")
        local Plants = Zones and Zones:FindFirstChild("Plants")
        if not Plants then return false end
        for _, Part in Plants:GetChildren() do
            if not Part:IsA("BasePart") then continue end
            local Local, Half = Part.CFrame:PointToObjectSpace(Position), Part.Size * 0.5
            if math.abs(Local.X) <= Half.X and math.abs(Local.Y) <= Half.Y and math.abs(Local.Z) <= Half.Z then return true end
        end
        return false
    end
    local function CommandHook(Original, Simulation, Native, Delta, Resim, ...)
        if Simulation ~= Functions.Game.Simulation() or type(Native) ~= "table" then return Original(Simulation, Native, Delta, Resim, ...) end
        local Command, Active = Native, nil
        if not Resim then
            if Command.Inputs then Command.Inputs = table.clone(Command.Inputs) end
            if Command.AdditionalInputs then Command.AdditionalInputs = table.clone(Command.AdditionalInputs) end
            Combat.BeginCommand(Simulation, Command)
            local Defusing = Defuse:Apply(Simulation, Command)
            local Returning = false
            if Defusing then Combat.Pause() else Returning = Peek:Apply(Simulation, Command, Delta) end
            local RageTarget = Get("Ragebot", false) and Combat.RageTarget
            if RageTarget and (not Functions.Target.Valid(RageTarget.Data) or not Functions.Target.Enemy(RageTarget.Data)) then RageTarget = nil end
            local Approaching
            if not RageTarget and not Defusing and not Returning and not Restricted(Simulation) then
                Approaching = Combat.Anticipate(Simulation, Command)
            end
            local Additional = Command.AdditionalInputs
            local Ducking = Duck:Apply(Simulation, Command, Defusing or Returning)
            if not Ducking and not Defusing and Additional and Get("Ragebot", false) and Get("Rage Auto Crouch", false)
                and (RageTarget or Approaching) and Simulation.OnGround and not Restricted(Simulation) and not Returning
                and not (Get("Auto Hop", false) and Moving(Command))
                and not State.Services.UserInputService:IsKeyDown(Enum.KeyCode.Space) then
                Additional.Duck, Additional.Jump = true, false
            end
            Movement.JumpBoost = not Defusing and not Returning and Hop:Apply(Simulation, Command)
            Active = {Simulation = Simulation, Defusing = Defusing, Hop = Movement.JumpBoost,
                NoSlow = not Defusing and Get("No Slow", false)}
            Active.AutoHop = Active.Hop and Get("Auto Hop", false)
            if Active.AutoHop then Active.NoSlow = false; Strafe(Simulation, Command, Delta) end
            local Stop = Get("Force Stop", false) or Get("Ragebot", false) and Get("Rage Auto Stop", false) and not Movement.JumpBoost
            if not Returning and not Defusing and not Restricted(Simulation) and Stop
                and (Combat.FireHeld or Combat.RageFiring or RageTarget and Get("Rage Auto Stop", false)) and Command.Inputs then
                for Name in Command.Inputs do Command.Inputs[Name] = false end
                Active.Hop, Active.AutoHop, Movement.JumpBoost = false, false, false
            end
            Combat.Movement(Command)
            local Weapon = Functions.Game.Weapon()
            Plant(not Defusing and Get("Auto Plant", false) and Simulation.Team == "T" and Simulation.OnGround and Weapon ~= nil
                and (Weapon.Name == "C4" or Weapon.Name == "Bomb") and PlantZone(Simulation.Position))
            local Tick = Command.ClientTick
            if type(Tick) == "number" then Movement.History[Tick % 128] = {Tick = Tick, State = Active} end
        elseif type(Command.ClientTick) == "number" then
            local Saved = Movement.History[Command.ClientTick % 128]
            if Saved and Saved.Tick == Command.ClientTick and Saved.State.Simulation == Simulation then Active = Saved.State end
        end
        local Previous = Movement.Active
        Movement.Active = Active
        local Results = table.pack(pcall(Original, Simulation, Command, Delta, Resim, ...))
        Movement.Active = Previous
        if not Results[1] then State.Errors["Movement.Command"] = tostring(Results[2]); return nil end
        if not Resim then Combat.EndCommand(Simulation, Command) end
        return table.unpack(Results, 2, Results.n)
    end
    local function Active(Simulation)
        local Current = Movement.Active
        return Current and Current.Simulation == Simulation and Simulation == Functions.Game.Simulation()
            and not Restricted(Simulation) and Current or nil
    end
    local function Speed(Simulation)
        local Config = Modules.SimulationConfig
        local Constants = Simulation.Constants
        local Maximum = Config and Config.ConstantsTemplate and Config.ConstantsTemplate.MaxSpeed or Constants.MaxSpeed
        if Simulation.Walk and not Simulation.DuckHeld then Maximum *= Constants.WalkModifier end
        if Modules.Movement and type(Modules.Movement.GetDuckSpeedModifier) == "function" then
            Maximum *= Modules.Movement.GetDuckSpeedModifier(Simulation)
        end
        return Maximum
    end
    local function AirMove(Original, Simulation, Direction, WishSpeed, Delta, ...)
        local Current = Active(Simulation)
        if Current and Current.NoSlow and Direction and Direction.Magnitude > 0 then WishSpeed = Speed(Simulation) end
        return Original(Simulation, Direction, WishSpeed, Delta, ...)
    end
    local function WalkMove(Original, Simulation, Direction, WishSpeed, Delta, ...)
        local Current = Active(Simulation)
        if not Current or not Current.NoSlow then return Original(Simulation, Direction, WishSpeed, Delta, ...) end
        local Weapon, Cropped = Simulation.CurrentWeapon, Simulation.CroppedMaxSpeed
        local Maximum = Speed(Simulation)
        Simulation.CroppedMaxSpeed = Maximum
        if Weapon and Weapon.Data then
            local Proxy = table.clone(Weapon)
            Proxy.Data = table.clone(Weapon.Data)
            local Config = Modules.SimulationConfig
            Proxy.Data.Speed = {[Weapon.Mode or 1] = Config and Config.ConstantsTemplate and Config.ConstantsTemplate.MaxSpeed or Simulation.Constants.MaxSpeed}
            Proxy.ZoomLevel, Simulation.CurrentWeapon = 0, Proxy
        end
        local Results = table.pack(pcall(Original, Simulation, Direction, Direction and Direction.Magnitude > 0 and Maximum or WishSpeed, Delta, ...))
        Simulation.CurrentWeapon, Simulation.CroppedMaxSpeed = Weapon, Cropped
        if not Results[1] then State.Errors["Movement.WalkMove"] = tostring(Results[2]); return nil end
        return table.unpack(Results, 2, Results.n)
    end
    local function Jump(Original, Simulation, Delta, ...)
        local Current = Active(Simulation)
        if not Current or not Current.NoSlow then return Original(Simulation, Delta, ...) end
        local Stamina = Simulation.Stamina or 0
        Simulation.Stamina = 0
        local Results = table.pack(pcall(Original, Simulation, Delta, ...))
        Simulation.Stamina = math.clamp(Stamina + (Simulation.Stamina or 0), 0, Simulation.Constants.StaminaMax)
        if not Results[1] then State.Errors["Movement.Jump"] = tostring(Results[2]); return nil end
        return table.unpack(Results, 2, Results.n)
    end
    local function Install(Name, Target, Callback)
        if type(Target) == "function" and Movement.Installed[Name] ~= Target then
            if Movement.Installed[Name] then Functions.Hooks.Remove("Movement." .. Name) end
            if Functions.Hooks.Add("Movement." .. Name, Target, Callback) then Movement.Installed[Name] = Target end
        end
    end
    function Movement.Update()
        local Simulation = Functions.Game.Simulation()
        Install("Command", Simulation and Simulation.ProcessCommand, CommandHook)
        local Native = Modules.Movement
        Install("AirMove", Native and Native.AirMove, AirMove)
        Install("WalkMove", Native and Native.WalkMove, WalkMove)
        Install("Jump", Native and Native.CheckJumpButton, Jump)
        if Movement.Simulation ~= Simulation then
            Movement.History, Movement.Active, Movement.Simulation = {}, nil, Simulation
            Hop:Reset()
            Duck:Reset()
            Peek:Reset()
            Plant(false)
        end
    end
    local Player = State.Services.Players and State.Services.Players.LocalPlayer
    if Player and Player.Idled then
        Functions.Utility.Connect(Player.Idled, function()
            if not Get("Anti AFK", false) then return end
            pcall(function()
                local Virtual = State.Services.VirtualUser or game:GetService("VirtualUser")
                Virtual:CaptureController()
                Virtual:Button2Down(Vector2.new())
                task.delay(0.1, function() Virtual:Button2Up(Vector2.new()) end)
            end)
        end)
    end
    function Movement.Destroy()
        Plant(false)
        Hop:Reset()
        Duck:Reset()
        Peek:Reset()
        Defuse:Destroy()
        Movement.History, Movement.Active = {}, nil
        for Name in Movement.Installed do Functions.Hooks.Remove("Movement." .. Name) end
        table.clear(Movement.Installed)
    end
State.Controllers.Movement = Movement
end

Functions.Utility.Register("Movement", State.Controllers.Movement, "Dot")

do
Functions.Cosmetics.Catalog = {
        {Skins = {{Rarity = "Stock", Image = 98261855993979, Name = "Stock"}, {Rarity = "Classified", Image = 114370090625339, Name = "Carbon"}, {Rarity = "Contraband", Image = 130936395418519, Name = "MyBeloved", DisplayName = "Matcha Flower"}}, Icon = 103328569146383, Name = "AK-47", Category = "Rifles"},
        {Skins = {{Rarity = "Stock", Image = 131939742713872, Name = "Stock"}}, Icon = 78883991167232, Name = "AUG A3", Category = "Rifles"},
        {Skins = {{Rarity = "Stock", Image = 98026569431994, Name = "Stock"}, {Rarity = "Classified", Image = 79900006254140, Name = "Storm Front"}, {Rarity = "Contraband", Image = 98918424191515, Name = "Rika"}, {Rarity = "Contraband", Image = 129164880840317, Name = "Alpha"}}, Icon = 128322472496551, Name = "AWP", Category = "Rifles"},
        {Skins = {{Rarity = "Exceeding Rare", Image = 99343477680043, Name = "Vanilla"}, {Rarity = "Exceeding Rare", Image = 122486883844698, Name = "Crimson"}, {Rarity = "Exceeding Rare", Image = 78548165060818, Name = "Marble Fade"}, {Rarity = "Exceeding Rare", Image = 104501919519185, Name = "Nebula"}, {Rarity = "Contraband", Image = 130508021310109, Name = "Gold"}, {Rarity = "Contraband", Image = 83326741414668, Name = "Gold Fairy"}, {Rarity = "Contraband", Image = 83326741414668, Name = "Gold Fairy 2"}}, Icon = 111124636691005, Name = "Balisong", Category = "Knives"},
        {Skins = {{Rarity = "Stock", Image = 123816287818365, Name = "Stock"}}, Icon = 133714450545312, Name = "Bat", Category = "Knives"},
        {Skins = {{Rarity = "Stock", Image = 137260508506546, Name = "Stock"}}, Icon = 136729952609515, Name = "CT Knife", Category = "Knives"},
        {Skins = {{Rarity = "Stock", Image = 96170647875370, Name = "Stock"}}, Icon = 119568499682206, Name = "CZ75-Auto", Category = "Pistols"},
        {Skins = {{Rarity = "Exceeding Rare", Image = 115907595347160, Name = "Vanilla"}, {Rarity = "Exceeding Rare", Image = 109003151037654, Name = "Crimson"}, {Rarity = "Exceeding Rare", Image = 95481123262597, Name = "Marble Fade"}, {Rarity = "Exceeding Rare", Image = 109733918510883, Name = "Nebula"}}, Icon = 79270649122459, Name = "Cleaver", Category = "Knives"},
        {Skins = {{Rarity = "Stock", Image = 139309493457448, Name = "Stock"}, {Rarity = "Classified", Image = 124613012877414, Name = "Hardening"}, {Rarity = "Mil-Spec", Image = 129846727093947, Name = "Vacation"}}, Icon = 130484320728025, Name = "Desert Eagle", Category = "Pistols"},
        {Skins = {{Rarity = "Stock", Image = 129765777073864, Name = "Stock"}, {Rarity = "Mil-Spec", Image = 118578700431407, Name = "Baron"}}, Icon = 130510965833386, Name = "Dual Berettas", Category = "Pistols"},
        {Skins = {{Rarity = "Stock", Image = 131321927127005, Name = "Stock"}}, Icon = 124612650211720, Name = "Famas F1", Category = "Rifles"},
        {Skins = {{Rarity = "Stock", Image = 72953407267919, Name = "Stock"}}, Icon = 103047103081406, Name = "Five-seveN", Category = "Pistols"},
        {Skins = {{Rarity = "Stock", Image = 140361404805327, Name = "Stock"}}, Icon = 103622033073452, Name = "G3SG1", Category = "Rifles"},
        {Skins = {{Rarity = "Stock", Image = 108802477816180, Name = "Stock"}, {Rarity = "Mil-Spec", Image = 131608757545740, Name = "Ryujin"}}, Icon = 84027416531227, Name = "Galil ACE", Category = "Rifles"},
        {Skins = {{Rarity = "Stock", Image = 134734709619937, Name = "Stock"}, {Rarity = "Covert", Image = 99556070695593, Name = "Chumba"}}, Icon = 132981893698378, Name = "Glock-18", Category = "Pistols"},
        {Skins = {{Rarity = "Stock", Image = 125925871929971, Name = "Stock"}}, Icon = 131655986965000, Name = "Jagdkommando", Category = "Knives"},
        {Skins = {{Rarity = "Exceeding Rare", Image = 135753609307530, Name = "Vanilla"}, {Rarity = "Exceeding Rare", Image = 135012966616165, Name = "Crimson"}, {Rarity = "Exceeding Rare", Image = 135844701548702, Name = "Marble Fade"}, {Rarity = "Exceeding Rare", Image = 118235783293734, Name = "Nebula"}, {Rarity = "Exceeding Rare", Image = 92143664002451, Name = "Glass Fairy"}}, Icon = 120751722413293, Name = "Karambit", Category = "Knives"},
        {Skins = {{Rarity = "Stock", Image = 134232332444449, Name = "Stock"}}, Icon = 90685362564430, Name = "Kukri", Category = "Knives"},
        {Skins = {{Rarity = "Stock", Image = 124670489157037, Name = "Stock"}, {Rarity = "Covert", Image = 137982684092346, Name = "Adurite"}}, Icon = 101776623713550, Name = "M4A1-S", Category = "Rifles"},
        {Skins = {{Rarity = "Stock", Image = 136651922029193, Name = "Stock"}, {Rarity = "Contraband", Image = 116213615933472, Name = "Lycoris Bloom"}}, Icon = 100848375948816, Name = "M4A4", Category = "Rifles"},
        {Skins = {{Rarity = "Stock", Image = 96880001223505, Name = "Stock"}, {Rarity = "Restricted", Image = 101353877945689, Name = "Malachite"}}, Icon = 72879107579572, Name = "MAC-10", Category = "SMG"},
        {Skins = {{Rarity = "Stock", Image = 76216941660818, Name = "Stock"}}, Icon = 92644632368344, Name = "MAG-7", Category = "Heavy"},
        {Skins = {{Rarity = "Stock", Image = 97391327597327, Name = "Stock"}}, Icon = 126901112931486, Name = "MP5-SD", Category = "SMG"},
        {Skins = {{Rarity = "Stock", Image = 116429612777872, Name = "Stock"}}, Icon = 132243524456830, Name = "MP7", Category = "SMG"},
        {Skins = {{Rarity = "Stock", Image = 85642980470702, Name = "Stock"}}, Icon = 104781707426369, Name = "MP9", Category = "SMG"},
        {Skins = {{Rarity = "Stock", Image = 136630669797309, Name = "Stock"}}, Icon = 102021838083248, Name = "P2000", Category = "Pistols"},
        {Skins = {{Rarity = "Stock", Image = 100157473324662, Name = "Stock"}}, Icon = 102021838083248, Name = "P250", Category = "Pistols"},
        {Skins = {{Rarity = "Stock", Image = 77484254144545, Name = "Stock"}}, Icon = 112640762739116, Name = "P90", Category = "SMG"},
        {Skins = {{Rarity = "Stock", Image = 71999163856885, Name = "Stock"}}, Icon = 83510034983849, Name = "PPSH-41", Category = "SMG"},
        {Skins = {{Rarity = "Stock", Image = 111302925273155, Name = "Stock"}}, Icon = 79170135549001, Name = "Remington 870", Category = "Heavy"},
        {Skins = {{Rarity = "Stock", Image = 94383047914694, Name = "Stock"}, {Rarity = "Mil-Spec", Image = 101438591682797, Name = "Deep"}}, Icon = 91661422219754, Name = "SCAR-20", Category = "Rifles"},
        {Skins = {{Rarity = "Stock", Image = 108314647738536, Name = "Stock"}}, Icon = 100688760178782, Name = "SG 553", Category = "Rifles"},
        {Skins = {{Rarity = "Stock", Image = 91827844664697, Name = "Stock"}}, Icon = 96142540919110, Name = "SSG-08", Category = "Rifles"},
        {Skins = {{Rarity = "Stock", Image = 124492853640542, Name = "Stock"}, {Rarity = "Restricted", Image = 101258536366406, Name = "Kinetic"}}, Icon = 104613794906232, Name = "Sawed-Off", Category = "Heavy"},
        {Skins = {{Rarity = "Exceeding Rare", Image = 80535389773865, Name = "Vanilla"}, {Rarity = "Exceeding Rare", Image = 107230397991567, Name = "Crimson"}, {Rarity = "Exceeding Rare", Image = 119624783918075, Name = "Marble Fade"}, {Rarity = "Exceeding Rare", Image = 86916533102115, Name = "Nebula"}, {Rarity = "Exceeding Rare", Image = 135030271554676, Name = "Glass Fairy"}}, Icon = 116152000898575, Name = "Shadow Daggers", Category = "Knives"},
        {Skins = {{Rarity = "Stock", Image = 91832533233367, Name = "Stock"}}, Icon = 91375814135483, Name = "T Knife", Category = "Knives"},
        {Skins = {{Rarity = "Stock", Image = 117147948679102, Name = "Stock"}, {Rarity = "Restricted", Image = 125800506984004, Name = "Element29"}}, Icon = 82558165508334, Name = "TEC-9", Category = "Pistols"},
        {Skins = {{Rarity = "Stock", Image = 100067262134651, Name = "Stock"}}, Icon = 97747164267995, Name = "UMP-45", Category = "SMG"},
        {Skins = {{Rarity = "Stock", Image = 90720149194240, Name = "Stock"}, {Rarity = "Contraband", Image = 99315913324154, Name = "Sakuliro"}}, Icon = 86980467045933, Name = "USP-S", Category = "Pistols"},
        {Skins = {{Rarity = "Stock", Image = 76265550024108, Name = "Stock"}, {Rarity = "Mil-Spec", Image = 135321180358044, Name = "Purple Vector"}}, Icon = 78511979539734, Name = "XM1014", Category = "Heavy"},
    }
end

do
    local Data = {
        ["Primordial"] = "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TVUVAABQ4AAAEGCDpsTiAIWGrAQAQgIAHIpiWZrmeZ4niqapmiRJ0zxPFEXRNE1TVUmSpnmeKIqiaZqmqrIsTfM8URRF01RVVYWmeZ4oiqJpqqrqwvM8TxRF0TRV1XXheZ4niqJomqrquhBFUTRN01RNVXVdIIqmaZqqqqquC0RPFE1TVV3XdYHniaJpqqqrui4QTdNUVVV1XVkGmKZpqqrryjJAVVXVdV1XlgGqqqqu67qyDFBV13VdWZZlAK7rurIsywIAAA4cAAACjKCTjCqLsNGECw9AoSErAoAoAADAGKYUU8owJiGkEBrGJIQUQiYlpdJSqiCkUlIpFYRUSiolo5RSailVEFIpqZQKQiollVIAANiBAwDYgYVQaMhKACAPAIAwRinGGHNOIqQUY845JxFSijHnnJNKMeacc85JKRlzzDnnpJTOOeecc1JK5pxzzjkppXPOOeeclFJK55xzTkopJYTOQSellNI555wTAABU4AAAEGCjyOYEI0GFhqwEAFIBAAyOY1ma5nmiaJqWJGma53meKJqmJkma5nmeJ4qqyfM8TxRF0TRVled5niiKommqKtcVRdM0TVVVXbIsiqZpmqrqujBN01RV13VdmKZpqqrrui5sW1VV1XVlGbatqqrqurIMXNd1ZdmWgSy7ruzasgAA8AQHAKACG1ZHOCkaCyw0ZCUAkAEAQBiDkEIIIWUQQgohhJRSCAkAABhwAAAIMKEMFBqyEgBIBQAAjLHWWmuttdZAZ6211lprrYDMWmuttdZaa6211lprrbXWUmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaay2llFJKKaWUUkoppZRSSimllFJKBQD6VTgA+D/YsDrCSdFYYKEhKwGAcAAAwBilGHMMQimlVAgx5px0VFqLsUKIMeckpNRabMVzzkEoIZXWYiyecw5CKSnFVmNRKYRSUkottliLSqGjklJKrdVYjDGppNZai63GYoxJKbTUWosxFiNsTam12GqrsRhjayottBhjjMUIX2RsLabaag3GCCNbLC3VWmswxhjdW4ultpqLMT742lIsMdZcAAB3gwMARIKNM6wknRWOBhcashIACAkAIBBSijHGGHPOOeekUow55pxzDkIIoVSKMcaccw5CCCGUjDHmnHMQQgghhFJK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",
        ["Neverlose"] = "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AgBRAAAGxbEsTRNFkqRpmieKJEnTPE8UaZrneZ5pwvM8zzQhiqJomhBFUTRNmKZpqiowTVUVAABQ4AAAEGCDpsTiAIWGrAQAQgIAHIpiWZrmeZ4niqapmiRJ0zxPFEXRNE1TVUmSpnmeKIqiaZqmqrIsTfM8URRF01RVVYWmeZ4oiqJpqqrqwvM8TxRF0TRV1XXheZ4niqJomqrquhBFUTRN01RNVXVdIIqmaZqqqqquC0RPFE1TVV3XdYHniaJpqqqrui4QTdNUVVV1XVkGmKZpqqrryjJAVVXVdV1XlgGqqqqu67qyDFBV13VdWZZlAK7rurIsywIAAA4cAAACjKCTjCqLsNGECw9AoSErAoAoAADAGKYUU8owJiGkEBrGJIQUQiYlpdJSqiCkUlIpFYRUSiolo5RSailVEFIpqZQKQiollVIAANiBAwDYgYVQaMhKACAPAIAwRinGGHNOIqQUY845JxFSijHnnJNKMeacc85JKRlzzDnnpJTOOeecc1JK5pxzzjkppXPOOeeclFJK55xzTkopJYTOQSellNI555wTAABU4AAAEGCjyOYEI0GFhqwEAFIBAAyOY1ma5nmiaJqWJGma53meKJqmJkma5nmeJ4qqyfM8TxRF0TRVled5niiKommqKtcVRdM0TVVVXbIsiqZpmqrqujBN01RV13VdmKZpqqrrui5sW1VV1XVlGbatqqrqurIMXNd1ZdmWgSy7ruzasgAA8AQHAKACG1ZHOCkaCyw0ZCUAkAEAQBiDkEIIIWUQQgohhJRSCAkAABhwAAAIMKEMFBqyEgBIBQAAjLHWWmuttdZAZ6211lprrYDMWmuttdZaa6211lprrbXWUmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaay2llFJKKaWUUkoppZRSSimllFJKBQD6VTgA+D/YsDrCSdFYYKEhKwGAcAAAwBilGHMMQimlVAgx5px0VFqLsUKIMeckpNRabMVzzkEoIZXWYiyecw5CKSnFVmNRKYRSUkottliLSqGjklJKrdVYjDGppNZai63GYoxJKbTUWosxFiNsTam12GqrsRhjayottBhjjMUIX2RsLabaag3GCCNbLC3VWmswxhjdW4ultpqLMT742lIsMdZcAAB3gwMARIKNM6wknRWOBhca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",
        ["Sparkle"] = "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TVUVAABQ4AAAEGCDpsTiAIWGrAQAQgIAHIpiWZrmeZ4niqapmiRJ0zxPFEXRNE1TVUmSpnmeKIqiaZqmqrIsTfM8URRF01RVVYWmeZ4oiqJpqqrqwvM8TxRF0TRV1XXheZ4niqJomqrquhBFUTRN01RNVXVdIIqmaZqqqqquC0RPFE1TVV3XdYHniaJpqqqrui4QTdNUVVV1XVkGmKZpqqrryjJAVVXVdV1XlgGqqqqu67qyDFBV13VdWZZlAK7rurIsywIAAA4cAAACjKCTjCqLsNGECw9AoSErAoAoAADAGKYUU8owJiGkEBrGJIQUQiYlpdJSqiCkUlIpFYRUSiolo5RSailVEFIpqZQKQiollVIAANiBAwDYgYVQaMhKACAPAIAwRinGGHNOIqQUY845JxFSijHnnJNKMeacc85JKRlzzDnnpJTOOeecc1JK5pxzzjkppXPOOeeclFJK55xzTkopJYTOQSellNI555wTAABU4AAAEGCjyOYEI0GFhqwEAFIBAAyOY1ma5nmiaJqWJGma53meKJqmJkma5nmeJ4qqyfM8TxRF0TRVled5niiKommqKtcVRdM0TVVVXbIsiqZpmqrqujBN01RV13VdmKZpqqrrui5sW1VV1XVlGbatqqrqurIMXNd1ZdmWgSy7ruzasgAA8AQHAKACG1ZHOCkaCyw0ZCUAkAEAQBiDkEIIIWUQQgohhJRSCAkAABhwAAAIMKEMFBqyEgBIBQAAjLHWWmuttdZAZ6211lprrYDMWmuttdZaa6211lprrbXWUmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaay2llFJKKaWUUkoppZRSSimllFJKBQD6VTgA+D/YsDrCSdFYYKEhKwGAcAAAwBilGHMMQimlVAgx5px0VFqLsUKIMeckpNRabMVzzkEoIZXWYiyecw5CKSnFVmNRKYRSUkottliLSqGjklJKrdVYjDGppNZai63GYoxJKbTUWosxFiNsTam12GqrsRhjayottBhjjMUIX2RsLabaag3GCCNbLC3VWmswxhjdW4ultpqLMT742lIsMdZcAAB3gwMARIKNM6wknRWOBhcashIACAkAIBBSijHGGHPOOeekUow55pxzDkIIoVSKMcaccw5CCCGUjDHmnHMQQgghhFJKxpxzEEIIIYSQUuqccxBCCCGEEEopnXMOQgghhBBCKaWDEEIIIYQQSiilpBRCCCGEEEIIqaSUQgghhFJCKCGVlFIIIYQQQiklpJRSCiGEUkIIoYSUUkophRBCCKWUklJKKaUSSgklhBJSKSmlFEoIIZRSSkoppVRKCaGEEkopJaWUUkohhBBKKQUAABw4AAAEGEEnGVUWYaMJFx6AQkNWAgBkAACQopRSKS1FgiKlGKQYS0YVc1BaiqhyDFLNqVLOIOYklogxhJSTVDLmFEIMQuocdUwpBi2VGELGGKTYckuhcw4AAABBAICAkAAAAwQFMwDA4ADhcxB0AgRHGwCAIERmiETDQnB4UAkQEVMBQGKCQi4AVFhcpF1cQJcBLujirgMhBCEIQSwOoIAEHJxwwxNveMINTtApKnUgAAAAAAANAPAAAJBcABER0cxhZGhscHR4fICEiIyQCAAAAAAAGQB8AAAkJUBERDRzGBkaGxwdHh8gISIjJAEAgAACAAAAACCAAAQEBAAAAAAAAgAAAAQET2dnUwAAwCQAAAAAAABVOQAAAgAAAFeXdQYwFC1ERkE4OTxETP8z/05RTVJEQkNNTP9LQkFDQkBCQE9NSkFDPURCRD1RT0//Tv9bfMhFqGU/5CLUsgAABAIAAAAAsBV0yGnPkb0OOe7tvUm5BAgAzuXt03IZVVVtaBqYMjK0K1e2kiQQ9zLAN7Q+BQWMQCKBMxc+6gik9MHYxW2X1A0JAcht+bceXttRr94XXzS0IcuCmTMyalFXQ5Jxw0ckhiudADSdTqdpNOjeblulyof3GoRA/oVNXEOg0MEm1m169OKgBQGwf7lIb9iy2917u4+3sxfDHAIwTKjAYZiKJDYaNeyXFpAeOqxcuYoAAL2w7HSolQYl6QCMPlUM4hBKn5QLmtnpM9NfSAA02RY02WBKC1eULLpnduEYy+hk5bLSNgUvq+ttJQEAKAzC+GFxAoCqtLjSANJeAZQ+SDkcxJ4+KQQ2EbftQ3ZkLgBmS507EtJ2sZq575sq5lCLskwRBnGC4cMBkKbSdnsAHpXuALIDpEAYM6wdLiVQ1oFNxO0PUgZNBkCeN3Yiaz1cxrLKEOJu4CgZWa4oTacFx1sBqnsYYQeQqwQ6AJQLlEBVzeJyPIEw1bCUYbK1gmYQygA83Hh2VNWtvtr5/tt3pnMdhlxTpreaVAnaqnQtqKzoDdntagqWAE4V3EYuic3yORtRic3y9941ERJRJkGEAEi7SIm1floxPr1dFl1JiKQoWc3SrKu3Ks3s+1EAVLdnmuF4MCzREJDSBsdFIgbcVGVFJakJ4KYqKypJyyDu+WqkzEVgBQlQ0EqCaQHQUAEA9vSOZKbUk80cRwHDAZsRJdUFVFBjAObYi9O7YuZEUAY6w/ZEqUVfnZcK+uj1DfFfpp/xOg7JeI5aW5HdWJEAcJO9pOu6Geya9iVL9Z9uem+KeW9WH+tW7doXPF4W2HEyR8kgI1vldAYAGK90AACkOkHoA4JWyQAFMAMJAbTMS2dsvd2Hd9x75vKDr2sFH25nwMU6tlSCAMhVTwComGIOai2xJ4iC6J05XkvYlAEQBUANMQ1VpS6GjU1hcU9jVKvnZH3a8fhb/3o8bn07rJ/fUrJUzo6+OpfMGuUFDwk0rJye+fpesQBgIDsziNSH4VDHap5jgzGa96x2mn7/fTCnczAA4CrWOggTY7xvy/5Y89pUtgp6bUz/vp5kMEmjOsVEGN1ytKJSkOrLyv7n7/7xG24hERIJZAwgrBqT/GCoi/X5Xy0MIRKtOiBjWFhC+wEWaf4mn3HArgCgh9IDNtnVs5B4PSOKF0CFwTeyKwuTeJGI8dL9HlQXyPq+RHuX7za/nsy6JXoe3jm8P27d7Gd29jh9lMwgWXdeTSwAlCsdAADCVSckoVWHLwAVNtgeBETq6k5og93+/V71/7tr/3jkbW3DM65727BBVIA9uXYAIEsjf09zcwKgKiAoBqaoxUEcbA29VltFmumNmVl587tTPe89vLO93v4wU2r18Wjvc//l8cfstxN/oDBQjkv9+h0O4zKywDFGqtbprealvRYACWRpunKG9md39SIoaIqEnj4XwCRABzxJFOmZAwDnc845h6NY5yUBfE+mTSUP1bAAoAAAAJCVdkrd3r2yo659eZ1EgkSyAagdW3v7e2aUdkpFvjYJhecA/GAENw4xDRAVJOzajY9/CIWh8FZIj1YQKqsF3BRU07QNox09nLxEDPsISn+onTajjSsD5FIY2sjnnQryBxj0CxBeDfI3EtkSAvA8YArN0actCZDb4PXhy/Z2uJ1clO+v3+vhUgZ5nnpy2X84bFviCGnT/ippU3hx2F7LFo8uTxDEDygE7FZFthM/BVvmW3b4vJ3tHxFsyP6BomtRC8D3DeeP5eHuQSaYurW3kpGPruX5MBaYeDwMDH6V6FYnCJ0WFyM6+0taTdE2TaW6FK0UZwD0XmizpKXA/WJoRvnL7z8AwQa3b30wTrBAngFqAaAJikKT46JC2KJT6ys+guezGvQvqfHp15d66767eabz15MCG1AkOA4r/xUigSsd2gqKCysA7FZatiRtgum54F1SsIEc97xeV2Iv4sgV1ACnBZIAGLOvfZmsChqWYwoSqQCi1lFNAlOb5fNWv93IVGV6np8CTQGpWgLsUq6NRRPyHcs9S1InlI7Z451Ff07ETAVw+kAgAC53z+/rEthNnImgqMxbkEE1v3e5wMaZ9L7QYd+8EEi2qxpWAADUUshyZ/h5xwrLLf8+AOEOcAIcAD45BlCExR3r/OC/g/v3fiaHZ9S5nDqZbwKI1vLoSic3+CH2IziMzvkEQHvVFNUF5FRIbdnhjx5LbS5JTSjc3xy+u7Zz9DvAGZMB8C9lTCwFTAzpfxi+pz/yeBBQUukrKqbsaRUY/H8xnP87krbttrJcTV1dbzWrTTTNvAb8YL5ZkokJ/A+GIcsl//8AxCRrIaIjzkIZgHAXwWQg3QpgNUQvNLByOq03hrcZc116a7rMIU4U8EeBS6VtOiGzPqWaNqqpHm26jacEUhkuW6T/NeCHuCprwGaeQuQ3VVL/LdCJl9DTBCoPp3Dl084ffz/KKL+7dj3xwtOxibVPlt14BUgZGdUy4rwbwFjZGPff2wsAhQ0mcLSKWMAQmk4ogikoQOmuklYaP7n5xhC3PGf+tOTbtb6047R//BYrVqxEY2xwrKxce0yo3bTpuBRReUXfnX+Y8tSoICqAICoNzppgk5qKojFjQBpdsThaGjg727lsxWEQGae6O6z/enk0ul59l5/ZdOWGMh/XQPzmxV/dwECOenY/Nd/ifpty1ozAPPvHw/5yW3zzse9/AhAAQOnq8fbz9jrVcKNSUEsAUsrlUi63RpZzKAoAAACggYeRAMCESNVHepeLyzUNBADuqwywrCgiAgAsH4DFIgCfEADNsr86lIUBcAAgkIbGKpChUsQG9vSiApZlWX7kEwZHcz1tUwAA9F7iLEndcP7WSpwjvx2/fGompR37TklsH4EAkNDNJOXGIwvkRvn8ya+I64N7AwZRTwWkuwrAoCGVpEYiOtEA/ikA7Fo+UZJ2Q3pbJcrO8NtZO/sQPfcmxjMFmAuAEQD517Jb0uNG6ilJ9/szmZZ6+kwncIgToMqIoSLN9fj55AXS/AvcWPAv6ZnQ2aH8sySC3ZrzLTFeCsQS5wVBAKy8j/74sNA1yiJNBPmuRDA0SXg655xxW/SeApZNfoGsLLT9tFAErDcA5FZauqSlcLI7+W25wz8fgACxxPkJAqDRJRCQb2c0xb07DMtNHuw/nse67b9OO8LviRy0XD6dUM+BvFDYWPEEzLsB3FiJ40CC2530bBnL32u6doVjIc6nAAwBaIqv/NdmL5sQGPow4U/+mfnkMej69DV/XLicHgP8DNBNiOPv3sCtAtxYiePAhGQnirkLn18AYvwFYukDLAAmJ8Gc+90S/pg382Nh7j4RvY+nabKdM0D8T4KfAUi7n9AA+LPPAaZXI1RvUOxcbCiZCS43Sj1LT3w4vnrX26U3nfgPbBEC0NN9emq2O/j2bE9Ogich1pxp7PKhUgABNGIERNOzRbuM1Ha/EQD0YPZ1rHVCfUsVyc7wvw9A/EDjUBWbC6IANOlQOUgoS/sPiogsqtKS5yvHi+N/JtfPOZ979/K/x/ueY1xM9QUkUHFXYKR3RV1PQ241j00A7Foxq1Tir6AJMWN1uG69EuJvo+oGDgDp9/zjjlqnLaM6BSQPPF7VnNU91teWoy6WragYBgZcdJ7b9ur6R2nqOdWNk8/Ttk20VrXXNQDkWImrtDz+66n8sqRgA70zuzk2mRn7RRcfEgCsWy+aK9xkV7KcLU9LrY7eKvZEm2uOjw0CgDlAMjtV/WobuFL1pGgoItn0pm1aANxSmIiS9BvEb4UuS9IzpMe/zX47KIL4C2JbGQCNl1n2W19Wwe9oPiTZdSrd2Xh1vcdLARWurgT4NUD5G+lbfWQA3FS+XTITWjtVSJSkbhD3Q9fHvZssiT8LELOAYLgxQADCeMz+2+y9NWXagQ5GUwAAY0rYvTaz/7bn4trIoH3DgX9+JeRYGFpJ6oROUAXJklSG0v1A++LaQkssSAGwt587I1eM28x6TOPJHA8//hdwlq1ouoXhqcDhv0AbnaqT2lXkVr5RUjChfVNVmEoimHPmcbiJHB2MP4hZ0kcC4Mfb3HGmstgudH6C4c72gDu10nO5NuF7H8L/R1iAnv9VDvujkCLmLNxWKUzJTLA7lZYoSZuQfgBiXIilFICbAMbrZ1De8t2+Dh8Kbrj/8/ljHufLmsJxsll2ihslKP/v/Z+Qi3c7zpz5BNxUiaYkxYTohlJbSyoTbt3f6m9z9RXhWBZEAXDGruc77lee1auu9ALxV0//DPli0VIRPQaAnhDaIPkpa/deIvGGuAQA5FIxqqSyQd9UiP1AQnr8/slv+hh2OBYKBSDiRYZw/+oUmlTTweR98JtfQzs6px3XaQO3OtEnjJwDv4ZpAMRQFZGSSqGUUxWpktQN7P7v88TNWn1OsL2dY4slNg1IApDc/AhvyzkQrogwM0Sl/+P7yNvia8235f/fzmciX/jGYML7FaHLy+BFzKlLb6pbANROtVvKHx5qqexX+cOnD7DEUZsBeGpHC36HnviPcdYnl5G+tg3iIoR0P/zdvarx/pnklQ/LDMDrh4nQ/lerqeR6dWowUKyHMqxkleocDwDU1lmG0jJ8vamqMqUSv3yA/jJkC8Cr3YKWfRofyaZTtas1BvV7xRHWXmQGCRd9t61jGyY/Py4ArqfKcxHN9VQb8TJp2mQplbyssVp2pSUAOkh1DXwuLpLyu99/z9YVID//VUUCEm4vivLxL4zW9ok2fXk8/M/ffnmI5TIzYuXVref+4t93NE30jJ29sSyHojawsvjjfgAAFICTeELRVI5FgKN9yYqDZB9XOgE7z8zoef12hs+mO7F8iwIAZgp9g4qiAJLw5sM7l+Nb4WBaKnmZvIx8+9zff73t10XnuOwvR6aGxaT4ypPLd3oASA99bvm2/5ap7NqmfdgryR48k7WN2jXa+fEpZ1DtXycFiErfOFkmSqG10hsAWVwFgzYFwPlAr36yKFtxOoEEALqrq75zuGHrdBVB0QGXX+hTyQYA4BqZlFvZFgnw97Gaj3RTEaFc9CoAoLpunX+6uNvqsDcq1biqJCpZWIJDRwyWzW8uqrx2UwZDgwaVYIP19OctW7YQpFrev1S74CDjG2jgBpqE4VF5StmtTFbSrg0AnhfFQpxmk4zfvyDqKbEbcSpzqjxNvhWejx8QBbAb9q4e8PAjaOJbzUNzKZoeOe4akNnYrzUA3frx2HMeA4q+K8FK+eni4SMAoBIjnSCONyCnckUAfXts2vj+mfuZvWrdgP+f380fY3rG2WPCRHzMzbWdpfEEb576PwugNOdEGHx/ankoqeRAySEEXo+MvmLM7lQBRXVHO+MRFACArdyhB7PUZj5qT/7jwCBb//XY/uVSWfQS8BnzftHvtDMV7xEwUEzWefP+n8mmAP6pnLQQzcB+ZuyDPa/989f9D87vsbWKySyPr1Q4u3iH1ukdAPb8dL7Oz/3X/0YyxpiYABiXt4t7xlAoAAADGCJA/pJs5Lv+rX6CelXeCsStP0IABpBDrK3rEgmRAKrSlFR8TZUjFH1cpq2tHXkwgLH15T4PlWYBANs2Nc7Lw6MQqwDgNcTB3BzczHlL+WJtAE9nZ1MAAMBYAAAAAAAAVTkAAAMAAAByp3gtGv89/z//R/9E/1H/Uf9D/zb/RP9M/zX/QP9FnhfVAm75hdYG62+oAPrVLQnB1uUoDC8YqTvz92G//X6IAMlbvSjMOYKes/4KAP349xHx/IBypRQTX9oAgIyRTig0VUgEyCI1va5QvfOkt3uynd5fksvrr+Wvq/toanBbdhZEY3vtzs6Odj4XQOWP/WsMrSxNr6TnGkrIHQSz7J1cgwIAq9v0acW5JJ2TUy3fqt/GfHze+1Ny8tiO9FcBDUA+jL+qfuQ00C0LX8D20zk4yQDt7Oav8mIi59A86fqFeH0Wv1anOcEEQALFG53t9as+DUzSAAby9s8lw33WAlgWjz5dfeNsW+jQwWuQJWRZ+COsvyULGwAQwtZHGHAIloM3+5++YsM6R6nHUj8rlapPcIavYUn6y5djFb87KEsOYHaDBjaywz98dYFlAAN1mg4FCIAAWwBDELadAV4XpZhu+dVk/6b+hgRHHhN7moutsn8dgbJ9wL7HpabI1JflLgGlj1wH3jKeBsRWdlU5O+wBAOBw0gmi6VxApyIAYwTwg0f1k0XO+XDlSqeWl4z4wnU+su+/hb+lcD3fFDsxlk52NfI70I4vd8XjwfcmE8vhp3NDWaeWRuuOVrPXAvjRCdkkUUUBUFRn4xNdTnp4NET4Vf2v860y9/nL4k8k6dvqq6amOn6uvQ7YzrG91Vieeq46B9u4X6DKSVHql3GOMYuj9/WVU4/2PuOvW42HgTPwL/xqALqzGAAAMsWleNlZAD0wM3vXmPW1vZ237ThQAABwk27/+dsD2QIk3R5gGPyebcdcA1en1t//d8sWyMED7qmkO2qwLsSXhxQFJtnlhhsABwbAUKt9wnUKUQgA5KaQ5cOQDQBAPRcBAL431YJu4+VhPl4xCqo7x90US5phvJwP/e9ZkH2Fk8fxO+CK7gqa+VsAetSXVyzAfDXr3bfxnqcARSVA4QYAAHDY4AAkmiCcKqJTEQRjAEKb0DRn6XenZTvOvVXv/SzpSB632/63+MfB3tznXyfdMnurJeDHtPiTM2ujO/X753anvH0yEPcKkoGeJk1qXhSAZjPeXp0NAIoiIooOXTwdqKKiulK7e33jh11UuPe7QfVzr4+O1r3XXPLj67ib9+NeX14ffZ+lgekNvvB+Mk+cOTD8fapBhHqo3326cT/jzO6+fJ5nA8Pc+TmQTC5utypSDQAAAAAQweLOdDAADAwM8PDtZ3cYAKDM4Z4u8QtuIaQEAPgUfSDYDV5jYwFIgodPSyCXJHpLqcAB4GYQdwsAzgSnf8UWYAB0d9eb7TvytsgeAEDlt/cC/ubEAO/ZhbFfL0i6OgS+cVGC0mT5Y/6m+52KfcbxuGvg96bJk5n7JQCNh+v/c/M4d38EMKHZ7y4AY6xU6+XREwBAiQMS4QTxnoJWEUQiEOLdaAnbn54L9E/G2t59RMN+vuHigYHTkeTlmgBap/Nsfz2tes2H1zPVqLQo/PbPygKoqDzCGgR9CgCAooj2RHX2vKECKqJGfyNBh1XhZeOiTONDj643+3v1/sNl/SC//ctivxRq51osypqkmes111RlA1Cd3xzTxTJumjNAUbT3BcW+3/uiSGhyhwEz7lN13tdmN8XM87LfL1qPzzsAADyOMc/f977uNQYAAO3Wz7d669AyAGABLCPZRv/qrQoSUhUAMPCiIAS4LeTgc/sCgAJQAI4G6IpNYAvkyqJ5zz/rcxVgnl2qB+gITSEA8BUBkHqO5gD+5sQQJxsn59eXMdtniDcoZDDjONI+Xb8zsg+E+fDmt9ceANymhZ277z3nBxSdBJ1Wz+waACUOFGpwJxRNDSUBmHPfiZByLT8PPVTjg++Vh2Merg+02jEPdak4XDrndqenBSBcfH56oGKKqKj+bU7/lvmxTgAAAAVUeLiXuKhe5hP5h+2ylTat10d/3jz89Pbin377cVuML7d3lWVX5VRPrhyoQgMArjp8tX1902YaUHrJZcwx5/jjvLvFj/9P8wx4/nyzX1/Rw6n2hmzmzfnH8CXjRQYAAOYc0/497damQV4czv/3zrVTPqXw47lqHwBaptD+fO8BAEwAwAf8+QACQPA6/NT+HSgQCF5kg3iRAMiyPrGRBQwdQMgGjb25cvfyz3sgAfmW9om3zNxGP+lm7P/19rkAgk4cfuelE6iC9QIgATgaNBc0A/kKqgBf/QMeFxVUJLu6zN/usFIheIW7JXYyw0UxP3S/slJdo9Oj8wB383N/f3pvnBvsCU+bOz4GFHUDXufzu08rNgCotAQxQRDoVARgBECe3CUkvHOXI7xw0hGGp094upj2ujR9mPy6owB4Xq183VubG0o78DhXP8mViAeQnv11w+kAgEhf5tpb0KOoAIAqqioiXzdupa98cz5eetG3yuwyTefJ2xdf1wfmnT/qfD5Np/H3bZ5Pc89Xt/HvsL8vmUBD82k8jf/ODXadc25DzjnM8GNKeQ7G6/jy9fvj7bbPv9E8cPV7fPr870KW9ikZAACATO2t9EuvGJlSBwAAAFr78LV7AWgALPYgod6bCsBGAgCM+M7/2rZKkKIK9VZIrYYACPkoOLb/z22ssAFbjgwGeGyACwBAIJMFwg1tlA38WT767SeX2sgWsDmKpDLAfLMVAABAtwBe18SS3rebYq/WT6FL9o3OdUsZQS4u03P+cv1GQR2C+0P/PhbG8x598DvcGXlyWZZ14LvywQ2OP2CC/c5YAHuvVHz1/eqVBADgcHg4QbwfAeRUgQDwhjZk4bRWptfB/3+6t327PrnOH6/ZP636BQgaLZ37j8vZBpBLF09br0D2uU33k4w2eA2lI5SetqmlAIiY7badgzSLAgAqujUTRv6vjchA9KVyeMtHPvdMC9Mf3f/qnyV9M9q+fZN1owXIt7JrT3Pd4cnqBoBkeGbKz94nF6BT0PD40+9AnTqH3mhgnm9p9br0Pru3NvV21/RJ8q2RL86pQSEDAAD0yH/+J/LDzAAAGADgb7Tf1RcjyQDIrNpiAwLEwytbv/rMAkVoA2+2LQPwAgAAQO8hcAs0AIIs3/1nYwsAUJhrIOHeAgoADvpx3saEGGa8Nnl+6j8JUG2sISGGPb8S0m/3EJSrWgo3d2zePcr47+FI5r64gTcAfawXfRzKlVq/Tl4sAQCECyYI0xSJJshdAEUwAeDbWuPrzr76+kwPKqM5Gh5ejjTcSdXd/0xK9oQBh7ucAQCQnwFgfvecaq5WfqKiAAAApv6fX48um2qqqjhPrX2JiAJgvn32eol/8NO55PyW8+2//v2xcf/0uvcf/3j4naykl4y4PtNfk/QAQP0/xUXxV/dTPRs2Y3A3zXbGm9YBen/x2h/cSPV5uw3n8uG+h/sNgM/3z1+c79uXLyx1xq11WukdlAf3HytkAHjx1ZN//oNg/fCmswUAGqjteOJRMAGAOVA7lkMX50G6GxoDcIcv0Ws7RZIB2aBAgw0wG+QJOgACBAAZAIDwLzUAvsYEjGXcLOOh/40iO3DTm5MxmvFiaa8fiNL8w+PyF2Esz+qMsawrgdcAxN43787n3tODOBewUv365Is5AIBx4AhBrBSw3u6f+gLRqh8QAQEgO7x4sHK08baju2mRojUz4TstPbN7qK1e7TfnMtCNO0/OGYAoWQB8W5e/586WfMzhLto/KSlAlnSR3q0CKCLcV/ltRQAAABSEU53HVAUR2eFckywCEDmo9hFVBfBfznuN9uDggLPn2+3gkX95eZj7EKb1w7PaVIIx5ttZ7M+1a45n9/uX+xhwcJvrN//adyMYu2rPx8oxTvYe52cVAOD83+6ZMq2cXS3znQsAAACAeH32Uz//qAMQJ0OBH8KSAQAAgB6Ar9nMV9PjUrAtuEAgYEv4APBtjGSzGjAmxLbgI+wA2GwBQnOFvwlx6P5OHGSA5vu+hkRaZHNhjA/dbyga/541KUEzXLvcv6y/E6hC+Dw+FIBjzMV7Mkd/A6DP3vzUb9xA0V2Cldq3/6e1RgAABJwkV0EN4SqfApECEPyxi/+9p11+2L0TVCZdwsJQLbZqLlBzF14OsD3gfY6pJR8zQDBOpqMM4HPbTt001wqoqMh2p5L7Q08AACAiUnv5aok5NRUUnQ3N4qaKiiBcu5hGvx5dk8cspq0e/MH6b8r+5rMtededI2XO5vSmatO9md/OO0kg8/i4h9/PUwUMkJW7+mX9cLLkPDOD7Tz2nv5ZyzDP7Sc3x3Cm/WL/Nn6rfu0DAADs8/6drL/arGkArQPAkMPr/kXtvBRwBwxA6GetUxzbLBgAGZYTgywB9r+epW1uGuYwgaj8o94SpB4EoKCSqvpCtjAAALwWYAEggKqjzO/RDCjZBvaNQquylaEP3naERmRzTWkfuk+qE98NQwJAc3Xd2b90v6POuf3lne0xbizA8H6s9moyrD7yNJY+OyeOBqxUru8+bQAAEg5DV3Fvja7yA0hIAHwftJ/eyHPlXD7Xqb+m0+IdTsetpLc8HSkgglyqt+EbtQgAoIioaO32piE1BRA5f3JQEAFgMf2fGx8wbuOL3qjl/T//pq5y6xqHR7PrD+d1Gebt1T73eVtYfRwD6ug3v9W833IG57lTU1uf6mRgxffb3tw8ndma8OQd1Fm/VWZCTn6xY6a11jsAAGI0WpQMlNx8qRufWOXjb+VOS/UGMAPQW/fZ9iPfVgGg9INqPDb3W+e95ZKhkgM0APRLbWEn9aUEERKMdcA2sm6Hh//ze1tSBdaAG3KJIEAA2AJsHHyQwdABpAGQgZZhpwMet2RV9IvtJDxeEAXlcYYkqNiurh3ul+4XPVUnj8ff3IDmYV4n+9J4A2CPd36jpVyp/Nfrh90BACRs8CyRThB306BTFSPA2YXzkX3zZyphCZbY6SYbI/0y7Xi10ZuaeuU+5SUAFCXOlxjv9oYbAABQUQHRC31rUFEVEVT+nK9W/k0Rbkfbg6/3b74dvNU6uel1dkSng7NwSl4ebeUNqY01zVr85quyokMPTNHN15zxff5twjHmDnnoawbcRt8zQGt5/n/nLCgNqvJw1wgAt9dfi/nzxw0CQLfwx/71ppJtXBiXkguZOSZv95+vYNzanZfRm/9nfJBKFTKAAiAV/vR5vxYAyPsKa571vk6AgnZZzKCEqpR8KDAA1reAOGjA0InLIB++GpU2lg0GSg0JsTr7+0RAyAiZzOauZwF3nIoAPscUSfaLzWVcrt+JpdhnlDQjlKxfXmvmQ/1Fpc55XHX+GOi+4+HNnm8Y8wuQfdmvNABrjPav68ETvDWgqFsBrFT/9bQ9BgDAGOEEYUp0lRIoIhAIPmHWtLkzV7nL7bbnPZ/bSrzd48wt3ezXd8rtpukH7tKqYxvCzxkyNqnjsCwAxRyeasmAD8HPNk9WvJYAgC4d1/g1EQUQ9KzPH7JXFAAQAVWZxfccjQFVBDHP3+9QAOD+wVfB12/JrbxuM5Oft9Pj3fn8K+qpp9jKTGDvm7o//qveijHLEDYafQDMRx8alJLn7betYJqAqc6Pm11A7Taw/TYXCtAaABAfGZPPIkECAAAA5vizOBb3a+8GCORLNgYQcpJttDKhYAd4sNAjycIUDCT5ZdD4kMG1HSEAfQzd2i5VNrdnqAJAowoAAICXC5UAT2dnUwAAwJQAAAAAAABVOQAABAAAACulgxUc/zX/Nv81/z3/Lv8i/yL/Kv8X/xH/Ef8P/wf6+37mhFQmv3js1xVQpxxjSkT92l5/tE/5V+8kiVXxy889EvMBGH3zMVfTMHZ8A4j2bLmAh78elOCE35dA0QArNfo/3gQAAAknoQninRLIKgIwAiD7pC+u/k91DSVehktmukd9LfR02X4kc+n2wo6uZvbUqwrkQvznbdfKewmA3uxIIYCn1301vhw8IrjFA+Tf/qc7AgAqnAfN3SIAAAAg39ZfxwMVQzl//PH28+3xx/0TaX596xzIuA7vNf9/zdSYsmbR/LZvA0CndLbU4nYzjJkv4wcUoLfH/iZ3Nzf0+5cmz0dz/f2/ni5NAAAAQPZ5J4EXvp3CnmOCAcB97Kjm5i9VSVWJVKYPuW9byEj6+39sQBUJab4kUbBMbBLENMQBu2jy/3oVYKrZys/QQdDm4QAAAC8W/vY0RmobgHyMX+onpeQypmQY6xwAfpxP3ScSl6urAPBt2tcreogdpy/L7GUBACbizdNfHwFQdAMrxcTHSwAAAja4IJ0gag2QUwUQAOHlV9JvHjpdKLptPivBB+4Wy2rq2tb9AcD9vczJoQ0+BwAwLx6d74sCoCIqdptREAAAIEWFE5GGuMIYFWRk6FXz7aWo8Oub72zWPawQtuSD+uWHl748cdY2i//qmbZJcea4jfEwct5vUfN7DSQFQzKiPMG1XDKdTG4ddCq8uzLSCzsDkMvD/755q/dUAWbBBQBky+XL9O3NmTIAANAeTxwbALKiemea9+0rq2gAAAB6OP3B6OIMyBkADC34Whj6wYBlG/qfApqVvOaq/BAwgA0LhLDJEQIgOEx9sIQFQGsoU4DM3dgKwP4HvrbUSaheAzKyH7oLxbF8IRFwY7h2OQ/5N4qSzeMjB4BiVTXmOS/ieYTRG4014Lx6Iuvh7REAygm+3QFQ4ASMJojCoZ6IpggBGAFAfhr4eNnkfNat9JeX2tyyeW+bOKiD9fbeuD4a3mgO5m4J5vcw92a1DeABICynR4nbMSf7IfNCCCEAUj02gwAAIKow/or9LsglCOs/v3xxmU5qfdbLfgu+OZYaR5PT8/3lfm6AW6a9b/+4uznst3l24am8i7GTN+9XsG+Pl3/HfZ89Ll+maI5fvf+r2xh1N+wNQG2pfw4NAAvlXP+Pf3O6QW5kAAMbtWV/sH8TATIykhGALPHUTyqhAoYtLg1LOrQOHuqpvxjQ1ciXJYwRWBIGsLG/iw3MsHdRBHrexhICYGe4YRYAAAAsxQB+hoQuju3VY6zq79Fx0j9fSQS8MgCMzEv85CSJzYfLv94gwxxc1V2gOo2cRS8HALjiBnz8uUkATGh+utoAzFfvjwAQAY8Rq7glolVqgBCAAMC7HnKrrydLBn8SNdKe3E9VIT1zNgDgPGx4CLunja0HAKbe6UWf9/EApw/ulRUAYN8NPrybqAIAiIqYorWv/YsvFBBk5ExQAGDzmds357yeNc2b8ejg+vce2RwkFzCO0nufpyHz/ba4GHPy/fGvwVDNTv9Y9RsodtceXtzZXyaH6iZnoPvDjvlpCgmNcy0ny29f5gSeoWboBUCPyIEQwBmY7GHF8qLFPx4e58ANHADqfcMHkBkz35dt2wAAtMftWkgI6Zj/9dMQCQCQAf9k4S09GxvZTki2YgwAABJDhQ3cjcHtw0hX+a08UaBZPoaUxmnbAiz7pf4K5gJJvWVIKaS2EeAwL+ujUCgdV9cZAN+kvsfroWfuzKXxBjC3x99uPPgYqEDc+5ECmAIOJ2E4oWiKEIAxAPSC46TfPuyd0vZyDrXrvZxG56VW4SpyUIB50mWm9WQP0pQwDgDQ+rN48r6OW/EArA0dbp9EAQBWFzO/qaXfHD1vtfa8ceXPtfjzx/1XHp//t1481O3QNB1sPjWVVKoBgIku15zTv2+QsI96GZqkuxMNus87rUHmX3LN60xZ1cUDGxjGrr/+/vzTGfaZNwAkB1+1iQ4AAAAAACDex//eslUsyQAAwJNmwshfXsVV20haj9kILLH46pFArgNU8l9FpaQ0ZfobbHyL0zvfH3zPkYC2YUtWowD6qy0hADDEsdsYCADgCj6WdD5qjcBeTfD4zKSeYhiSyahzAHKYL/2r6MFu6kk+CicAOlRw0DxP1LPxBoCnv203z6sGRTUwBSSccILwUUCKAIAAwD9ZRj1a8yea5mq5N9G8MdLI+9vFfNSeDsXfCgB4+a0hhkXR0P/Qh6rNkCHdndS+9wQAkAgElNPLpGlF4VoaO/50fouyL+jldS5+fLqfXNf5tJyvzqlb7RTsrn3Pwnrakw/MnW2Pjduz27hhnznn4OyEZb7InMXZABRn6uv3qTNXTcHINDDl8vjljNwBAJr9fcvJrpwzkEWDg1T/zKe3enIBQAGo1GacwlfvDQQAxlEqVE1ekudEhVRSo4X0RMgYPP7WozqGIWcQKLYABAbIABu4O0YBl5YYWgbSAFI+hpTenJeXl/Zh/ZhOqAoShhSy6LMBmJyX/Bkc54+wiZrxU5/vJzHo6TT6bHYBJm/UQFFHYKWy/7QHAIBwwgnCXaMiACAA+M/kHT+0v//KuSWQ6bzvj++e+5oEdkLKKH9p5QHasv11uogCgKrEueczAACAgtAT2X7cKVDmB/+z/WD0P40+uPz2YS/ZZVr6YS5sohP7zNUH7knfOjwYnVs9Kze8vtnj9M989d9++3Qb+wGj9emPxXr1cnemYY5hvqaggbysXikAueQVc9+MlXdlZkcuNE87vmEqBQAAIJ+aD19/zOluUkYFtPWE794p5C63TguAVhTK73fHtU3PBmzwel8V/q8QdAYA5IXFwgJRmguhYYCmrFsAkMN5w5cOZKBZHpY0Jl5X1x/3av0s5uT3niVd0XouAUbuh+UaoY9dra6Pwzk08NHiX3m+J/usrwNTmHu+gHJlPvynGwAARBxQQDohMogiAAEQussF+//V3sm2nKSplx7XjhfdZPiwXendXUfXdB6AlnKR3ND463vn12nCR7/0AEDOKAoKAAAAqqoDjY0IfjXm129TbrbLUTu2/ps78yvHtjbPD/brSfXeau+242t+d394T6VpACDi4dd4vJ09sLkbly2/30mIpnflXoAy519/+g1kzOagNHw86vyY/x8HAAAAmrqof9KTBgAO88R6WzdMLJ0G5CYwGzia/m78Sl0AyGYDuExsAwIBAGDgZwCBgw2Rl0PBIoDgQEj3HOr59oAlFBiWNANbyLGRLQBgjQJNAEIUHpY0MX2228vzU/eLIyVUX1gyeaf7FsQlvXQfgXT2f0jgc4cVi1Q7ymW2DlQnnHNiAShX/wBAMJywAsAkJAAAFG4vju01m5O26yDNTJ7c+f3Xc+9vvZ2sKy0tAQCWyeG7KXguvu6+vacAcLp2bPKJKAAA045y866n272riK3LO70ff51P87E/rn2+DzmVpbV2DCL9W49XqDX8/7wV38fbAGQXvc7pTImqamhAaXd+1bGtXGgF+YwrAZhqZfNfOpsKAKUAWPa8nrfzcAYGYOYuHjzy6i+2GgAZgKXuw18PDj5sAgAEIBgAQAZWJdlo+AaYBITlp3fdGBx/lgGDwPxlCQwpBAGiyPd829tUwFZAAQAWyb+BLQCeluwt6TsCO5zfLB8z7JzsiB1L1hj1H0Ac7t90n8VpSnXIO/MCIFpms5cAzJvh+888+AYczwFYWOP37HMATAFBQk4BUgQgAObHtXC3nPb47krLZFk8AOTzVt1DALJbWxhl7AGAbufrcCX08XiAfHd7AAAA0Cf9ulX9uEytrJ27CP79+mdfV7Hrxe2D/7pr8KEfGXo0b7f1mJF5/+zsrIlnLanJr47VZ7W4/HsdJD1+TpaGztXmVs4I2EXld87jTgam8rD8pnf1sl5MDwtL//L+Nm6lZ8gdAOByuRbA0eWxAAAAsCUYCv6GkJEBMHUiFFKV/3q8UMGJzxEwkAFAfnDf1RIACgnseAB2F2ALAxUAfB6WbNOo9zUQzfil/4i2aY78YUnfq75boIe9yq+tfUnfCPo4Pk8dYfJXUJ7MNfgxWwfu+srzMEDzbQeA4vMbYEKA4RCYAhQiBEEABPS7vtE4Fy38EnmizrefDk+tbnyvfnE6O7AoAIHl2lbHBAAAcvbl7IZPJ1B8/3JqgQ6ADOaPtrIGANi5uHH6qQIAgOR0MPX2x/msqfccjqzwTe3hlhZep25tZ08iGirfqsc63v+zJgBNw9k7+vTkOUrVNAx0rOcl6qn2mwftmwt8u3nn/xc6OQMAAJdxT5xAAjRgAdDr0n8XyAAAAO5+lXab/mIAgLEP3g5/ayAXAJB86/bzXgGAQgbA9iMAAHAwBEjYCoADHpYc56LvJdBl/Gb5CEbJauxYsrVRILwCsdyL+irOKq0hPXHOJcsby2PunB8B0bI0XgGg70/fevADJaB438BK2b+MDgBAwCGDAoBJSAQAOOG3FNZZIeUg2lYWILrdlnYrhKVeBgDIqHXcHAoQLoePvxUAIN/1k5Y9BQAQh7OThlsFANAodrwVAQDotP9+i/vj0fTzdlem9bF+za33835TgbcOUsnKX/nKw1eoz3tPv7Eq6lV5er5glFLkNjf0L5jKRNk5Q6EAxRXetzeFqfe+2XAACnrx4/uX++uBCQBgiK8BAOgBAKCmfXNG2NhcAGIjFRkA4+DGTxemm4hRADgDyX+f/1EBXALADSJYBgAaPpbsS/9eXTXlUj/fjpxgET2WnNZJ32uAxX6pvz1JQCbQuZ+G8mQ2+isA9PVmxcNTwA/E+aYCE1QBQBICEwKEOAAAgOLH06H/XS7qK6U5/28hA+AJyS47ADkMf/UvWwqE0oGDcQDF5wzwYPkdZX6iAICKGsabAAAAUDv68dMfjg7K6k2+s9+efjjYFB6pn+2PlrzJT2P3F9OtUvynL8lSn1hkjD+HnKllfUwVAw1U8vY+u668N72BJyc/VHQmr6aQCpPxPld/fl/c5yk/SYcPvaZadZ7PhAMAAADdb0dXD5AATQIAABQ8fOZxT29HylMQRch/aQOXHwCA8J8NAALFiUCkAlgdAD5mnJYm4eXVZPeWX826QNppLNkukz+Ai2VTP25TnXOKc/yrcjIbs+WCGygenwkmBMIEY4AgkQhAAOyE+9ftRWLs9VlImN5ptgN5xzhyPssA0F/YuVxsRQEAEUj18qe7plKmvXOf+Nsjjft6KqmHWSGLPy8NKeOLvcnxgx9u9iU2B9NwZd3t/koq+gsAgBwK1fLE2XumgXLO9Fe9uMnmCDA/5nouapLrtfqQo9zyl0XpvQAzGUC15IQCAK1Mi98cfNnWXAIAgMQ9//374y2PBwCgQfWnkYuUBQAALsyPq9sCwBgv3h8gQPzrDWBeITdntgIQpRaATQLQCAA+ljympl8O0LTL4/Opg56KBiuOJZdz/l1cBely/X47SdpMROdeSnd5ss8aF2CaTdEAq08AwEIgiEBIJAJguWMzh+Zp622K/M06IACQpbobcWL35OR70cktAADIyMeFqAAAANPlX7bvaH9xWRbt4PBv/3dd3895vxxlRltt2a37B6Ru57aftk7NdJ30pokUjdF8YToB6O57yK8zBmQazmFr/dQkA/WDAkCZ1s95PNeg35ZoPlTO/vnHMIw7JoDq9FvoBe5gjgzOvz04uF4BAMmtW5+GCSxgwYUf8Lj6lew2bFDwPPpRAABb320BMDw4UsBmAYDGX1DYQGgoAE9nZ1MAAMDcAAAAAAAAVTkAAAUAAACeT3/vE/v09v8C8vr26OXq6uft5Njl29o+llzP6X95lZyF34+zqiIZS16P+ttcT9Iv/a9h7I/oOOOUp/JE2ZitAZdDufoDIGFMACapKgQAy9//2+jPur529t4/2DvtZQAAuFu2rEXDXyIAAACc7Q/JDJ1w3bn3ngWta2qt/bbGh+3Lt7bYT/tq/6gcnOdent0Vn+Qh+ndF3hjqx3qjjjdD4nxqTzONrwbwsSebuL0/ryVz2MPYNaGw+cx+U2kUChk0oKDrtOOErT03+Hr8/693ngGYmrd+uG+Ycy4AAFRgPvjn/9+aAAAAUFCAn6nCDKhXzb+fADTAfmQDAEBfwA2wAxpzADM4w1GcAgJY2IABNg3IAF6WvB7Lf7wePH/z+LWdTuIpjSXPff9vrjtn1f0+SVxFikZXN4Ud9cZsDbjiUBRFMCEkjASqIgQBEJhc3offqZO/vSI7jQJ4IHjKjk/SOsvHnV4GAACAhuB+mPpv52VXpp5c0HJv6f/49LT3+eLp74+HH49v4zGduXgZ9uEs6zVMBTi/vn7JBdthj9eZ3t3RANO1Aeb9/u+3WbsPDgsWtOlhfi5bPdM6AADs1cYwgAHQplM8IbkAgEY//8dJO5QBAABg6Yt+tAAAAJqhI7eVfADCgP3yBV2gzQRyDbDDDtCsvwHdFGw+AQowTz5L8IE9QAPWZABeZjzu++9iE9zrFThQc9yxLLm9HD9z3Rgv8TM4SepCOs7RE04jZ7M14NvyUJwGmKASACSpqgoJAAw1DkdXr0+W+ml86zAHAJC16x9uJJj+YTp22gEAgGqDThQAAADiqX92kQWbtuken+WvpzaejkYmT93vtX6ntK3BToo2vjh7P3hw8vhzjjHrA2DXulUAzIF53lO6j2nYLroZgPzXttWDDZk3VSuUWP+s0UzuAABcrloVAIACt75/SmUAyBzcTvtqogEAAIAKyvxfgABmSoDwmL/+GWBzuxMLgQIgOgM4ZoAsTjG0wQJkbagB/wgYQBwrpuFQwAFelvy4zvpvAZX9af0opkRzLku+j1nCdGXMT/3vgcJpbsrLoQFRNJstC8VnAhNCWOWqigBoeujNcqy361ulW5n41RGn325bAACgNp8XoJcqR9uV71NKhtu3Hyz+8b+rmov7Q/+h3SfnzYQ7q/hnJTqYrxMOjzKRuzVMdT/KjJynVl1Mz0DGFz+eLY1VwKB/GKiUD7duLdqcAegaUKApZADm8UHtc79uz0wzAMA0AJvxlz98nA4AfbglAAAAwKA1f7IBAEDZmC8+rCZe2JXEtL5OFdqLX5vYtQoF2LuI68qFTbtY19c7GgeFRkqIwrw+Py2Ob82v+u4QtjPNFGmKeuRmAD6WfF/mb751xsvjExUGYiz52i7ffKuMh9cjaZSKEnKl3JmzaA24LZQTItVQFYkA8ABAoVz4xo0ONAD0fO+0mHe/+05O1aZN/ubKYlqsi8L1uOxP3tGz/9Yaf3m5qf4+D39+jnM4ze6ZxAlNQg1S/+id75UAADkJ4KtINlcDAKh8OOjTpmWODLEqrco4ej6fFepMAwKiHHQBLABAeZiq1gIAEv2c0wAAAHqw/v1H5l4AAGDpN4ubtwQAAM3xaXiPMjHCLy1hXQlAWEp+oRJjyG2wjWUpNuCakln/+3cLBYBZ+x6UGjINCy4xXx4n+zgAPiAAPpb83E7fNCrtZflVjOqU8pYl39f9b7dGu9RPJDKUbdKNaLZhdgGhEqqqCoC3uqO2AACgoAH6kDxbauNvTyotbw7Gl4d1Hvd8HM8ebpf3/28d6ezrm/tlv986o90qP4vauPz1zVnwdneSBfDQNimDJffA6D89dNW+wcB8Xn27tbtm25mFhouW/e2CIgG6WaEWPtmXAkCnH1AW/yMHTlB1n0Keb/7edi0DgFF/f/z2agPkCwwAAOx1Shm65tn/OY/W3fXDwHJdOwRkjNHHCL72P3xXi7xg+ZmSnmLeoob51LVy2hAYrYvz2kO0bsApUVXBIQ4LJLMFaGAADF6W/LwsP71U0osP5o6z5Pd1/KWktIfl92Jkh9SVcbKRszVAfShDsaqqkAh48QBA0KWDRbYAKGCsH+97udW879cs0dd3ptbCcdtcPHihdeo309bBDJujNNVG683DSw61W3RxGaBhQINx/t11jvGIWX93L6efm7vtpOlneb998oorEZq6JhOAMpW33nOjkDMZ6CsUdbvQANAo6/B7AQCA5hfrTgYAAGBMH1a/ztM6AADgLwMAAlRsqnBmMr9fvcuzr/UGwMVlZDQSvvaQcOVVjy6q3P1y2ZPsLC2mxINDjsI+k6k/DJ3qCYJiCIJR1zcOoJ4hAChAA15m/Nn2vx2VwvIbjakO2UNZ8vMyfcmURPcotoXzOcOojXLWWANUC8wKAJdQVRUhBCADAJTWqN3B/NckAwAAODpTk+9QOZyaUXP8NM+87c5FP8pbNsuejnN4O9gEd571oXOIZm1c/we93/5jrQuKfU1tZvqvUzQUUOkM0JkWn+SwF2joSn/A9jhW50MRxwaG0ZCv7xUAAPSeTHsJAEBO9NUDAMBjCGAY+TG9sD2dtaaeARss6wtkkeLW3LmIaXPBjBfL4UuPedsc/Yw9PGfTyHeG+hoIXsf+cFGC2YJrEjm4OtYGRPECAA1elvy5tH9JwyV+NitF5rmWJb8v49+TgvqrUIeomxrrdCOadYaqqiqEEAAAjNbmLis7DAUwPr0/1/6+HWqrcDnPL29v5dxLL7ebXbfxaRoI6VAfZqBn+PL4+GnNLf8+0z1wqiv74OxT5zy9n33m23bBsPZXPV/xnF0FwOX9HHbRSgfIHTZenDi7FgBg31w93gBgV3wAAAAA3uePtn06AJTOmdN3e7iWwoCZ/84W/W97ke+xHk8PuBtHpTgsmFuNakTHuh+ag9U+Uca2x84HDcMiMaEnBJHoHW+MV1tTgNYcM+wNbBoAfpb8dWl/I5RE99c0okokcz5Lfl2nn0sDeW0mO1Coo0eNKIooVVVVhSAAACj7Y8IHtZPzGMoYb/czHl0/5/51jJzl5/P5nzcfD5/Xb5dP80uMH/vHSNKFL2BaM7wakskoKsjZd7/Vbctpc6b1/euvcbYzZpopqAGf6GEADzVn0DRH7HcKTe+mAX73fFsKAABqP18GABhHnBQAwKC2zfreDQAAeJZWcajp1b+pk16gjHd/2ZZT4/u25qJdl9n4vNeMXkAbm+8rY8sh7PXA1+7DsVAfFjS3seIpZIrIunQG9wUXBTZOFAC8DRgAfpb8uq7fEgLqZ7GuCKi7LPlr235qDXSPQUHpoLY9iqJGZ6iqqooQAAAqd+c6R0vPV9Xf9z3Hdv94+nvr1qIVLs7fWtqdzkF53cp8eE4eTsZqzmSz6wBZ6HXWdzfTI2aAyXR3JK0FRRdc4UCB0r/NgAid13OTuclsZPmmYHon04Rz++O/X4+jvwAAZ3QmAOhrAwAAACiOt84JAEF+xPSnPsjyPDHpGbTmY/Tt9HRgunNqOsO4+EEYmlB7CHHFuIuX1tPKtt67urq0XiL7XLccye2G08lfCEF76qEeFgk0Y7YAOWfoAbqA7UABfpb8uUw/i9CIHwk7MNey5Pu6/kINdFezn1OBUZvRLJolQ0JVVRECANiCbzk3WY7O21atjM38sp8/aSyk+Wj/7MytHOxlqXRldrIY9ikPwH7izjG7KmIaracmSjd+vk1/5lpRGr2Rx/WnxTRsc10NliefeCrLZyi4HbCOjx0TrQO9A3pRX2sAAIATvwkAMPB1IAEYADCw/8jVp0MAn7u6Otab05O3oYGPZCwDaj1SW1gYxrrxOy2mnEWa5VU6p7uPf0qHL72wcz1WnkqLpFf3Tw4+bZXXhz3d4cHchWMGNEPCDvVAMBwAXpb8vW1/jIL1NSgon/ss+XPpP7cK1qsZFZTsSm171MhZxFBVVRUCAKDCwxj1vWJLnXIzMe4P3z+/lLfhgfPR5mF7+O2St5Yzvf3m9u9tmCV/fFYzOUPt7OrZVTkAO0m+djpuJMnJyRg4P3p/fTlzgMK2sPA4euaAG64psruaw1SdnhcauQGN9fzrxXrjpDUADLuvGgDg5soKAAA4fj71l3+MAjARw5rR97SapEVj4lFhzWeY/l0oeqf2q85luqow3K1FWud8sjBfR+rzgQdykNEi+K3eyo6aUQaG53m4T5gwg59pOTVUAqaZDaAAfpb8us1fhIL6aOaKBDuXJb8v4zdcQf5rFJnnCoO2R41GI6IUq6qqCIA2albNkLX3m+M2zD13p7896yC9jfeXPt1ctuRhcF/sWhpv9/u838sZJnv6R+9Nct9Deyb7IYvc7WvMH3MS5wyMGo8f83a4exrUocepP7+OM+3BwIlrXl86gDPAp9uHV1pfAADIDL4lAFDwBgAwYCDPfxptAAAQcc6KXmk3MWS75zLgy6BI9KRyRXpwjFwUJ6Xh8vLqYZ8ebSJGW65fCd9aInRwTtqvnTv4Q1zUJcGVDIuTevdRQAkQPGgAfpb8dek/tQr6tVBCZuey5J/t+A8M9AsjCz1AbZNuREHNKA1VVVUIAQDAXkjcnb3ts2vucmyuTqmdTQO15JRr+f38Zr+8RN4unaOnCrIrSdMwMd1G7/fW4ajz6UtDN0CDsSf3Gm9/HRwDSK05vL+vLBoSEhwfvW1px54DsM/P2QKAW29jAAD+KqBOqmIywRalPqUDIAQWa6XJGuADAABiQrWGanq0eOL387AeFoi3NDpoEu5LM7q124yFo9cBzrDx44PXd23TqMWJ+xRaTQAMRYBWBTIZFDAAfpZ839Z/oCC+inXynM6S39fx71JAVxsWIl461qNZj2aUoVhVVSEAAIAKkBSgqLFm03frYveea6+fFHTbR+XGqd00d25v/b8eTPaPPdjkTk7XNv3cZu4agDzUj6J5FF5rvAEgtx+O/sW9g2JRLeac2/n7Yp/htgFD597Mm3ASGKCB84krNVwAoLP46zTuAAAYDboqBhXN/HarjwEAADCAuQwAbkj1k/0fsQ+S+vvZMmHSjU9+6VLd6QPiuTCciY/t7IwcgyTsXdeC0j7i8q7K20F9jba2W3Ll9tbDz6JQMPoZDA0ANl6WfF/nf7khqNdwnCKzOpclvy7zt1zB+mqmEvLc1JH0rAcxopRQQlUVAgAAsAyYzd44cTfHOHXq6x/+/O+M9y/rH/Uw9v2cT5r7UGjlpjJHXc0VNznFytGPoTpjzdfZTLPQAAAANJ/c6YACAHjoPN4BABgLmBNRxQAJJDmZP4D+zxJ9kQBwAWAAAG/T4O0ZAAAgsPn/jkQEgNeWDcCR4VTLfyMf+iQY44wCGHwJG+GcbeOiNY8jnXTXnlWbVsfrS4xEdmR8mU9CEH07FAzybq1Fxh6gs29tsA0AZF6W/Lys/3IB3RKsLXm4jiW/t/0bUgkvj644kjHxwmj0aDYLakapcqyqIgQAA9XMDGTMOXPP8WVyyw/5+njLH/1P5+P840v/7HHb4rZeX705QGWeU8RkkqxMmarioqmnZT9OzBsAALTqz4P0AlwALvtO/lBKoZChFWvE23+djmMCWD8FAHx1nnMGgJoA6gcA2D7/+JYzAIDE/nNtx/LWe0294Fq1Ta23K4GrSYx8cX3nT218gDQEB8+O9WY2aaJzoB16OBYzDSJlREjTRCmeNkME9+PtCOycAGQAT2dnUwAEACABAAAAAABVOQAABgAAAIsxbiwR8oYBAQEBAQEBAQEBAQEBAQFelvy97RK6C5JvHRYLobcs+Xs7/kVi8KlZi7wwOhmtwYuoMaNVQlNVCAIAwPvS3k2GlgASCrgT1Qx0AwXyeW5/6vTCra8XubbIXbnk6c43/Gi+48SbLs9Rjrw7yn9N1anXe7LUlUxS/tLWAzosABT8Pmc3AAfavB9zvTaFc27O2JgPz9/U4mHQlrGApvZ+8/atg1IoTMBq+NuwkEz/k9P7zO8VRgLUTRZcnniuPzhoy8Gmf7EJqL/uNdcgEBh+lpiNvzYPBPvr1IRYmX1LMgAAANjC+jmUGLJTUU/xjDsKOzhi7fLhkB02wnk4+xiGswYAFB6W/Peod0pBZyMzlvz3rF9KwbatdQAAI+qMSs+oEEIAAAAhAAAAAEAWQEJW3hne3JdZnQComtVbb0y3vjzv97ent/ZLrrsOh9p8vfoHy/ev/n/9rx3DweZfP3d6GWoYYHp6YNp5jxf7t94f9P3nr5/3C9D/3UnFwLJAHzQAACU8AXYK2AIADg4ODg4ODg4ODg4ODg4O",
        ["MC Bow"] = "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AAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sq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",
        ["Skeet"] = "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TVUVAABQ4AAAEGCDpsTiAIWGrAQAQgIAHIpiWZrmeZ4niqapmiRJ0zxPFEXRNE1TVUmSpnmeKIqiaZqmqrIsTfM8URRF01RVVYWmeZ4oiqJpqqrqwvM8TxRF0TRV1XXheZ4niqJomqrquhBFUTRN01RNVXVdIIqmaZqqqqquC0RPFE1TVV3XdYHniaJpqqqrui4QTdNUVVV1XVkGmKZpqqrryjJAVVXVdV1XlgGqqqqu67qyDFBV13VdWZZlAK7rurIsywIAAA4cAAACjKCTjCqLsNGECw9AoSErAoAoAADAGKYUU8owJiGkEBrGJIQUQiYlpdJSqiCkUlIpFYRUSiolo5RSailVEFIpqZQKQiollVIAANiBAwDYgYVQaMhKACAPAIAwRinGGHNOIqQUY845JxFSijHnnJNKMeacc85JKRlzzDnnpJTOOeecc1JK5pxzzjkppXPOOeeclFJK55xzTkopJYTOQSellNI555wTAABU4AAAEGCjyOYEI0GFhqwEAFIBAAyOY1ma5nmiaJqWJGma53meKJqmJkma5nmeJ4qqyfM8TxRF0TRVled5niiKommqKtcVRdM0TVVVXbIsiqZpmqrqujBN01RV13VdmKZpqqrrui5sW1VV1XVlGbatqqrqurIMXNd1ZdmWgSy7ruzasgAA8AQHAKACG1ZHOCkaCyw0ZCUAkAEAQBiDkEIIIWUQQgohhJRSCAkAABhwAAAIMKEMFBqyEgBIBQAAjLHWWmuttdZAZ6211lprrYDMWmuttdZaa6211lprrbXWUmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaay2llFJKKaWUUkoppZRSSimllFJKBQD6VTgA+D/YsDrCSdFYYKEhKwGAcAAAwBilGHMMQimlVAgx5px0VFqLsUKIMeckpNRabMVzzkEoIZXWYiyecw5CKSnFVmNRKYRSUkottliLSqGjklJKrdVYjDGppNZai63GYoxJKbTUWosxFiNsTam12GqrsRhjayottBhjjMUIX2RsLabaag3GCCNbLC3VWmswxhjdW4ultpqLMT742lIsMdZcAAB3gwMARIKNM6wknRWOBhcashIACAkAIBBSijHGGHPOOeekUow55pxzDkIIoVSKMcaccw5CCCGUjDHmnHMQQgghhFJK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",
        ["Break"] = "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",
        ["Rust"] = "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TVUVAABQ4AAAEGCDpsTiAIWGrAQAQgIAHIpiWZrmeZ4niqapmiRJ0zxPFEXRNE1TVUmSpnmeKIqiaZqmqrIsTfM8URRF01RVVYWmeZ4oiqJpqqrqwvM8TxRF0TRV1XXheZ4niqJomqrquhBFUTRN01RNVXVdIIqmaZqqqqquC0RPFE1TVV3XdYHniaJpqqqrui4QTdNUVVV1XVkGmKZpqqrryjJAVVXVdV1XlgGqqqqu67qyDFBV13VdWZZlAK7rurIsywIAAA4cAAACjKCTjCqLsNGECw9AoSErAoAoAADAGKYUU8owJiGkEBrGJIQUQiYlpdJSqiCkUlIpFYRUSiolo5RSailVEFIpqZQKQiollVIAANiBAwDYgYVQaMhKACAPAIAwRinGGHNOIqQUY845JxFSijHnnJNKMeacc85JKRlzzDnnpJTOOeecc1JK5pxzzjkppXPOOeeclFJK55xzTkopJYTOQSellNI555wTAABU4AAAEGCjyOYEI0GFhqwEAFIBAAyOY1ma5nmiaJqWJGma53meKJqmJkma5nmeJ4qqyfM8TxRF0TRVled5niiKommqKtcVRdM0TVVVXbIsiqZpmqrqujBN01RV13VdmKZpqqrrui5sW1VV1XVlGbatqqrqurIMXNd1ZdmWgSy7ruzasgAA8AQHAKACG1ZHOCkaCyw0ZCUAkAEAQBiDkEIIIWUQQgohhJRSCAkAABhwAAAIMKEMFBqyEgBIBQAAjLHWWmuttdZAZ6211lprrYDMWmuttdZaa6211lprrbXWUmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaay2llFJKKaWUUkoppZRSSimllFJKBQD6VTgA+D/YsDrCSdFYYKEhKwGAcAAAwBilGHMMQimlVAgx5px0VFqLsUKIMeckpNRabMVzzkEoIZXWYiyecw5CKSnFVmNRKYRSUkottliLSqGjklJKrdVYjDGppNZai63GYoxJKbTUWosxFiNsTam12GqrsRhjayottBhjjMUIX2RsLabaag3GCCNbLC3VWmswxhjdW4ultpqLMT742lIsMdZcAAB3gwMARIKNM6wknRWOBhcashIACAkAIBBSijHGGHPOOeekUow55pxzDkIIoVSKMcaccw5CCCGUjDHmnHMQQgghhFJK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",
    }
    local Self = {Cache = {}, Failed = {}}
    local Alphabet, Lookup = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", {}
    for Index = 1, #Alphabet do Lookup[Alphabet:sub(Index, Index)] = Index - 1 end
    local function Decode(Text)
        local Bytes, Accumulator, Bits = {}, 0, 0
        for Index = 1, #Text do
            local Value = Lookup[Text:sub(Index, Index)]
            if Value then
                Accumulator = Accumulator * 64 + Value
                Bits += 6
                if Bits >= 8 then
                    Bits -= 8
                    table.insert(Bytes, string.char(math.floor(Accumulator / 2 ^ Bits) % 256))
                    Accumulator %= 2 ^ Bits
                end
            end
        end
        return table.concat(Bytes)
    end
    function Self:Resolve(Name)
        if self.Cache[Name] then return self.Cache[Name] end
        if self.Failed[Name] or not Data[Name] then return nil end
        local Okay, Asset = pcall(function()
            if type(getcustomasset) ~= "function" or type(writefile) ~= "function" or type(makefolder) ~= "function" then return nil end
            for _, Folder in {"Swift2", "Swift2/Assets", "Swift2/Assets/Sounds"} do
                if type(isfolder) ~= "function" or not isfolder(Folder) then makefolder(Folder) end
            end
            local Path = "Swift2/Assets/Sounds/" .. Name .. ".ogg"
            writefile(Path, Decode(Data[Name]))
            return getcustomasset(Path)
        end)
        if Okay and type(Asset) == "string" and Asset ~= "" then self.Cache[Name] = Asset; return Asset end
        self.Failed[Name] = true
        Functions.Utility.Notify("Could Not Load " .. tostring(Name) .. " Hit Sound", "Warning")
        return nil
    end
Functions.Visuals.Sounds = Self
end

function Functions.Visuals.CreateChams(Prefix, Filter)
    local Get, Color = Functions.Config.Get, Functions.Config.Color
    local Workspace = State.Services.Workspace
    local Self = {Entries = {}, Properties = {}}
    local White = Color3.new(1, 1, 1)
    local Materials = {Flat = Enum.Material.SmoothPlastic, Neon = Enum.Material.Neon, ForceField = Enum.Material.ForceField, Glass = Enum.Material.Glass, Metal = Enum.Material.Metal}
    local Corners, Lines = {}, {}
    for X = -1, 1, 2 do for Y = -1, 1, 2 do for Z = -1, 1, 2 do table.insert(Corners, Vector3.new(X, Y, Z) * 0.5) end end end
    for A = 1, #Corners do
        for B = A + 1, #Corners do
            local Delta = Corners[A] - Corners[B]
            if math.abs(Delta.X) + math.abs(Delta.Y) + math.abs(Delta.Z) == 1 then
                table.insert(Lines, Corners[A]); table.insert(Lines, Corners[B])
            end
        end
    end
    local function Original(Object, Name)
        local Properties = Self.Properties[Object]
        local Saved = Properties and Properties[Name]
        local Value = Object[Name]
        if Saved and Saved.Applied and Value == Saved.Value then return Saved.Original end
        return Value
    end
    local function Set(Record, Object, Name, Value)
        local Properties = Self.Properties[Object]
        if not Properties then Properties = {}; Self.Properties[Object] = Properties end
        local Current = Object[Name]
        local Saved = Properties[Name]
        if not Saved then Saved = {Original = Current}; Properties[Name] = Saved
        elseif not Saved.Applied or Current ~= Saved.Value then Saved.Original = Current end
        if Current ~= Value then Object[Name] = Value end
        Saved.Value, Saved.Applied = Object[Name], true
        Record.Objects[Object] = true
    end
    local function Restore(Record)
        for Object in Record.Objects do
            local Properties = Self.Properties[Object]
            if Properties then
                for Name, Saved in Properties do
                    local Okay = pcall(function()
                        if Saved.Applied and Object[Name] == Saved.Value then Object[Name] = Saved.Original end
                    end)
                    if not Okay and Name == "Parent" and Object:IsA("SurfaceAppearance") and Object.Parent == nil then pcall(Object.Destroy, Object) end
                end
                Self.Properties[Object] = nil
            end
            Record.Objects[Object] = nil
        end
    end
    local function RemovePart(Record)
        Restore(Record)
        if Record.Wire then Record.Wire:Destroy(); Record.Wire = nil end
    end
    local function Scan(State)
        local Seen = {}
        local Descendants = State.Source:GetDescendants()
        if State.Source:IsA("BasePart") then table.insert(Descendants, State.Source) end
        for _, Part in Descendants do
            if Part:IsA("BasePart") and Part.Name ~= "HumanoidRootPart" and Part.Name ~= "CollisionBox" and (not Filter or Filter(Part, State.Source)) then
                Seen[Part] = true
                local Record = State.Parts[Part]
                if not Record then Record = {Objects = {}, Details = {}}; State.Parts[Part] = Record end
                for _, Child in Part:GetChildren() do
                    if Child:IsA("SurfaceAppearance") or Child:IsA("SpecialMesh") or Child:IsA("Decal") or Child:IsA("Texture") then Record.Details[Child] = true end
                end
            end
        end
        for Part, Record in State.Parts do if not Seen[Part] then RemovePart(Record); State.Parts[Part] = nil end end
        State.Dirty = false
    end
    local function Create(Entry, Model)
        local State = {Source = Model, Parts = {}, Connections = {}, Dirty = true}
        local function Dirty() State.Dirty = true end
        table.insert(State.Connections, Model.DescendantAdded:Connect(Dirty))
        table.insert(State.Connections, Model.DescendantRemoving:Connect(Dirty))
        Entry.Chams = State
        Self.Entries[Entry] = true
        return State
    end
    function Self:ReadOriginal(Object, Name)
        local Properties = self.Properties[Object]
        if not Properties or not Properties[Name] then return false end
        return true, Original(Object, Name)
    end
    function Self:DetachedSurfaces(Part)
        local Count = 0
        for Object, Properties in self.Properties do
            if Object:IsA("SurfaceAppearance") and Properties.Parent and Object.Parent == nil and Original(Object, "Parent") == Part then Count += 1 end
        end
        return Count
    end
    function Self:NormalizeVisibility(Parts)
        if next(self.Properties) == nil then return end
        for Part, Transparency in Parts or {} do
            local Properties = self.Properties[Part]
            local Saved = Properties and Properties.Transparency
            if Saved and Saved.Applied and Transparency == Saved.Value then Parts[Part] = Saved.Original end
        end
    end
    function Self:RestoreModel(Model)
        for Entry in self.Entries do
            local State = Entry.Chams
            for Part, Record in State.Parts do
                if Part == Model or Part:IsDescendantOf(Model) then
                    Restore(Record)
                    table.clear(Record.Details)
                    State.Dirty = true
                end
            end
        end
    end
    function Self:Remove(Entry)
        local State = Entry.Chams
        if State then
            for _, Connection in State.Connections do Connection:Disconnect() end
            for _, Record in State.Parts do RemovePart(Record) end
            if State.Folder then State.Folder:Destroy() end
            Entry.Chams = nil
        end
        self.Entries[Entry] = nil
    end
    function Self:Hide(Entry) self:Remove(Entry) end
    function Self:Render(Entry, Model)
        local FillEnabled = Get(Prefix, false)
        local WireEnabled = Get(Prefix .. " Wireframe", false)
        if not FillEnabled and not WireEnabled or not Model or not Model.Parent then self:Remove(Entry); return end
        local State = Entry.Chams
        if State and State.Source ~= Model then self:Remove(Entry); State = nil end
        State = State or Create(Entry, Model)
        if State.Dirty then Scan(State) end
        local Style = Get(Prefix .. " Style", "Flat")
        local Material = Materials[Style] or Enum.Material.SmoothPlastic
        local FillColor, FillAlpha = Color(Prefix .. " Color", Color3.fromRGB(160, 110, 255))
        local Opacity = math.clamp(Get(Prefix .. " Opacity", 0.65), 0, 1) * (FillAlpha or 1)
        if Get(Prefix .. " Pulse", false) then
            local Speed = math.clamp(Get(Prefix .. " Pulse Speed", 1), 0.1, 5)
            local Minimum = math.clamp(Get(Prefix .. " Pulse Minimum", 0.25), 0, 1)
            Opacity *= Minimum + (1 - Minimum) * (0.5 + 0.5 * math.sin(os.clock() * math.pi * 2 * Speed))
        end
        local WireColor, WireAlpha = Color(Prefix .. " Wireframe Color", White)
        local WireOpacity = math.clamp(Get(Prefix .. " Wireframe Opacity", 1), 0, 1) * (WireAlpha or 1)
        local Thickness = math.clamp(Get(Prefix .. " Wireframe Thickness", 1), 0.5, 4)
        for Part, Record in State.Parts do
            if not Part.Parent then RemovePart(Record); State.Parts[Part] = nil; continue end
            if not FillEnabled then Restore(Record) end
            local NativeTransparency = Original(Part, "Transparency")
            local PartAlpha = (1 - math.clamp(NativeTransparency, 0, 1)) * (1 - math.clamp(Part.LocalTransparencyModifier or 0, 0, 1))
            if FillEnabled then
                Set(Record, Part, "Color", FillColor)
                Set(Record, Part, "Material", Material)
                Set(Record, Part, "MaterialVariant", "")
                Set(Record, Part, "Reflectance", Style == "Glass" and 0.15 or Style == "Metal" and 0.3 or 0)
                Set(Record, Part, "Transparency", 1 - (1 - NativeTransparency) * Opacity)
                if Part:IsA("MeshPart") then Set(Record, Part, "TextureID", "") end
                for Detail in Record.Details do
                    if Original(Detail, "Parent") ~= Part then Record.Details[Detail] = nil; continue end
                    if Detail:IsA("SurfaceAppearance") then Set(Record, Detail, "Parent", nil)
                    elseif Detail:IsA("SpecialMesh") then
                        Set(Record, Detail, "TextureId", "")
                        Set(Record, Detail, "VertexColor", Vector3.new(1, 1, 1))
                    else Set(Record, Detail, "Transparency", 1) end
                end
            end
            if WireEnabled then
                if not Record.Wire then
                    if not State.Folder then
                        State.Folder = Instance.new("Folder")
                        State.Folder.Name, State.Folder.Parent = "Swift2Wireframe", Workspace
                    end
                    local Wire = Instance.new("WireframeHandleAdornment")
                    Wire.Name, Wire.Adornee, Wire.Parent, Wire.ZIndex = "ChamsWireframe", Part, State.Folder, 1
                    Record.Wire = Wire
                    Record.Color, Record.Opacity, Record.Thickness = nil, nil, nil
                end
                local Wire, PartOpacity = Record.Wire, WireOpacity * PartAlpha
                Wire.Visible, Wire.AlwaysOnTop, Wire.Scale = PartAlpha > 0, false, Part.Size
                if Record.Color ~= WireColor or Record.Opacity ~= PartOpacity or Record.Thickness ~= Thickness then
                    Wire:Clear()
                    Wire.Color3, Wire.Transparency, Wire.Thickness = WireColor, 1 - PartOpacity, Thickness
                    Wire:AddLines(Lines)
                    Record.Color, Record.Opacity, Record.Thickness = WireColor, PartOpacity, Thickness
                end
            elseif Record.Wire then Record.Wire:Destroy(); Record.Wire = nil end
        end
    end
    function Self:Destroy()
        for Entry in self.Entries do self:Remove(Entry) end
    end
    return Self
end

function Functions.Visuals.CreateTracers(Draw)
    local Get, Identity = Functions.Config.Get, Functions.Utility.Identity
    local Modules = State.Modules
    local Self = {Alive = true, Seen = setmetatable({}, {__mode = "k"})}
    function Self:Process(Weapon, Data, Dual, Silenced)
        if not self.Alive or not Get("Bullet Tracer", false) or type(Data) ~= "table" or self.Seen[Data] then return end
        local Viewmodel = Weapon and Weapon.Viewmodel
        local Muzzle = Viewmodel and Viewmodel:FindFirstChild(Silenced and "SilencerMuzzle" or Dual and "LeftMuzzle" or "Muzzle", true)
        local Start = Muzzle and (Muzzle:IsA("Attachment") and Muzzle.WorldPosition or Muzzle.Position)
        local Count = 0
        for _, Bullet in Data do
            if Bullet and typeof(Bullet.EndPosition) == "Vector3" then
                Draw(typeof(Start) == "Vector3" and Start or Bullet.StartPosition, Bullet.EndPosition)
                Count += 1
            end
        end
        if Count > 0 then self.Seen[Data] = true end
    end
    local function Fallback(Weapon, Frame, Inaccuracy, Spread, Seed, Impacts, Hits)
        local Points = {}
        for _, Impact in Impacts or {} do
            if Impact and not Impact.Knife and typeof(Impact.Position) == "Vector3" then table.insert(Points, Impact.Position) end
        end
        for _, Group in Hits or {} do
            for _, Hit in Group[1] and Group or {Group} do
                if typeof(Hit.Position) == "Vector3" then table.insert(Points, Hit.Position) end
            end
        end
        local Data, Random = {}, Modules.Math.UniformRandomStream(Seed)
        local Range = Weapon.Data.Range or 2000
        for Index = 1, Weapon.Data.Bullets or 1 do
            local X, Y = Modules.Bullet.SpreadOffset(Weapon, Random, Inaccuracy, Spread, Index)
            local Direction = (Frame.LookVector + Frame.RightVector * X + Frame.UpVector * Y).Unit
            local Distance, Finish = 0, Frame.Position + Direction * Range
            for _, Point in Points do
                local Delta = Point - Frame.Position
                local Along = Delta:Dot(Direction)
                if Along > Distance and Along <= Range + 0.1 and (Delta - Direction * Along).Magnitude <= 0.1 then
                    Distance, Finish = Along, Point
                end
            end
            table.insert(Data, {StartPosition = Frame.Position, EndPosition = Finish})
        end
        return Data
    end
    if Modules.Bullet and type(Modules.Bullet.new) == "function" then
        Functions.Hooks.Add("Effects.Bullet", Modules.Bullet.new, function(Original, Character, Weapon, RenderTime, Seed, ...)
            local Simulation, LocalCharacter = Functions.Game.Simulation()
            if not Self.Alive or not Get("Bullet Tracer", false) or not Character or Character ~= LocalCharacter
                or Character.Simulation ~= Simulation or not Simulation or not Weapon then
                return Original(Character, Weapon, RenderTime, Seed, ...)
            end
            local Frame = Simulation:BuildShotCFrame(true)
            local Inaccuracy, Spread = Weapon:GetInaccuracy(Simulation), Weapon:GetSpread(Weapon)
            local Results = table.pack(Original(Character, Weapon, RenderTime, Seed, ...))
            Identity(function()
                local Traces = Results[2]
                local Alternate = Weapon.Data.AltFunction
                local Silenced = Alternate and Alternate.Name == "Silencer" and Weapon.Mode == 2
                local Dual = Weapon.Name == "Dual Berettas" and Weapon.Data.Ammo % 2 == 0
                if type(Traces) == "table" and next(Traces) then
                    Self:Process(Weapon, Traces, Dual, Silenced)
                else
                    local Data = Fallback(Weapon, Frame, Inaccuracy, Spread, Seed, Results[1], Results[3])
                    Self:Process(Weapon, Data, Dual, Silenced)
                    if type(Traces) == "table" then Self.Seen[Traces] = true end
                end
            end)
            return table.unpack(Results, 1, Results.n)
        end, {"Bullet Tracer"})
    end
    function Self:Destroy()
        self.Alive = false
        table.clear(self.Seen)
    end
    return Self
end
			
    local MIN_SIZE = Vector3.new(0.05,0.05,0.05)

    local RAIN_DEFAULT_COLOR = Color3.new(1,1,1)
    local RAIN_DEFAULT_TRANSPARENCY = 0
    local RAIN_DEFAULT_SPEEDRATIO = 1
    local RAIN_DEFAULT_INTENSITYRATIO = 1
    local RAIN_DEFAULT_LIGHTEMISSION = 0.05
    local RAIN_DEFAULT_LIGHTINFLUENCE = 0.9
    local RAIN_DEFAULT_DIRECTION = Vector3.new(0,-1,0)

    local RAIN_TRANSPARENCY_T1 = .25
    local RAIN_TRANSPARENCY_T2 = .75

    local RAIN_SCANHEIGHT = 1000

    local RAIN_EMITTER_DIM_DEFAULT = 40
    local RAIN_EMITTER_DIM_MAXFORWARD = 100
    local RAIN_EMITTER_UP_MODIFIER = 20

    local RAIN_SOUND_ASSET = "rbxassetid://1516791621"
    local RAIN_SOUND_BASEVOLUME = 0.2
    local RAIN_SOUND_FADEIN_TIME = 1
    local RAIN_SOUND_FADEOUT_TIME = 1

    local RAIN_STRAIGHT_ASSET = "rbxassetid://1822883048"
    local RAIN_STRAIGHT_ALPHA_LOW = 0.7
    local RAIN_STRAIGHT_SIZE = NumberSequence.new(10)
    local RAIN_STRAIGHT_LIFETIME = NumberRange.new(0.8)
    local RAIN_STRAIGHT_MAX_RATE = 600
    local RAIN_STRAIGHT_MAX_SPEED = 60

    local RAIN_TOPDOWN_ASSET = "rbxassetid://1822856633"
    local RAIN_TOPDOWN_ALPHA_LOW = 0.85
    local RAIN_TOPDOWN_SIZE = NumberSequence.new {
    	NumberSequenceKeypoint.new(0, 5.33, 2.75);
    	NumberSequenceKeypoint.new(1, 5.33, 2.75);
    }
    local RAIN_TOPDOWN_LIFETIME = NumberRange.new(0.8)
    local RAIN_TOPDOWN_ROTATION = NumberRange.new(0,360)
    local RAIN_TOPDOWN_MAX_RATE = 600
    local RAIN_TOPDOWN_MAX_SPEED = 60

    local RAIN_SPLASH_ASSET = "rbxassetid://1822856633"
    local RAIN_SPLASH_ALPHA_LOW = 0.6
    local RAIN_SPLASH_SIZE = NumberSequence.new {
    	NumberSequenceKeypoint.new(0, 0);
    	NumberSequenceKeypoint.new(.4, 3);
    	NumberSequenceKeypoint.new(1, 0);
    }
    local RAIN_SPLASH_LIFETIME = NumberRange.new(0.1, 0.15)
    local RAIN_SPLASH_ROTATION = NumberRange.new(0,360)
    local RAIN_SPLASH_NUM = 8
    local RAIN_SPLASH_CORRECTION_Y = .5
    local RAIN_SPLASH_STRAIGHT_OFFSET_Y = 50
    local RAIN_NOSPLASH_STRAIGHT_OFFSET_Y_MIN = 20
    local RAIN_NOSPLASH_STRAIGHT_OFFSET_Y_MAX = 100

    local RAIN_OCCLUDED_MINSPEED = 70
    local RAIN_OCCLUDED_MAXSPEED = 100
    local RAIN_OCCLUDED_SPREAD = Vector2.new(10,10)
    local RAIN_OCCLUDED_MAXINTENSITY = 2

    local RAIN_OCCLUDECHECK_OFFSET_Y = 500
    local RAIN_OCCLUDECHECK_OFFSET_XZ_MIN = -100
    local RAIN_OCCLUDECHECK_OFFSET_XZ_MAX = 100
    local RAIN_OCCLUDECHECK_SCAN_Y = 550

    local RAIN_UPDATE_PERIOD = 6

    local RAIN_VOLUME_SCAN_RADIUS = 35
    local RAIN_VOLUME_SCAN_GRID = {

    	Vector3.new(0.141421363, 0, 0.141421363);
    	Vector3.new(-0.141421363, 0, 0.141421363);
    	Vector3.new(-0.141421363, 0, -0.141421363);
    	Vector3.new(0.141421363, 0, -0.141421363);

    	Vector3.new(0.400000006, 0, 0);
    	Vector3.new(0.282842726, 0, 0.282842726);
    	Vector3.new(2.44929371e-17, 0, 0.400000006);
    	Vector3.new(-0.282842726, 0, 0.282842726);
    	Vector3.new(-0.400000006, 0, 4.89858741e-17);
    	Vector3.new(-0.282842726, 0, -0.282842726);
    	Vector3.new(-7.34788045e-17, 0, -0.400000006);
    	Vector3.new(0.282842726, 0, -0.282842726);

    	Vector3.new(0.600000024, 0, 0);
    	Vector3.new(0.485410213, 0, 0.352671146);
    	Vector3.new(0.185410202, 0, 0.570633948);
    	Vector3.new(-0.185410202, 0, 0.570633948);
    	Vector3.new(-0.485410213, 0, 0.352671146);
    	Vector3.new(-0.600000024, 0, 7.34788112e-17);
    	Vector3.new(-0.485410213, 0, -0.352671146);
    	Vector3.new(-0.185410202, 0, -0.570633948);
    	Vector3.new(0.185410202, 0, -0.570633948);
    	Vector3.new(0.485410213, 0, -0.352671146);

    	Vector3.new(0.772740662, 0, 0.207055241);
    	Vector3.new(0.565685451, 0, 0.565685451);
    	Vector3.new(0.207055241, 0, 0.772740662);
    	Vector3.new(-0.207055241, 0, 0.772740662);
    	Vector3.new(-0.565685451, 0, 0.565685451);
    	Vector3.new(-0.772740662, 0, 0.207055241);
    	Vector3.new(-0.772740662, 0, -0.207055241);
    	Vector3.new(-0.565685451, 0, -0.565685451);
    	Vector3.new(-0.207055241, 0, -0.772740662);
    	Vector3.new(0.207055241, 0, -0.772740662);
    	Vector3.new(0.565685451, 0, -0.565685451);
    	Vector3.new(0.772740662, 0, -0.207055241);
    }

    local CollisionMode = {
    	None = 0;
    	Whitelist = 1;
    	Blacklist = 2;
    	Function = 3;
    }

    local Services = State.Services
    local Workspace = Services.Workspace or game:GetService("Workspace")
    local Players = Services.Players or game:GetService("Players")
    local TweenService = Services.TweenService or game:GetService("TweenService")
    local RunService = Services.RunService or game:GetService("RunService")
    local SoundService = Services.SoundService or game:GetService("SoundService")
    local Destroyed = false
    local RadiusScale = 1
    local PersistentConnections, Tweens = {}, {}
    local function StopTween(Target)
        local Entry = Tweens[Target]
        if not Entry then return end
        Tweens[Target] = nil
        if Entry.Connection then Entry.Connection:Disconnect() end
        Entry.Tween:Cancel()
        Entry.Tween:Destroy()
    end
    local function PlayTween(Target, Info, Properties, Complete)
        if Destroyed then return end
        StopTween(Target)
        local Tween = TweenService:Create(Target, Info, Properties)
        local Entry = {Tween = Tween}
        Tweens[Target] = Entry
        Entry.Connection = Tween.Completed:Connect(function(Status)
            if Tweens[Target] ~= Entry then return end
            Tweens[Target] = nil
            Entry.Connection:Disconnect()
            Tween:Destroy()
            if not Destroyed and Status == Enum.PlaybackState.Completed and Complete then Complete() end
        end)
        Tween:Play()
    end
    local function Number(Value)
        return type(Value) == "number" and Value == Value and math.abs(Value) < math.huge
    end

    local SplashRatio = 1
    local GlobalModifier = Instance.new("NumberValue")
    GlobalModifier.Value = 1

    local connections = {}

    local disabled = true

    local rainDirection = RAIN_DEFAULT_DIRECTION

    local currentCeiling = nil
    local roofCheck = false

    local collisionMode = CollisionMode.None
    local collisionList = nil
    local collisionFunc = nil

    local straightLowAlpha = 1
    local topdownLowAlpha = 1
    local intensityOccludedRain = 0
    local numSplashes = 0
    local volumeTarget = 0

    local v3 = Vector3.new
    local NSK010 = NumberSequenceKeypoint.new(0, 1, 0)
    local NSK110 = NumberSequenceKeypoint.new(1, 1, 0)

    local volumeScanGrid = {}
    for _,v in pairs(RAIN_VOLUME_SCAN_GRID) do
    	table.insert(volumeScanGrid, v * RAIN_VOLUME_SCAN_RADIUS)
    end
    table.sort(volumeScanGrid, function(a,b)
    	return a.magnitude < b.magnitude
    end)

    local SoundGroup = Instance.new("SoundGroup")
    SoundGroup.Name = "__RainSoundGroup"
    SoundGroup.Volume = RAIN_SOUND_BASEVOLUME
    SoundGroup.Archivable = false

    local Sound = Instance.new("Sound")
    Sound.Name = "RainSound"
    Sound.Volume = volumeTarget
    Sound.SoundId = RAIN_SOUND_ASSET
    Sound.Looped = true
    Sound.SoundGroup = SoundGroup
    Sound.Parent = SoundGroup
    Sound.Archivable = false

    local Emitter do

    	Emitter = Instance.new("Part")
    	Emitter.Transparency = 1
    	Emitter.Anchored = true
    	Emitter.CanCollide = false
    Emitter.CanTouch = false
    Emitter.CanQuery = false
    Emitter.CastShadow = false
    	Emitter.Locked = false
    	Emitter.Archivable = false
    	Emitter.TopSurface = Enum.SurfaceType.Smooth
    	Emitter.BottomSurface = Enum.SurfaceType.Smooth
    	Emitter.Name = "__RainEmitter"
    	Emitter.Size = MIN_SIZE
    	Emitter.Archivable = false

    	local straight = Instance.new("ParticleEmitter")
    	straight.Name = "RainStraight"
    	straight.LightEmission = RAIN_DEFAULT_LIGHTEMISSION
    	straight.LightInfluence = RAIN_DEFAULT_LIGHTINFLUENCE
    	straight.Size = RAIN_STRAIGHT_SIZE
    	straight.Texture = RAIN_STRAIGHT_ASSET
    	straight.LockedToPart = true
    	straight.Enabled = false
    	straight.Lifetime = RAIN_STRAIGHT_LIFETIME
    	straight.Rate = RAIN_STRAIGHT_MAX_RATE
    	straight.Speed = NumberRange.new(RAIN_STRAIGHT_MAX_SPEED)
    	straight.EmissionDirection = Enum.NormalId.Bottom
    	straight.Parent = Emitter
    	straight.Orientation = Enum.ParticleOrientation.FacingCameraWorldUp

    	local topdown = Instance.new("ParticleEmitter")
    	topdown.Name = "RainTopDown"
    	topdown.LightEmission = RAIN_DEFAULT_LIGHTEMISSION
    	topdown.LightInfluence = RAIN_DEFAULT_LIGHTINFLUENCE
    	topdown.Size = RAIN_TOPDOWN_SIZE
    	topdown.Texture = RAIN_TOPDOWN_ASSET
    	topdown.LockedToPart = true
    	topdown.Enabled = false
    	topdown.Rotation = RAIN_TOPDOWN_ROTATION
    	topdown.Lifetime = RAIN_TOPDOWN_LIFETIME
    	topdown.Rate = RAIN_TOPDOWN_MAX_RATE
    	topdown.Speed = NumberRange.new(RAIN_TOPDOWN_MAX_SPEED)
    	topdown.EmissionDirection = Enum.NormalId.Bottom
    	topdown.Orientation = Enum.ParticleOrientation.FacingCamera
    	topdown.Parent = Emitter

    end

    local splashAttachments, rainAttachments do

    	splashAttachments = {}
    	rainAttachments = {}

    	for i = 1, RAIN_SPLASH_NUM do

    		local splashAttachment = Instance.new("Attachment")
    		splashAttachment.Name = "__RainSplashAttachment"
    		local splash = Instance.new("ParticleEmitter")
    		splash.LightEmission = RAIN_DEFAULT_LIGHTEMISSION
    		splash.LightInfluence = RAIN_DEFAULT_LIGHTINFLUENCE
    		splash.Size = RAIN_SPLASH_SIZE
    		splash.Texture = RAIN_SPLASH_ASSET
    		splash.Rotation = RAIN_SPLASH_ROTATION
    		splash.Lifetime = RAIN_SPLASH_LIFETIME
    		splash.Transparency = NumberSequence.new {
    			NSK010;
    			NumberSequenceKeypoint.new(RAIN_TRANSPARENCY_T1, RAIN_SPLASH_ALPHA_LOW, 0);
    			NumberSequenceKeypoint.new(RAIN_TRANSPARENCY_T2, RAIN_SPLASH_ALPHA_LOW, 0);
    			NSK110;
    		}
    		splash.Enabled = false
    		splash.Rate = 0
    		splash.Speed = NumberRange.new(0)
    		splash.Name = "RainSplash"
    		splash.Parent = splashAttachment
    		splashAttachment.Archivable = false
    		table.insert(splashAttachments, splashAttachment)

    		local rainAttachment = Instance.new("Attachment")
    		rainAttachment.Name = "__RainOccludedAttachment"
    		local straightOccluded = Emitter.RainStraight:Clone()
    		straightOccluded.Speed = NumberRange.new(RAIN_OCCLUDED_MINSPEED, RAIN_OCCLUDED_MAXSPEED)
    		straightOccluded.SpreadAngle = RAIN_OCCLUDED_SPREAD
    		straightOccluded.LockedToPart = false
    		straightOccluded.Enabled = false
    		straightOccluded.Parent = rainAttachment
    		local topdownOccluded = Emitter.RainTopDown:Clone()
    		topdownOccluded.Speed = NumberRange.new(RAIN_OCCLUDED_MINSPEED, RAIN_OCCLUDED_MAXSPEED)
    		topdownOccluded.SpreadAngle = RAIN_OCCLUDED_SPREAD
    		topdownOccluded.LockedToPart = false
    		topdownOccluded.Enabled = false
    		topdownOccluded.Parent = rainAttachment
    		rainAttachment.Archivable = false
    		table.insert(rainAttachments, rainAttachment)

    	end

    end

    local ignoreEmitterList = { Emitter }
    local collisionParameters = RaycastParams.new()
    collisionParameters.FilterType = Enum.RaycastFilterType.Exclude
    collisionParameters.RespectCanCollide = false

    local function Cast(RayValue, FilterType, Filter)
        collisionParameters.FilterType = FilterType
        collisionParameters.FilterDescendantsInstances = Filter
        local Hit = Workspace:Raycast(RayValue.Origin, RayValue.Direction, collisionParameters)
        if Hit then return Hit.Instance, Hit.Position, Hit.Normal, Hit.Material end
    end
    local raycastFunctions = {
        [CollisionMode.None] = function(RayValue, IgnoreCharacter)
            local Filter = {Emitter}
            local Character = IgnoreCharacter and Players.LocalPlayer and Players.LocalPlayer.Character
            if Character then table.insert(Filter, Character) end
            return Cast(RayValue, Enum.RaycastFilterType.Exclude, Filter)
        end,
        [CollisionMode.Blacklist] = function(RayValue)
            return Cast(RayValue, Enum.RaycastFilterType.Exclude, collisionList)
        end,
        [CollisionMode.Whitelist] = function(RayValue)
            return Cast(RayValue, Enum.RaycastFilterType.Include, collisionList)
        end,
        [CollisionMode.Function] = function(RayValue)
            local Filter = {Emitter}
            for _ = 1, 32 do
                local Part, Position, Normal, Material = Cast(RayValue, Enum.RaycastFilterType.Exclude, Filter)
                if not Part or collisionFunc(Part) then return Part, Position, Normal, Material end
                table.insert(Filter, Part)
            end
        end,
    }
    local raycast = raycastFunctions[collisionMode]

    local function connectLoop()

    	local rand = Random.new()

    	local inside = true
    	local frame = RAIN_UPDATE_PERIOD
    	local roofBlocked = false

    	table.insert(connections, RunService.RenderStepped:Connect(function()
    if Destroyed then return end
    local Camera = Workspace.CurrentCamera
    if not Camera then
        StopTween(Sound)
        Emitter.RainStraight.Enabled, Emitter.RainTopDown.Enabled = false, false
        Emitter.RainStraight:Clear()
        Emitter.RainTopDown:Clear()
        Emitter.Parent = nil
        Sound.Volume, volumeTarget = 0, 0
        return
    end
    if Emitter.Parent ~= Camera then
        Emitter.RainStraight:Clear()
        Emitter.RainTopDown:Clear()
        Emitter.Parent = Camera
    end

    			local t = math.abs(Workspace.CurrentCamera.CFrame.lookVector:Dot(rainDirection))

    			local center = Workspace.CurrentCamera.CFrame.p
    			local right = Workspace.CurrentCamera.CFrame.lookVector:Cross(-rainDirection)
    			right = right.magnitude > 0.001 and right.unit or rainDirection:Cross(math.abs(rainDirection.X) < 0.9 and v3(1, 0, 0) or v3(0, 0, 1)).unit
    			local forward = rainDirection:Cross(right).unit

    			Emitter.Size = v3(
    				RAIN_EMITTER_DIM_DEFAULT * RadiusScale,
    				RAIN_EMITTER_DIM_DEFAULT * RadiusScale,
    				(RAIN_EMITTER_DIM_DEFAULT + (1 - t)*(RAIN_EMITTER_DIM_MAXFORWARD - RAIN_EMITTER_DIM_DEFAULT)) * RadiusScale
    			)

    			Emitter.CFrame =
    				CFrame.new(
    					center.x, center.y, center.z,
    					right.x, -rainDirection.x, forward.x,
    					right.y, -rainDirection.y, forward.y,
    					right.z, -rainDirection.z, forward.z
    				)
    				+ (1 - t) * Workspace.CurrentCamera.CFrame.lookVector * Emitter.Size.Z/3
    				- t * rainDirection * RAIN_EMITTER_UP_MODIFIER * RadiusScale

    		local part = roofCheck and raycast(Ray.new(Workspace.CurrentCamera.CFrame.p, v3(0, RAIN_SCANHEIGHT, 0)), true)

    		if not roofCheck or (not currentCeiling or Workspace.CurrentCamera.CFrame.p.y <= currentCeiling) and not part then

    			if volumeTarget < 1 and not disabled then
    				volumeTarget = 1
    				PlayTween(Sound, TweenInfo.new(.5), {Volume = 1})
    			end

    			frame = RAIN_UPDATE_PERIOD

    			Emitter.RainStraight.Enabled = true
    			Emitter.RainTopDown.Enabled = true

    			inside = false
    			roofBlocked = false

    		else

    			Emitter.RainStraight.Enabled = false
    			Emitter.RainTopDown.Enabled = false

    			inside = true
    			if roofCheck and not roofBlocked then
    				roofBlocked = true
    				Emitter.RainStraight:Clear()
    				Emitter.RainTopDown:Clear()
    				for _, Attachment in rainAttachments do
    					Attachment.RainStraight:Clear()
    					Attachment.RainTopDown:Clear()
    				end
    				for _, Attachment in splashAttachments do Attachment.RainSplash:Clear() end
    				volumeTarget = 0.2
    				PlayTween(Sound, TweenInfo.new(0.3), {Volume = volumeTarget})
    			end

    		end

    	end))

    	local signal = RunService:IsRunning() and RunService.Stepped or RunService.RenderStepped
    	table.insert(connections, signal:Connect(function()
    if Destroyed or not Workspace.CurrentCamera then return end
    if roofCheck and inside then return end

    		frame = frame + 1

    		if frame >= RAIN_UPDATE_PERIOD then

    			local t = math.abs(Workspace.CurrentCamera.CFrame.lookVector:Dot(rainDirection))

    			local straightSequence = NumberSequence.new {
    				NSK010;
    				NumberSequenceKeypoint.new(RAIN_TRANSPARENCY_T1, (1 - t)*straightLowAlpha + t, 0);
    				NumberSequenceKeypoint.new(RAIN_TRANSPARENCY_T2, (1 - t)*straightLowAlpha + t, 0);
    				NSK110;
    			}
    			local topdownSequence = NumberSequence.new {
    				NSK010;
    				NumberSequenceKeypoint.new(RAIN_TRANSPARENCY_T1, t*topdownLowAlpha + (1 - t), 0);
    				NumberSequenceKeypoint.new(RAIN_TRANSPARENCY_T2, t*topdownLowAlpha + (1 - t), 0);
    				NSK110;
    			}

    			local mapped = Workspace.CurrentCamera.CFrame:inverse() * (Workspace.CurrentCamera.CFrame.p - rainDirection)
    			local straightRotation = NumberRange.new(math.deg(math.atan2(-mapped.x, mapped.y)))

    			if inside then

    				for _,v in pairs(rainAttachments) do
    					v.RainStraight.Transparency = straightSequence
    					v.RainStraight.Rotation = straightRotation
    					v.RainTopDown.Transparency = topdownSequence
    				end

    				if not disabled then

    					local volume = 0

    					if (not currentCeiling or Workspace.CurrentCamera.CFrame.p.y <= currentCeiling) then

    						local minDistance = RAIN_VOLUME_SCAN_RADIUS
    						local rayDirection = -rainDirection * RAIN_SCANHEIGHT

    						for i = 1, #volumeScanGrid do
    							if not raycast(Ray.new(Workspace.CurrentCamera.CFrame * volumeScanGrid[i], rayDirection), true) then
    								minDistance = volumeScanGrid[i].magnitude
    								break
    							end
    						end

    						volume = 1 - minDistance / RAIN_VOLUME_SCAN_RADIUS

    					end

    					if math.abs(volume - volumeTarget) > .01 then

    						volumeTarget = volume
    						PlayTween(Sound, TweenInfo.new(1), {Volume = volumeTarget})
    					end

    				end

    			else

    				Emitter.RainStraight.Transparency = straightSequence
    				Emitter.RainStraight.Rotation = straightRotation
    				Emitter.RainTopDown.Transparency = topdownSequence

    			end

    			frame = 0

    		end

    		local center = Workspace.CurrentCamera.CFrame.p
    		local right = Workspace.CurrentCamera.CFrame.lookVector:Cross(-rainDirection)
    		right = right.magnitude > 0.001 and right.unit or rainDirection:Cross(math.abs(rainDirection.X) < 0.9 and v3(1, 0, 0) or v3(0, 0, 1)).unit
    		local forward = rainDirection:Cross(right).unit
    		local transform = CFrame.new(
    			center.x, center.y, center.z,
    			right.x, -rainDirection.x, forward.x,
    			right.y, -rainDirection.y, forward.y,
    			right.z, -rainDirection.z, forward.z
    		)
    		local rayDirection = rainDirection * RAIN_OCCLUDECHECK_SCAN_Y

    		for i = 1, math.floor(numSplashes * (inside and 1 or SplashRatio)) do

    			local splashAttachment = splashAttachments[i]
    			local rainAttachment = rainAttachments[i]

    			local x = rand:NextNumber(RAIN_OCCLUDECHECK_OFFSET_XZ_MIN * RadiusScale, RAIN_OCCLUDECHECK_OFFSET_XZ_MAX * RadiusScale)
    			local z = rand:NextNumber(RAIN_OCCLUDECHECK_OFFSET_XZ_MIN * RadiusScale, RAIN_OCCLUDECHECK_OFFSET_XZ_MAX * RadiusScale)
    			local part, position, normal
                if inside or SplashRatio > 0 then part, position, normal = raycast(Ray.new(transform * v3(x, RAIN_OCCLUDECHECK_OFFSET_Y, z), rayDirection)) end

    			if part then

    				splashAttachment.Position = position + normal * RAIN_SPLASH_CORRECTION_Y
    				if SplashRatio > 0 then splashAttachment.RainSplash:Emit(1) end

    				if inside then

    					local corrected = position - rainDirection * RAIN_SPLASH_STRAIGHT_OFFSET_Y
    					if currentCeiling and corrected.Y > currentCeiling and rainDirection.Y < 0 then
    						corrected = corrected + rainDirection * (currentCeiling - corrected.Y) / rainDirection.Y
    					end
    					rainAttachment.CFrame = transform - transform.p + corrected
    					rainAttachment.RainStraight:Emit(intensityOccludedRain)
    					rainAttachment.RainTopDown:Emit(intensityOccludedRain)

    				end

    			elseif inside then

    				local corrected = transform * v3(x, rand:NextNumber(RAIN_NOSPLASH_STRAIGHT_OFFSET_Y_MIN, RAIN_NOSPLASH_STRAIGHT_OFFSET_Y_MAX), z)
    				if currentCeiling and corrected.Y > currentCeiling and rainDirection.Y < 0 then
    					corrected = corrected + rainDirection * (currentCeiling - corrected.Y) / rainDirection.Y
    				end
    				rainAttachment.CFrame = transform - transform.p + corrected
    				rainAttachment.RainStraight:Emit(intensityOccludedRain)
    				rainAttachment.RainTopDown:Emit(intensityOccludedRain)

    			end

    		end

    	end))

    end

    local function disconnectLoop()

    	if #connections > 0 then
    		for _,v in pairs(connections) do
    			v:Disconnect()
    		end
    		connections = {}
    	end
    end

    local function ClearParticles()
        Emitter.RainStraight.Enabled, Emitter.RainTopDown.Enabled = false, false
        Emitter.RainStraight:Clear()
        Emitter.RainTopDown:Clear()
        for _, Attachment in rainAttachments do
            Attachment.RainStraight:Clear()
            Attachment.RainTopDown:Clear()
        end
        for _, Attachment in splashAttachments do Attachment.RainSplash:Clear() end
    end
    local function disable()
        disconnectLoop()
        ClearParticles()
        Emitter.Size, Emitter.Parent = MIN_SIZE, nil
        for _, Attachment in rainAttachments do Attachment.Parent = nil end
        for _, Attachment in splashAttachments do Attachment.Parent = nil end
    end

    local function makeProperty(valueObjectClass, defaultValue, setter)
    	local valueObject = Instance.new(valueObjectClass)
    	if defaultValue then
    		valueObject.Value = defaultValue
    	end
    	table.insert(PersistentConnections, valueObject.Changed:Connect(function(Value)
            if not Destroyed then setter(Value) end
        end))
    	setter(valueObject.Value)
    	return valueObject
    end

    local Color = makeProperty("Color3Value", RAIN_DEFAULT_COLOR, function(value)

    	local value = ColorSequence.new(value)

    	Emitter.RainStraight.Color = value
    	Emitter.RainTopDown.Color = value

    	for _,v in pairs(splashAttachments) do
    		v.RainSplash.Color = value
    	end
    	for _,v in pairs(rainAttachments) do
    		v.RainStraight.Color = value
    		v.RainTopDown.Color = value
    	end

    end)

    local function updateTransparency(value)

    	local opacity = (1 - value) * (1 - GlobalModifier.Value)
    	local transparency = 1 - opacity

    	straightLowAlpha = RAIN_STRAIGHT_ALPHA_LOW * opacity + transparency
    	topdownLowAlpha = RAIN_TOPDOWN_ALPHA_LOW * opacity + transparency

    	local splashSequence = NumberSequence.new {
    		NSK010;
    		NumberSequenceKeypoint.new(RAIN_TRANSPARENCY_T1, opacity*RAIN_SPLASH_ALPHA_LOW + transparency, 0);
    		NumberSequenceKeypoint.new(RAIN_TRANSPARENCY_T2, opacity*RAIN_SPLASH_ALPHA_LOW + transparency, 0);
    		NSK110;
    	}

    	for _,v in pairs(splashAttachments) do
    		v.RainSplash.Transparency = splashSequence
    	end

    end
    local Transparency = makeProperty("NumberValue", RAIN_DEFAULT_TRANSPARENCY, updateTransparency)
    table.insert(PersistentConnections, GlobalModifier.Changed:Connect(function()
        if not Destroyed then updateTransparency(Transparency.Value) end
    end))

    local SpeedRatio = makeProperty("NumberValue", RAIN_DEFAULT_SPEEDRATIO, function(value)

    	Emitter.RainStraight.Speed = NumberRange.new(value * RAIN_STRAIGHT_MAX_SPEED)
    	Emitter.RainTopDown.Speed = NumberRange.new(value * RAIN_TOPDOWN_MAX_SPEED)

    end)

    local IntensityRatio = makeProperty("NumberValue", RAIN_DEFAULT_INTENSITYRATIO, function(value)

    	Emitter.RainStraight.Rate = RAIN_STRAIGHT_MAX_RATE * value
    	Emitter.RainTopDown.Rate = RAIN_TOPDOWN_MAX_RATE * value

    	intensityOccludedRain = math.ceil(RAIN_OCCLUDED_MAXINTENSITY * value)
    	numSplashes = math.floor(RAIN_SPLASH_NUM * value)

    end)

    local LightEmission = makeProperty("NumberValue", RAIN_DEFAULT_LIGHTEMISSION, function(value)

    	Emitter.RainStraight.LightEmission = value
    	Emitter.RainTopDown.LightEmission = value

    	for _,v in pairs(rainAttachments) do
    		v.RainStraight.LightEmission = value
    		v.RainTopDown.LightEmission = value
    	end
    	for _,v in pairs(splashAttachments) do
    		v.RainSplash.LightEmission = value
    	end

    end)

    local LightInfluence = makeProperty("NumberValue", RAIN_DEFAULT_LIGHTINFLUENCE, function(value)

    	Emitter.RainStraight.LightInfluence = value
    	Emitter.RainTopDown.LightInfluence = value

    	for _,v in pairs(rainAttachments) do
    		v.RainStraight.LightInfluence = value
    		v.RainTopDown.LightInfluence = value
    	end
    	for _,v in pairs(splashAttachments) do
    		v.RainSplash.LightInfluence = value
    	end

    end)

    local RainDirection = makeProperty("Vector3Value", RAIN_DEFAULT_DIRECTION, function(value)
    	if value.magnitude > 0.001 then
    		rainDirection = value.unit
    	end
    end)

    local Rain = {}

    Rain.CollisionMode = CollisionMode

    local function ValidTween(Info)
        return Info == nil or typeof(Info) == "TweenInfo"
    end
    local function SetValue(Target, Key, Value, Info)
        StopTween(Target)
        if Info then PlayTween(Target, Info, {[Key] = Value}) else Target[Key] = Value end
    end
    function Rain:Enable(Info)
        if Destroyed or not ValidTween(Info) then return end
        disconnectLoop()
        StopTween(GlobalModifier)
        StopTween(Sound)
        disabled = false
        volumeTarget = 0
        Sound.Volume = 0
        Emitter.Parent = Workspace.CurrentCamera
        Emitter.RainStraight.Enabled, Emitter.RainTopDown.Enabled = false, false
        for Index = 1, RAIN_SPLASH_NUM do
            splashAttachments[Index].Parent = Workspace.Terrain
            rainAttachments[Index].Parent = Workspace.Terrain
        end
        SoundGroup.Parent = SoundService
        SetValue(GlobalModifier, "Value", 0, Info)
        if not Sound.Playing then
            Sound:Play()
            if Sound.TimeLength > 0 then Sound.TimePosition = math.random() * Sound.TimeLength end
        end
        connectLoop()
    end
    function Rain:Disable(Info)
        if Destroyed or not ValidTween(Info) then return end
        disabled = true
        volumeTarget = 0
        disconnectLoop()
        StopTween(GlobalModifier)
        StopTween(Sound)
        if Info then
            PlayTween(GlobalModifier, Info, {Value = 1}, disable)
            PlayTween(Sound, Info, {Volume = 0}, function() Sound:Stop() end)
        else
            GlobalModifier.Value = 1
            Sound.Volume = 0
            Sound:Stop()
            disable()
        end
    end
    function Rain:SetColor(Value, Info)
        if Destroyed or typeof(Value) ~= "Color3" or not ValidTween(Info) then return end
        SetValue(Color, "Value", Value, Info)
    end
    local function RatioSetter(Target)
        local function Setter(_, Value, Info)
            if Destroyed or not Number(Value) or not ValidTween(Info) then return end
            SetValue(Target, "Value", math.clamp(Value, 0, 1), Info)
        end
        return Setter
    end
    Rain.SetTransparency = RatioSetter(Transparency)
    Rain.SetSpeedRatio = RatioSetter(SpeedRatio)
    Rain.SetIntensityRatio = RatioSetter(IntensityRatio)
    Rain.SetLightEmission = RatioSetter(LightEmission)
    Rain.SetLightInfluence = RatioSetter(LightInfluence)
    function Rain:SetVolume(Value, Info)
        if Destroyed or not Number(Value) or not ValidTween(Info) then return end
        SetValue(SoundGroup, "Volume", math.clamp(Value, 0, 1), Info)
    end
    function Rain:SetDirection(Value, Info)
        if Destroyed or typeof(Value) ~= "Vector3" or not ValidTween(Info) then return end
        if not Number(Value.Magnitude) or Value.Magnitude < 0.001 then return end
        SetValue(RainDirection, "Value", Value.Unit, Info)
    end
    function Rain:SetCeiling(Value)
        if Destroyed or Value ~= nil and not Number(Value) then return end
        currentCeiling = Value
    end
    function Rain:SetStraightTexture(Value)
        if Destroyed or type(Value) ~= "string" then return end
        Emitter.RainStraight.Texture = Value
        for _, Attachment in rainAttachments do Attachment.RainStraight.Texture = Value end
    end
    function Rain:SetTopDownTexture(Value)
        if Destroyed or type(Value) ~= "string" then return end
        Emitter.RainTopDown.Texture = Value
        for _, Attachment in rainAttachments do Attachment.RainTopDown.Texture = Value end
    end
    function Rain:SetSplashTexture(Value)
        if Destroyed or type(Value) ~= "string" then return end
        for _, Attachment in splashAttachments do Attachment.RainSplash.Texture = Value end
    end
    function Rain:SetSoundId(Value)
        if Destroyed or type(Value) ~= "string" then return end
        Sound.SoundId = Value
    end
    function Rain:SetCollisionMode(Mode, Value)
        if Destroyed or not raycastFunctions[Mode] then return end
        local Filter, Test
        if Mode == CollisionMode.Blacklist or Mode == CollisionMode.Whitelist then
            if typeof(Value) == "Instance" then Filter = {Value}
            elseif type(Value) == "table" then
                Filter = {}
                for _, Object in Value do
                    if typeof(Object) ~= "Instance" then return end
                    table.insert(Filter, Object)
                end
            else return end
            if Mode == CollisionMode.Blacklist then table.insert(Filter, Emitter) end
        elseif Mode == CollisionMode.Function then
            if type(Value) ~= "function" then return end
            Test = Value
        end
        collisionMode, collisionList, collisionFunc = Mode, Filter, Test
        raycast = raycastFunctions[Mode]
    end
    function Rain:SetRoofCheck(Value)
        if Destroyed then return end
        roofCheck = Value == true
    end
    function Rain:SetSplashRatio(Value)
        if Destroyed or not Number(Value) then return end
        SplashRatio = math.clamp(Value, 0, 1)
        if SplashRatio == 0 then
            for _, Attachment in splashAttachments do Attachment.RainSplash:Clear() end
        end
    end
    function Rain:SetRadius(Value)
        if Destroyed or not Number(Value) then return end
        RadiusScale = math.clamp(Value, 24, 80) / 48
    end
    function Rain:Destroy()
        if Destroyed then return end
        Destroyed, disabled = true, true
        disconnectLoop()
        for Target in Tweens do StopTween(Target) end
        for _, Connection in PersistentConnections do Connection:Disconnect() end
        table.clear(PersistentConnections)
        Sound:Stop()
        ClearParticles()
        for _, Attachment in splashAttachments do Attachment:Destroy() end
        for _, Attachment in rainAttachments do Attachment:Destroy() end
        Emitter:Destroy()
        SoundGroup:Destroy()
        for _, Value in {GlobalModifier, Color, Transparency, SpeedRatio, IntensityRatio, LightEmission, LightInfluence, RainDirection} do Value:Destroy() end
        table.clear(splashAttachments)
        table.clear(rainAttachments)
    end
    Rain.Notice = Notice
    Rain.License = License
    return Rain
end

do
    local Config, Utility = Functions.Config, Functions.Utility
    local Identity, Connect, Notify = Utility.Identity, Utility.Connect, Utility.Notify
    local Color = Config.Color
    local function Get(Name, Default)
        local WeaponName = Name:match('^(.*) Skin$')
        if WeaponName then
            local Entry = State.UI.Skins:GetSkin(WeaponName)
            if Entry then return Entry.Skin.Name end
        end
        return Config.Get(Name, Default)
    end
    local Managers = State.Shared:WaitForChild("Managers")
    local WeaponManager = Managers:WaitForChild("WeaponManager")
    local SkinManager = Managers:WaitForChild("SkinManager")
    local Self = {Available = {}, Types = {}, KnifeModels = {"Default"}, Original = setmetatable({}, {__mode = "k"}), Replacement = nil, Errors = {}}
    local CatalogueOkay, Catalogue = Identity(function()
        return State.Modules.SkinManager.GetAllSkins and State.Modules.SkinManager.GetAllSkins() or {}
    end, 2)
    Self.CatalogueLoaded = CatalogueOkay and type(Catalogue) == "table"
        and type(State.Modules.SkinManager.GetAllSkins) == "function"
    Self.CatalogueError = not CatalogueOkay and tostring(Catalogue):sub(1, 300) or nil
    Catalogue = CatalogueOkay and type(Catalogue) == "table" and Catalogue or {}
    Self.Updates = 0
    for _, Category in SkinManager:GetChildren() do
        if Category:IsA("Folder") and Category.Name ~= "Arms" and Category.Name ~= "Misc" then
            table.insert(Self.Types, Category.Name)
            Self.Available[Category.Name] = {}
            for _, Weapon in Category:GetChildren() do
                local Skins = {}
                if Catalogue[Weapon.Name] then
                    for Name in Catalogue[Weapon.Name] do table.insert(Skins, Name) end
                else
                    for _, Skin in Weapon:GetChildren() do if Skin:IsA("Configuration") then table.insert(Skins, Skin.Name) end end
                end
                table.sort(Skins)
                Self.Available[Category.Name][Weapon.Name] = Skins
            end
        end
    end
    table.sort(Self.Types)
    local Knives = WeaponManager:WaitForChild("Knives")
    for _, Knife in Knives:GetChildren() do if Knife:IsA("ModuleScript") then table.insert(Self.KnifeModels, Knife.Name) end end
    table.sort(Self.KnifeModels)
    if State.UI.KnifeModel then State.UI.KnifeModel:SetOptions(Self.KnifeModels) end
    local Definitions = Functions.Cosmetics.Catalog
    local Categories = {}
    for _, Definition in Definitions do
        local Category = Categories[Definition.Category]
        if not Category then Category = State.UI.Skins:AddCategory({Name = Definition.Category}); Categories[Definition.Category] = Category end
        local NativeWeapon = State.Modules.WeaponManager.Get(Definition.Name)
        local Information = NativeWeapon and NativeWeapon.GuiInformation
        local Icon = Information and (Information.IconHorizontal or Information.Icon) or Definition.Icon
        local Skins = {}
        local NativeSkins = Catalogue[Definition.Name]
        local function Add(Name, Data)
            if Name == "Stock" then return end
            local Thumbnail = Data.Thumbnail or Data.Image
            table.insert(Skins, {Name = Name, Rarity = Data.Rarity or "Stock", Image = Thumbnail and "rbxassetid://" .. tostring(Thumbnail) or nil})
        end
        if NativeSkins then for Name, Data in NativeSkins do Add(Name, Data) end
        else for _, Data in Definition.Skins do Add(Data.Name, Data) end end
        table.sort(Skins, function(A, B) return A.Name < B.Name end)
        local WeaponName = Definition.Name
        Category:AddWeapon({Name = WeaponName, Icon = Icon and "rbxassetid://" .. tostring(Icon) or nil, Skins = Skins, Elements = function(Container)
            local Prefix = "Skin " .. WeaponName .. " "
            local Emissive = Container:AddToggle({Text = "Emissive", Flag = Prefix .. "Emissive", Default = false})
            Emissive:AddColorPicker({Text = "Tint", Flag = Prefix .. "Tint", Default = Color3.new(1, 1, 1)})
            Emissive:Settings():AddSlider({Text = "Strength", Flag = Prefix .. "Strength", Min = 0, Max = 20, Default = 1, Increment = 0.1})
        end})
    end
    local function Emissive(Name, Default)
        local Entry = State.UI.Skins:GetSkin(Name)
        local Settings = Entry and Entry.Settings
        local Prefix = "Skin " .. Name .. " "
        if not Settings or not Settings[Prefix .. "Emissive"] then return Default end
        local Tint = Settings[Prefix .. "Tint"]
        if type(Tint) == "table" then Tint = Tint.Color end
        if type(Tint) == "string" then local Okay, Value = pcall(Color3.fromHex, Tint); Tint = Okay and Value or nil end
        return {Tint = typeof(Tint) == "Color3" and Tint or Color3.new(1, 1, 1), Strength = math.clamp(tonumber(Settings[Prefix .. "Strength"]) or 1, 0, 20)}
    end

    local function ClearSurface(Part)
        for _, Child in Part:GetChildren() do
            if Child:IsA("SurfaceAppearance") then Child:Destroy() end
        end
    end
    local function SaveParts(Model, Parts)
        if State.LocalChams then State.LocalChams:RestoreModel(Model) end
        Parts = Parts or {}
        for _, Part in Model:GetDescendants() do
            if Part:IsA("MeshPart") and not Parts[Part] then
                local Surfaces = {}
                for _, Child in Part:GetChildren() do
                    if Child:IsA("SurfaceAppearance") then table.insert(Surfaces, Child:Clone()) end
                end
                Parts[Part] = {Texture = Part.TextureID, Surfaces = Surfaces}
            end
        end
        return Parts
    end
    local function RestorePart(Part, Original)
        if State.LocalChams then State.LocalChams:RestoreModel(Part) end
        ClearSurface(Part)
        Part.TextureID = Original.Texture
        local Surfaces = {}
        for _, Surface in Original.Surfaces do
            local Clone = Surface:Clone()
            Clone.Parent = Part
            table.insert(Surfaces, Clone)
        end
        return {Texture = Part.TextureID, Surfaces = Surfaces}
    end
    local function RestoreParts(Parts)
        for Part, Original in Parts do
            if Part.Parent then RestorePart(Part, Original) end
            for _, Surface in Original.Surfaces do Surface:Destroy() end
        end
    end
    local function GetSkin(Name, Skin)
        local Manager = State.Modules.SkinManager
        if not Manager or type(Manager.GetWeaponSkin) ~= "function" then
            Self.LookupError = "Skin lookup API is unavailable"
            return nil
        end
        local Okay, Data = pcall(Manager.GetWeaponSkin, Name, Skin)
        if not Okay then Self.LookupError = tostring(Data):sub(1, 300) end
        return Okay and Data or nil
    end
    function Self:ResolveSkin(Name, Selected)
        if Selected and GetSkin(Name, Selected) then return Selected end
        if Selected == nil or Selected == "Stock" or Selected == "Default" then
            if GetSkin(Name, "Stock") then return "Stock" end
            if GetSkin(Name, "Vanilla") then return "Vanilla" end
        end
        return Selected
    end
    State.SkinController = Self
    local function ApplyModel(Model, Name, Skin, Parts, Emissive)
        local Data = GetSkin(Name, Skin)
        if not Data then return false end
        SaveParts(Model, Parts)
        local Targets = {}
        for _, Part in Model:GetDescendants() do
            if Part:IsA("MeshPart") then
                local Surface = Data.Assets and Data.Assets[Part.Name]
                local Texture = Data.WorldModel and Data.WorldModel[Part.Name]
                if Surface and Surface:IsA("SurfaceAppearance") then
                    Targets[Part] = {Surface = Surface}
                elseif Texture and Texture:IsA("StringValue") then
                    Targets[Part] = {Texture = Texture.Value}
                end
            end
        end
        if not next(Targets) then return false end
        local Applied = {}
        for Part, Original in Parts do
            if Part.Parent and not Targets[Part] then Applied[Part] = RestorePart(Part, Original) end
        end
        for Part, Target in Targets do
            if Target.Surface then
                ClearSurface(Part)
                Part.TextureID = ""
                local Clone = Target.Surface:Clone()
                if Emissive then
                    Clone.EmissiveTint, Clone.EmissiveStrength = Emissive.Tint, Emissive.Strength
                end
                if Data.AnimatedTint and State.Modules.Viewmodel.ApplyAnimatedTint then
                    pcall(State.Modules.Viewmodel.ApplyAnimatedTint, Clone, Data.AnimatedTint)
                end
                Clone.Parent = Part
                Applied[Part] = {Texture = "", Surfaces = {Clone}}
            else
                ClearSurface(Part)
                Part.TextureID = Target.Texture
                Applied[Part] = {Texture = Target.Texture, Surfaces = {}}
            end
        end
        return true, Applied
    end
    local function Matches(Record)
        if not Record.Applied or not next(Record.Applied) then return false end
        if Record.Model then
            for _, Part in Record.Model:GetDescendants() do
                if Part:IsA("MeshPart") and not Record.Applied[Part] then return false end
            end
        end
        for Part, Expected in Record.Applied do
            local Chams = State.LocalChams
            local Texture = Chams and Chams:ReadOriginal(Part, "TextureID") or Part.TextureID
            if not Part.Parent or Texture ~= Expected.Texture then return false end
            for _, Surface in Expected.Surfaces do
                local Parent = Chams and Chams:ReadOriginal(Surface, "Parent") or Surface.Parent
                if Parent ~= Part then return false end
            end
            local Count = Chams and Chams:SurfaceCount(Part) or 0
            if not Chams then
                for _, Child in Part:GetChildren() do if Child:IsA("SurfaceAppearance") then Count += 1 end end
            end
            if Count ~= #Expected.Surfaces then return false end
        end
        return true
    end
    local function RestoreWeapon(Weapon, Record)
        RestoreParts(Record.Parts)
        if Weapon and Weapon.Viewmodel == Record.Viewmodel and Record.Model.Parent == Record.Viewmodel
            and Weapon.Skin == Record.Selected then
            Weapon.Skin = Record.Skin
            Weapon.AnimatedTintAction = nil
        end
        Self.Original[Weapon] = nil
    end
    local function Report(Key, Message)
        Self.LastError = tostring(Message):sub(1, 300)
        if Self.Errors[Key] then return end
        Self.Errors[Key] = true
        if State.Notify then Notify(Message, "Warning") end
    end
    function Self:Diagnostics()
        local Result = {
            Enabled = Get("Skin Changer", false), Updates = self.Updates,
            CatalogueLoaded = self.CatalogueLoaded, Categories = #self.Types,
            CatalogueError = self.CatalogueError,
            KnifeModel = Get("Knife Model", "Default"), LastError = self.LastError,
            LookupError = self.LookupError,
        }
        local Okay, Error = Identity(function()
            local Manager = State.Modules.Weapon
            local Weapon = Manager.GetCurrentWeapon()
            local Count = 0
            for _, Item in Manager.GetWeaponInventory() or {} do if Item then Count += 1 end end
            Result.InventoryWeapons = Count
            Result.HasCurrentWeapon = Weapon ~= nil
            Result.HasViewmodel = Weapon ~= nil and Weapon.Viewmodel ~= nil
            if Weapon then
                Result.Weapon = tostring(Weapon.Name)
                Result.SelectedSkin = Get(Weapon.Name .. " Skin", "Stock")
                Result.CurrentSkin = Weapon.Skin
                Result.ViewmodelParented = Weapon.Viewmodel ~= nil and Weapon.Viewmodel.Parent ~= nil
                local Record = self.Original[Weapon]
                Result.AppliedSkin = Record and Record.Selected
                Result.AppliedMatches = Record ~= nil and Matches(Record)
            end
            local Replacement = self.Replacement
            if Replacement then Result.Replacement = {Name = Replacement.Name, Skin = Replacement.Skin} end
        end, 2)
        if not Okay then Result.ReadError = tostring(Error):sub(1, 300) end
        return Result
    end
    local function DestroyRig(Rig)
        local Model = Rig.Viewmodel
        if State.LocalChams and Model then State.LocalChams:RestoreModel(Model) end
        pcall(State.Modules.Viewmodel.Destroy, Rig)
        if Model then pcall(Model.Destroy, Model) end
    end
    local function Rebuild(Weapon, Name, Skin)
        local Viewmodel = State.Modules.Viewmodel
        if type(Viewmodel.new) ~= "function" or type(Viewmodel.Destroy) ~= "function" then return false end
        local Before = table.clone(Weapon)
        local Model = Before.Viewmodel
        if not Model then return false end
        local Failed = Self.FailedBuild
        if Failed and Failed.Weapon == Weapon and Failed.Model == Model and Failed.Name == Name and Failed.Skin == Skin then return false end
        local Animations = {}
        for AnimationName, Animator in Before.Animators or {} do
            if type(Animator.Track) == "table" then
                Animations[AnimationName] = {Track = table.clone(Animator.Track), Playing = Animator.Playing,
                    Direction = Animator.Direction, Speed = Animator.Speed}
            end
        end
        local Team = State.LocalPlayer:GetAttribute("Team")
        local Gloves
        local Loadout = State.LocalPlayer:GetAttribute("WeaponLoadout")
        if Loadout then
            local Okay, Data = pcall(State.Services.HttpService.JSONDecode, State.Services.HttpService, Loadout)
            if Okay and Data and Data[Team] then Gloves = Data[Team]["16"] end
        end
        local Options = {
            Team = Team, Gloves = Gloves, Scale = Model:GetScale(), CFrame = Model:GetPivot(),
        }
        Weapon.Name, Weapon.Skin = Name, Skin
        local Okay, Error = Identity(function() Viewmodel.new(Weapon, Options) end, 2)
        Weapon.Name, Weapon.Skin = Before.Name, Before.Skin
        if not Okay or Weapon.Viewmodel == Model or not Weapon.Viewmodel then
            if Weapon.Viewmodel and Weapon.Viewmodel ~= Model then
                local Partial = table.clone(Weapon)
                if Partial.Animators == Before.Animators then Partial.Animators = {} end
                DestroyRig(Partial)
            end
            for Key in Weapon do Weapon[Key] = nil end
            for Key, Value in Before do Weapon[Key] = Value end
            Self.FailedBuild = {Weapon = Weapon, Model = Model, Name = Name, Skin = Skin}
            Report(Name, "Could Not Load " .. Name .. ": " .. tostring(Error))
            return false
        end
        local Parent = Model.Parent
        DestroyRig(Before)
        Self.FailedBuild = nil
        Weapon.CurrentAnimator, Weapon.CurrentAnimationName = nil, nil
        local Current = Weapon == State.Modules.Weapon.GetCurrentWeapon()
        if Current and Viewmodel.RestoreScale then Viewmodel.RestoreScale(Weapon) end
        if Viewmodel.SetVisible then
            local Visible = Current and Before.ViewmodelIsVisible == true
            Weapon.ViewmodelIsVisible = not Visible
            Viewmodel.SetVisible(Weapon, Visible)
        end
        local function ResumeAnimation(AnimationName, State, IsCurrent)
            local TargetName = AnimationName
            local Animator = Weapon.Animators and Weapon.Animators[TargetName]
            if not Animator and IsCurrent then
                TargetName = AnimationName:gsub("%d+$", "")
                Animator = Weapon.Animators and Weapon.Animators[TargetName]
            end
            if Animator and type(Animator.Track) == "table" then
                for Key, Value in State.Track do Animator.Track[Key] = Value end
                if State.Direction ~= nil then Animator.Direction = State.Direction end
                if State.Speed ~= nil then Animator.Speed = State.Speed end
                if Current and State.Playing and type(Animator.Play) == "function" then Animator:Play() end
                if IsCurrent then
                    Weapon.CurrentAnimator, Weapon.CurrentAnimationName = Animator, TargetName
                end
            end
        end
        for AnimationName, State in Animations do
            if AnimationName ~= Before.CurrentAnimationName then ResumeAnimation(AnimationName, State, false) end
        end
        local ActiveState = Animations[Before.CurrentAnimationName]
        if ActiveState then ResumeAnimation(Before.CurrentAnimationName, ActiveState, true) end
        Weapon.Viewmodel.Parent = Parent
        return true
    end
    local function RestoreKnife()
        local Replacement = Self.Replacement
        if not Replacement then return end
        local Weapon = Replacement.Weapon
        if Weapon.Viewmodel == Replacement.Viewmodel then
            if not Rebuild(Weapon, Weapon.Name, Replacement.OriginalSkin) then return false end
        else
            DestroyRig(Replacement.State)
        end
        Self.Replacement = nil
        return true
    end
    local function ReplaceKnife(Weapon, Name, Skin)
        local Viewmodel = Weapon.Viewmodel
        if not Viewmodel then return end
        local Previous = Self.Replacement
        if Previous and Previous.Weapon == Weapon and Previous.Viewmodel == Viewmodel
            and Previous.Name == Name and Previous.Skin == Skin and not Previous.Dirty and Matches(Previous) then return end
        if Previous and (Previous.Weapon ~= Weapon or Previous.Viewmodel ~= Viewmodel) then
            if RestoreKnife() == false then return end
            Previous = nil
        end
        if not Knives:FindFirstChild(Name) or not GetSkin(Name, Skin) then
            Report(Name .. Skin, "Knife Model Or Skin Is Unavailable")
            return
        end
        local OriginalSkin = Previous and Previous.OriginalSkin or Weapon.Skin or "Stock"
        if not Rebuild(Weapon, Name, Skin) then return end
        local Data = GetSkin(Name, Skin)
        local Model = Weapon.Viewmodel:FindFirstChild(Data.ModelName or "Weapon") or Weapon.Viewmodel:FindFirstChild("Weapon")
        local Parts = Model and SaveParts(Model)
        local Applied, Surfaces = false, nil
        if Model then Applied, Surfaces = ApplyModel(Model, Name, Skin, Parts, Emissive(Name, Weapon.Emissive)) end
        if Model and not Applied then
            Surfaces = {}
            for _, Part in Model:GetDescendants() do
                if Part:IsA("MeshPart") then
                    local Current = {}
                    for _, Surface in Part:GetChildren() do
                        if Surface:IsA("SurfaceAppearance") then table.insert(Current, Surface) end
                    end
                    Surfaces[Part] = {Texture = Part.TextureID, Surfaces = Current}
                end
            end
        end
        if Parts then for _, Part in Parts do for _, Surface in Part.Surfaces do Surface:Destroy() end end end
        Self.Replacement = {Weapon = Weapon, Name = Name, Skin = Skin, OriginalSkin = OriginalSkin,
            Viewmodel = Weapon.Viewmodel, Model = Model, Applied = Surfaces, State = table.clone(Weapon)}
    end
    local function RestoreSkins()
        RestoreKnife()
        for Weapon, Record in Self.Original do RestoreWeapon(Weapon, Record) end
    end
    function Self:Refresh()
        for _, Record in self.Original do Record.Dirty = true end
        if self.Replacement then self.Replacement.Dirty = true end
    end
    State.UI.Skins:OnChanged(function() Self:Refresh() end)
    local function Update()
        Self.Updates += 1
        if not Get("Skin Changer", false) then
            if next(Self.Original) or Self.Replacement then RestoreSkins() end
            return
        end
        local Inventory = table.clone(State.Modules.Weapon.GetWeaponInventory() or {})
        local Current = State.Modules.Weapon.GetCurrentWeapon()
        if Current then Inventory.Current = Current end
        local ModelName = Get("Knife Model", "Default")
        local Knife = Current and Current.Data and Current.Data.Type == "Melee" and Current or nil
        if not Knife then
            for _, Weapon in Inventory do
                if Weapon and Weapon.Data and Weapon.Data.Type == "Melee" and Weapon.Viewmodel then Knife = Weapon; break end
            end
        end
        local CustomKnife = Knife and ModelName ~= "Default"
        if Self.Replacement and (not CustomKnife or Self.Replacement.Weapon ~= Knife
            or Self.Replacement.Viewmodel ~= Knife.Viewmodel) then RestoreKnife() end
        local Seen = {}
        for _, Weapon in Inventory do
            if Weapon and Weapon.Name and Weapon.Viewmodel and not Seen[Weapon] then
                Seen[Weapon] = true
                local Okay, Error = pcall(function()
                    local Record = Self.Original[Weapon]
                    if CustomKnife and Weapon == Knife then
                        if Record then RestoreWeapon(Weapon, Record) end
                    elseif not State.UI.Skins:GetSkin(Weapon.Name) then
                        if Record then RestoreWeapon(Weapon, Record) end
                    else
                        local Selected = Self:ResolveSkin(Weapon.Name, Get(Weapon.Name .. " Skin", "Stock"))
                        local Data = GetSkin(Weapon.Name, Selected)
                        local Model = Weapon.Viewmodel:FindFirstChild(Data and Data.ModelName or "Weapon") or Weapon.Viewmodel:FindFirstChild("Weapon")
                        if Record and (Record.Viewmodel ~= Weapon.Viewmodel or Record.Model ~= Model) then
                            RestoreWeapon(Weapon, Record)
                            Record = nil
                        end
                        if Model and Selected and (not Record or Record.Selected ~= Selected or Record.Dirty or not Matches(Record)) and Data then
                            if not Record then
                                Record = {Viewmodel = Weapon.Viewmodel, Model = Model, Skin = Weapon.Skin or "Stock", Parts = SaveParts(Model)}
                                Self.Original[Weapon] = Record
                            end
                            local Applied, Surfaces = ApplyModel(Model, Weapon.Name, Selected, Record.Parts, Emissive(Weapon.Name, Weapon.Emissive))
                            if Applied then
                                Record.Selected = Selected
                                Record.Dirty = false
                                Record.Applied = Surfaces
                                Weapon.Skin = Selected
                                Weapon.AnimatedTintAction = nil
                            else
                                Report(Weapon.Name .. Selected, "No Matching Meshes For " .. Weapon.Name .. " " .. Selected)
                            end
                        elseif Record and Record.Selected == Selected and Matches(Record) then
                            Weapon.Skin = Selected
                        elseif not Data then
                            Report(Weapon.Name .. tostring(Selected), "Skin Is Unavailable For " .. Weapon.Name)
                        end
                    end
                end)
                if not Okay then Report(Weapon.Name, "Could Not Apply " .. Weapon.Name .. " Skin: " .. tostring(Error)) end
            end
        end
        if CustomKnife then
            local Selected = Self:ResolveSkin(ModelName, Get(ModelName .. " Skin", "Stock"))
            local Okay, Error = pcall(ReplaceKnife, Knife, ModelName, Selected)
            if not Okay then Report(ModelName, "Could Not Replace Knife: " .. tostring(Error)) end
        end
    end
    if State.Modules.Weapon.OnWeaponCreate then
        Connect(State.Modules.Weapon.OnWeaponCreate, function() Identity(Update, 2) end)
    end
    local Elapsed = 0
    function Self:Update(Delta)
        Elapsed += Delta or 0.2
        if Elapsed < 0.15 then return end
        Elapsed = 0
        Identity(Update, 2)
    end
    function Self:Destroy()
        Identity(RestoreSkins, 2)
        if State.SkinController == self then State.SkinController = nil end
    end
State.Controllers.Skins = Self
end

Functions.Utility.Register("Skins", State.Controllers.Skins, "Colon")

do
    local Get = Functions.Config.Get
    local Native = State.Modules.Camera
    local Player = State.LocalPlayer or State.Services.Players.LocalPlayer
    local Self = {}
    local function RestoreAspect()
        if Self.AspectCamera and Self.AspectCamera.Parent and Self.AspectCamera.CFrame == Self.AppliedFrame then Self.AspectCamera.CFrame = Self.BaseFrame end
        Self.AspectCamera, Self.AppliedFrame, Self.BaseFrame = nil, nil, nil
    end
    local function RestoreFov()
        if Self.FovCamera then
            local Value = Self.OriginalFov
            if Native and Native.SetFOVAmount then pcall(Native.SetFOVAmount, Value) end
            if Self.FovCamera.Parent then Self.FovCamera.FieldOfView = Value end
        end
        Self.FovCamera, Self.OriginalFov = nil, nil
    end
    local function RestoreZoom()
        if Self.Zoom then
            Player.CameraMinZoomDistance = 0
            Player.CameraMaxZoomDistance = Self.Zoom[2]
            Player.CameraMinZoomDistance = Self.Zoom[1]
            if Native and Native.SetZoom then pcall(Native.SetZoom, Native.GetTarget() == 1 and 0 or 16) end
            Self.Zoom = nil
        end
    end
    if Native and Native.SetFOVAmount then
        Functions.Hooks.Add("Camera.Fov", Native.SetFOVAmount, function(Original, Value)
            return Original(Get("FOV Override", false) and math.clamp(Get("Field of View", 90), 40, 120) or Value)
        end)
    end
    function Self:Update()
        RestoreAspect()
        local Camera = Functions.Game.Camera()
        if self.FovCamera and (Camera ~= self.FovCamera or not Get("FOV Override", false)) then RestoreFov() end
        if Camera and Get("FOV Override", false) then
            if not self.FovCamera then self.FovCamera, self.OriginalFov = Camera, Camera.FieldOfView end
            local Fov = math.clamp(Get("Field of View", 90), 40, 120)
            if Native and Native.SetFOVAmount then Native.SetFOVAmount(Fov) else Camera.FieldOfView = Fov end
        end
        if Get("Zoom Override", false) and not Get("Third Person", false) then
            if not self.Zoom then self.Zoom = {Player.CameraMinZoomDistance, Player.CameraMaxZoomDistance} end
            local Maximum = math.clamp(Get("Max Zoom", 16), 0, 128)
            Player.CameraMinZoomDistance, Player.CameraMaxZoomDistance = 0, Maximum
            if Native and Native.SetZoom then Native.SetZoom(Maximum) end
        elseif not Get("Third Person", false) then RestoreZoom() end
        if Camera and Get("Aspect Ratio Enabled", false) then
            local Horizontal, Vertical = math.clamp(Get("Aspect Horizontal", 1), 0.25, 3), math.clamp(Get("Aspect Vertical", 1), 0.25, 3)
            if Horizontal ~= 1 or Vertical ~= 1 then
                local Scale = math.max(1, Horizontal, Vertical)
                self.AspectCamera, self.BaseFrame = Camera, Camera.CFrame
                self.AppliedFrame = Camera.CFrame * CFrame.new(0, 0, 0, Horizontal / Scale, 0, 0, 0, Vertical / Scale, 0, 0, 0, 1 / Scale)
                Camera.CFrame = self.AppliedFrame
            end
        end
    end
    function Self:Destroy()
        Functions.Hooks.Remove("Camera.Fov")
        RestoreAspect()
        RestoreFov()
        RestoreZoom()
    end
State.Controllers.Camera = Self
end

Functions.Utility.Register("Camera", State.Controllers.Camera, "Colon")

do
    local Get, Color = Functions.Config.Get, Functions.Config.Color
    local Game, Utility = Functions.Game, Functions.Utility
    local Identity, Connect, Own, Notify = Utility.Identity, Utility.Connect, Utility.Own, Utility.Notify
    local Parent = State.GuiParent or State.Services.CoreGui
    local CameraController = State.Modules.Camera
    local Player = State.LocalPlayer
    local Self = {Model = nil, HiddenParts = {}, Active = false, PreviousMode = nil, PreviousMaxZoom = nil, LastDistance = nil, EquippedName = nil, EquippedSkin = nil}
    local function OwnAnimations()
        for _, Animator in Self.Animation and Self.Animation.Animators or {} do
            if Animator.ActiveAnimators and Animator.ActiveAnimators ~= Self.ActiveAnimators then
                Animator.ActiveAnimators[Animator] = nil
                Animator.ActiveAnimators = Self.ActiveAnimators
                if Animator.Playing then Self.ActiveAnimators[Animator] = true end
            end
        end
    end
    Self.ActiveAnimators = {}
    local function RestorePart(Part, Original)
        pcall(function()
            local Weapon = Original.Weapon
            local Visible = Weapon == State.Modules.Weapon.GetCurrentWeapon() and Weapon.ViewmodelIsVisible ~= false
            Part.Transparency = Visible and Original.Transparency or 1
            if Original.LocalTransparencyModifier ~= nil then Part.LocalTransparencyModifier = Original.LocalTransparencyModifier end
        end)
    end
    local function RestoreViewmodel()
        for Part, Original in Self.HiddenParts do
            RestorePart(Part, Original)
            Self.HiddenParts[Part] = nil
        end
    end
    local function HideViewmodel()
        local Weapon = State.Modules.Weapon.GetCurrentWeapon()
        local Models = {}
        local function Add(Current)
            local Model = Current and Current.Viewmodel
            if Model and Model.Parent then Models[Model] = Current end
        end
        Add(Weapon)
        for _, Current in State.Modules.Weapon.GetWeaponInventory() or {} do Add(Current) end
        for Part, Original in Self.HiddenParts do
            if not Models[Original.Model] or not Part:IsDescendantOf(Original.Model) then
                RestorePart(Part, Original)
                Self.HiddenParts[Part] = nil
            end
        end
        for Viewmodel, Current in Models do
            if State.LocalChams then State.LocalChams:RestoreModel(Viewmodel) end
            for _, Part in Viewmodel:GetDescendants() do
                if Part:IsA("BasePart") or Part:IsA("Decal") or Part:IsA("Texture") then
                    if Self.HiddenParts[Part] == nil then
                        local Original = Current.VisiblePartsMap and Current.VisiblePartsMap[Part]
                        Self.HiddenParts[Part] = {Weapon = Current, Model = Viewmodel, Transparency = Original or Part.Transparency,
                            LocalTransparencyModifier = Part:IsA("BasePart") and Part.LocalTransparencyModifier or nil}
                    end
                    Part.Transparency = 1
                    if Part:IsA("BasePart") then Part.LocalTransparencyModifier = 1 end
                end
            end
        end
    end
    local function Remove()
        if Self.Active then
            if CameraController.GetTarget() == 1 then pcall(CameraController.SetZoom, 0) end
            Player.CameraMaxZoomDistance = Self.PreviousMaxZoom
            Player.CameraMode = Self.PreviousMode
        end
        RestoreViewmodel()
        State.ThirdPersonModel = nil
        if Self.Animation then State.Modules.CharacterModel.DestroyAnimations(Self.Animation); Self.Animation = nil end
        if Self.Legs then Self.Legs:Destroy(); Self.Legs = nil end
        if Self.Model then Self.Model:Destroy(); Self.Model = nil end
        Self.Active, Self.PreviousMode, Self.PreviousMaxZoom, Self.LastDistance = false, nil, nil, nil
        Self.EquippedName, Self.EquippedSkin = nil, nil
        Self.Simulation, Self.VisualWeapon = nil, nil
        Self.NextEquip = nil
        table.clear(Self.ActiveAnimators)
    end
    local function CreateModel()
        if Self.Model and Self.Model.Parent then return Self.Model end
        local Okay, Model = Identity(function()
            return State.Modules.CharacterModel.new({Name = "SwiftLocalCharacter", Parent = State.Services.Workspace})
        end, 2)
        if not Okay or not Model then return nil end
        Self.Model = Model
        State.ThirdPersonModel = Model
        Self.EquipFailure = nil
        local Animator = Model:FindFirstChildOfClass("AnimationController")
        if Animator then Animator:Destroy() end
        for _, Part in Model:GetDescendants() do
            if Part:IsA("BasePart") then Part.CanCollide, Part.CanTouch, Part.CanQuery = false, false, false end
        end
        if Model.PrimaryPart then Model.PrimaryPart.Anchored = true end
        Self.Animation = {Model = Model}
        Identity(function()
            State.Modules.CharacterModel.InitAnimations(Self.Animation, Model)
            OwnAnimations()
            local Rig = State.Shared.Managers.AnimationManager.Rigs.Character.Character
            local Stand = State.Modules.GameConfig.Get("Character", "StandCollisionSize")
            local Duck = State.Modules.GameConfig.Get("Character", "DuckCollisionSize")
            Self.Legs = State.Modules.Legs.new(Model, {
                DuckDrop = Stand.Y - Duck.Y, LadderReach = Stand.X * 0.5,
                WalkFolder = Rig.Walk, CrouchFolder = Rig.Crouch, ClimbFolder = Rig.Climb,
            })
            if Self.Legs then Self.Legs:EnableTransforms(); Self.Legs:Snap() end
        end, 2)
        return Model
    end
    function Self:Update(Delta)
        local Simulation, Character = Game.Simulation()
        if not Get("Third Person", false) or not Simulation or not Game.Camera() or CameraController.GetTarget() ~= 1
            or Character and Character.Health and Character.Health <= 0 then Remove(); return end
        if Self.Simulation and Self.Simulation ~= Simulation then Remove() end
        Self.Simulation = Simulation
        if not Self.Active then
            Self.PreviousMode, Self.PreviousMaxZoom = Player.CameraMode, Player.CameraMaxZoomDistance
            Player.CameraMaxZoomDistance = 99999
            Player.CameraMode = Enum.CameraMode.Classic
            Self.Active = true
        end
        local Distance = Get("Third Person Distance", 12)
        if Distance ~= Self.LastDistance then
            Self.LastDistance = Distance
            pcall(CameraController.SetZoom, Distance)
        end
        local Model = CreateModel()
        if not Model or not Model.PrimaryPart then return end
        local Current = State.Modules.Weapon.GetCurrentWeapon()
        local Name = Current and Current.Name
        local Skin = Current and Current.Skin or "Stock"
        if Current and Get("Skin Changer", false) then
            local Knife = Get("Knife Model", "Default")
            if Current.Data and Current.Data.Type == "Melee" and Knife ~= "Default" then
                Name = Knife
                Skin = Get(Knife .. " Skin", "Stock")
            else
                Skin = Get(Name .. " Skin", "Stock")
            end
            if State.SkinController then Skin = State.SkinController:ResolveSkin(Name, Skin) end
        end
        local Changed = Name ~= Self.EquippedName or Skin ~= Self.EquippedSkin
        if Changed and (not Self.NextEquip or os.clock() >= Self.NextEquip) then
            local Okay, Added = Identity(function()
                if Name then
                    Self.VisualWeapon = table.clone(Current)
                    Self.VisualWeapon.Name, Self.VisualWeapon.Skin = Name, Skin
                    State.Modules.CharacterModel.EquipWeapon(Self.Animation, Self.VisualWeapon)
                    OwnAnimations()
                    return Self.Animation.CurrentWeaponModel
                else
                    State.Modules.CharacterModel.DestroyAnimations(Self.Animation)
                    local Old = Self.Animation.CurrentWeaponModel
                    if Old then Old:Destroy() end
                    Self.Animation.CurrentWeaponModel, Self.VisualWeapon = nil, nil
                    State.Modules.CharacterModel.InitAnimations(Self.Animation, Model)
                    OwnAnimations()
                end
            end, 2)
            if Okay and (not Name or Added) then
                Self.EquippedName, Self.EquippedSkin = Name, Skin
                Self.EquipFailure, Self.NextEquip = nil, nil
            else
                Self.NextEquip = os.clock() + 1
                if Self.EquipFailure ~= Name then
                    Self.EquipFailure = Name
                    Notify("Third Person could not display " .. tostring(Name) .. "; retrying", "Warning")
                end
            end
        end
        if Current and Self.VisualWeapon then
            for _, Key in {"Data", "Ammo", "Reloading", "Firing", "Mode", "SilencerMode", "ZoomLevel", "ReloadStage", "Planting"} do
                Self.VisualWeapon[Key] = Current[Key]
            end
            State.Modules.CharacterModel.SyncWeaponAnimation(Self.Animation, Self.VisualWeapon)
            OwnAnimations()
        end
        for Animator in Self.ActiveAnimators do Animator:Step(Delta or 1 / 60) end
        local FakeYaw = (Get("Anti Aim", false) or Get("Fake Yaw", false) or Get("Fake Pitch", false)) and State.AntiAimYaw
        local Yaw = FakeYaw or Simulation.BodyYaw or Simulation.Yaw or 0
        local Pitch = FakeYaw and State.AntiAimPitch or Simulation.Pitch or 0
        local LookYaw = FakeYaw or Simulation.Yaw or Yaw
        local Okay, Frame = pcall(State.Modules.CharacterModel.Pose, Model, Yaw, Simulation.Position, LookYaw, Pitch, true)
        if Okay then
            Model:PivotTo(Frame)
            if Self.Legs then
                local Duck = Simulation.Ducking and (Simulation.Ducked and 0 or 1) or (Simulation.Ducked and 1 or 0)
                Self.Legs:Update(Delta, Frame, Simulation.Velocity, Simulation.OnGround ~= false,
                    Simulation.Climbing and Simulation.LadderNormal or nil, Duck, 0)
                Self.Legs:Apply(1)
            end
            State.Modules.CharacterModel.UpdateAnimation(Self.Animation)
        end
        if Self.Active then HideViewmodel() end
    end
    function Self:Destroy()
        Remove()
    end
State.Controllers.ThirdPerson = Self
end

Functions.Utility.Register("ThirdPerson", State.Controllers.ThirdPerson, "Colon")

do
    local Get, Color = Functions.Config.Get, Functions.Config.Color
    local Game, Utility = Functions.Game, Functions.Utility
    local Identity, Connect, Own, Notify = Utility.Identity, Utility.Connect, Utility.Own, Utility.Notify
    local Parent = State.GuiParent or State.Services.CoreGui
    local Self = {Model = nil, UserId = nil, Request = 0, Hidden = {}, Source = nil}
    local BodyParts = {
        Head = true, UpperTorso = true, LowerTorso = true,
        LeftUpperArm = true, LeftLowerArm = true, LeftHand = true,
        RightUpperArm = true, RightLowerArm = true, RightHand = true,
        LeftUpperLeg = true, LeftLowerLeg = true, LeftFoot = true,
        RightUpperLeg = true, RightLowerLeg = true, RightFoot = true,
    }
    local function Restore()
        if State.AvatarModel == Self.Model then State.AvatarModel = nil end
        for Object, Original in Self.Hidden do
            if Object.Parent then
                if Object:IsA("BasePart") then Object.LocalTransparencyModifier = Original
                else Object.Transparency = Original end
            end
            Self.Hidden[Object] = nil
        end
        Self.Source = nil
        if Self.Model then Self.Model.Parent = nil end
    end
    function Self:Disable()
        self.Request += 1
        Restore()
    end
    local function Prepare(Model)
        for _, Item in Model:GetDescendants() do
            if Item:IsA("BasePart") then
                Item.CanCollide = false
                Item.CanTouch = false
                Item.CanQuery = false
                Item.Massless = true
                if BodyParts[Item.Name] and Item.Parent == Model then Item.Anchored = true end
            elseif Item:IsA("Script") or Item:IsA("LocalScript") then
                Item:Destroy()
            end
        end
        local Root = Model:FindFirstChild("HumanoidRootPart")
        if Root then Root.Anchored = true; Root.Transparency = 1 end
        local Humanoid = Model:FindFirstChildOfClass("Humanoid")
        if Humanoid then
            Humanoid.AutoRotate = false
            Humanoid.PlatformStand = true
            Humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
        end
        Model.Name = "SwiftAvatar"
    end
    function Self:Apply(Input, Callback)
        self.Request += 1
        local Id = tonumber(tostring(Input or ""):match("^%s*(%d+)%s*$"))
        if not Id or Id < 1 or Id % 1 ~= 0 then
            Notify("Enter a valid avatar User ID", "Warning")
            if Callback then Callback(false) end
            return
        end
        local Request = self.Request
        if self.Model and self.UserId == Id then
            if Callback then Callback(true) end
            return
        end
        task.spawn(function()
            local Players = State.Services.Players
            local Valid, Name = Identity(function()
                return Players:GetNameFromUserIdAsync(Id)
            end)
            if not State.Alive or Request ~= Self.Request then return end
            if not Valid or type(Name) ~= "string" or Name == "" then
                Notify("Avatar User ID is invalid or unavailable", "Warning")
                if Callback then Callback(false) end
                return
            end
            local Okay, Model = Identity(function()
                local Description = Players:GetHumanoidDescriptionFromUserIdAsync(Id)
                return Players:CreateHumanoidModelFromDescriptionAsync(Description, Enum.HumanoidRigType.R15)
            end)
            if not State.Alive or Request ~= Self.Request then
                if Model then Model:Destroy() end
                return
            end
            if not Okay or not Model then
                Notify("Could not load avatar for @" .. Name, "Warning")
                if Callback then Callback(false) end
                return
            end
            Prepare(Model)
            Restore()
            if Self.Model then Self.Model:Destroy() end
            Self.Model, Self.UserId = Model, Id
            if Callback then Callback(true) end
            Notify("Avatar replaced with @" .. Name, "Success")
        end)
    end
    local function Hide(Source)
        if State.LocalChams then State.LocalChams:RestoreModel(Source) end
        local Weapon = Source:FindFirstChild("CurrentWeapon")
        for _, Item in Source:GetDescendants() do
            if not Weapon or not Item:IsDescendantOf(Weapon) then
                if Item:IsA("BasePart") and Item.Name ~= "HumanoidRootPart" and Item.Name ~= "CollisionBox" then
                    if Self.Hidden[Item] == nil then Self.Hidden[Item] = Item.LocalTransparencyModifier end
                    Item.LocalTransparencyModifier = 1
                elseif Item:IsA("Decal") then
                    if Self.Hidden[Item] == nil then Self.Hidden[Item] = Item.Transparency end
                    Item.Transparency = 1
                end
            end
        end
    end
    function Self:Update()
        local Source = State.ThirdPersonModel
        if not Get("Avatar Replacer", false) or not Self.Model or not Source or not Source.Parent then
            if Self.Source or Self.Model and Self.Model.Parent then Restore() end
            return
        end
        if Self.Source ~= Source then Restore(); Self.Source = Source; Hide(Source) end
        if not Self.Model.Parent then Self.Model.Parent = State.Services.Workspace end
        for Name in BodyParts do
            local AvatarPart = Self.Model:FindFirstChild(Name)
            local SourcePart = Source:FindFirstChild(Name)
            if AvatarPart and SourcePart then AvatarPart.CFrame = SourcePart.CFrame end
        end
        State.AvatarModel = Self.Model
    end
    function Self:Destroy()
        self:Disable()
        if self.Model then self.Model:Destroy(); self.Model = nil end
    end
State.Controllers.Avatar = Self
end

Functions.Utility.Register("Avatar", State.Controllers.Avatar, "Colon")

do
    local Get, Color = Functions.Config.Get, Functions.Config.Color
    local Game, Utility = Functions.Game, Functions.Utility
    local Identity, Connect, Own, Notify = Utility.Identity, Utility.Connect, Utility.Own, Utility.Notify
    local Parent = State.GuiParent or State.Services.CoreGui
    local Self = {Detached = {}, Rigs = setmetatable({}, {__mode = "k"})}
    local function CleanRigs()
        local Referenced, Weapons = {}, {}
        local function Add(Weapon)
            if Weapon and Weapon.Viewmodel then
                Referenced[Weapon.Viewmodel], Weapons[Weapon] = true, true
            end
        end
        Add(State.Modules.Weapon.GetCurrentWeapon())
        for _, Weapon in State.Modules.Weapon.GetWeaponInventory() or {} do Add(Weapon) end
        for Weapon, Previous in Self.Rigs do
            if Weapon.Viewmodel and Weapon.Viewmodel ~= Previous and not Referenced[Previous] then
                if State.LocalChams then State.LocalChams:RestoreModel(Previous) end
                Previous:Destroy()
                Self.Rigs[Weapon] = nil
            elseif not Previous.Parent then Self.Rigs[Weapon] = nil end
        end
        for Weapon in Weapons do Self.Rigs[Weapon] = Weapon.Viewmodel end
    end
    local function Restore(Object, Record)
        if Record.Parent:IsDescendantOf(Record.Viewmodel) then
            local Weapon = Record.Weapon
            if Weapon.Viewmodel == Record.Viewmodel then
                Object.Transparency = Weapon.ViewmodelIsVisible == false and 1 or Record.Transparency
                if Weapon.VisiblePartsMap then Weapon.VisiblePartsMap[Object] = Record.Transparency end
            end
            Object.Parent = Record.Parent
        else Object:Destroy() end
        Self.Detached[Object] = nil
    end
    local function RenderFrame()
        CleanRigs()
        local Weapon = State.Modules.Weapon.GetCurrentWeapon()
        local Model = Weapon and Weapon.Viewmodel
        local Gloves = Get("Remove Viewmodel Gloves", false)
        local Sleeves = Get("Remove Viewmodel Sleeves", false)
        for Object, Record in Self.Detached do
            if Record.Viewmodel ~= Model or not (Record.Glove and Gloves or not Record.Glove and Sleeves) then
                Restore(Object, Record)
            end
        end
        local Arms = Model and Model:FindFirstChild("Arms")
        if not Arms or not (Gloves or Sleeves) then return end
        for _, Side in {"Left", "Right"} do
            local Arm = Arms:FindFirstChild(Side .. " Arm")
            if Arm then
                local Suffix = Side == "Left" and "L" or "R"
                for _, Kind in {"Glove", "Sleeve"} do
                    if Kind == "Glove" and Gloves or Kind == "Sleeve" and Sleeves then
                        local Object = Arm:FindFirstChild(Kind .. Suffix)
                        if Object then
                            if State.LocalChams then State.LocalChams:RestoreModel(Object) end
                            local Transparency = Weapon.VisiblePartsMap and Weapon.VisiblePartsMap[Object]
                            Self.Detached[Object] = {Parent = Arm, Viewmodel = Model, Weapon = Weapon,
                                Transparency = Transparency or Object.Transparency, Glove = Kind == "Glove"}
                            Object.Parent = nil
                        end
                    end
                end
            end
        end
    end
    function Self:Update()
        Identity(RenderFrame)
    end
    function Self:Destroy()
        for Object, Record in self.Detached do Restore(Object, Record) end
        table.clear(self.Rigs)
    end
State.Controllers.ViewmodelCosmetics = Self
end

Functions.Utility.Register("ViewmodelCosmetics", State.Controllers.ViewmodelCosmetics, "Colon")

do
    local Get, Game, Identity = Functions.Config.Get, Functions.Game, Functions.Utility.Identity
    local Self = {Entries = {}, Renderers = {}}
    local Categories = {"Character", "Arms", "Gun", "Knife"}
    local function BodyPart(Part, Model)
        if Part == Model then return true end
        local Parent = Part.Parent
        while Parent and Parent ~= Model do
            if Parent:IsA("Tool") or Parent.Name == "CurrentWeapon" or Parent.Name == "Weapon" or Parent.Name:sub(1, 5) == "Swift" then return false end
            Parent = Parent.Parent
        end
        return true
    end
    local function WeaponPart(Part, Model)
        if Part == Model then return true end
        local Parent = Part.Parent
        while Parent and Parent ~= Model do
            if Parent.Name == "Arms" then return false end
            Parent = Parent.Parent
        end
        return true
    end
    for _, Category in Categories do
        Self.Entries[Category] = {}
        Self.Renderers[Category] = Functions.Visuals.CreateChams("Local " .. Category .. " Chams", Category == "Character" and BodyPart or Category ~= "Arms" and WeaponPart or nil)
    end
    function Self:ReadOriginal(Object, Name)
        for _, Renderer in self.Renderers do
            local Found, Value = Renderer:ReadOriginal(Object, Name)
            if Found then return Value end
        end
        return Object[Name]
    end
    function Self:SurfaceCount(Part)
        local Count = 0
        for _, Child in Part:GetChildren() do if Child:IsA("SurfaceAppearance") then Count += 1 end end
        for _, Renderer in self.Renderers do Count += Renderer:DetachedSurfaces(Part) end
        return Count
    end
    function Self:RestoreModel(Model)
        if self.Weapon then
            for _, Renderer in self.Renderers do Renderer:NormalizeVisibility(self.Weapon.VisiblePartsMap) end
        end
        for _, Renderer in self.Renderers do Renderer:RestoreModel(Model) end
    end
    State.LocalChams = Self
    local function Active(Model) return Model and Model.Parent and Model or nil end
    local function WeaponModel(Current, Viewmodel)
        local Skins = State.SkinController
        local Replacement = Skins and Skins.Replacement
        if Replacement and Replacement.Weapon == Current and Replacement.Viewmodel == Viewmodel and Active(Replacement.Model) then return Replacement.Model end
        local Original = Skins and Skins.Original and Skins.Original[Current]
        if Original and Original.Viewmodel == Viewmodel and Active(Original.Model) then return Original.Model end
        local Name = Current.Data and Current.Data.ModelName
        return Name and Viewmodel:FindFirstChild(Name) or Viewmodel:FindFirstChild("Weapon") or Viewmodel:FindFirstChild(Current.Name or "Weapon") or Viewmodel
    end
    local function Update(Category, Model)
        local Renderer, Entry = Self.Renderers[Category], Self.Entries[Category]
        if not Get("Local " .. Category .. " Chams", false) or not Active(Model) then Renderer:Remove(Entry); return end
        Renderer:Render(Entry, Model)
    end
    local function Clear()
        for _, Category in Categories do Self.Renderers[Category]:Remove(Self.Entries[Category]) end
    end
    local function RenderFrame()
        local Current = State.Modules.Weapon.GetCurrentWeapon()
        for _, Renderer in Self.Renderers do
            if Self.Weapon then Renderer:NormalizeVisibility(Self.Weapon.VisiblePartsMap) end
            if Current and Current ~= Self.Weapon then Renderer:NormalizeVisibility(Current.VisiblePartsMap) end
        end
        Self.Weapon = Current
        local Enabled = false
        for _, Category in Categories do if Get("Local " .. Category .. " Chams", false) then Enabled = true; break end end
        if not Enabled then Clear(); return end
        local Camera = Game.Camera()
        local Simulation, Character = Game.Simulation()
        if not Camera or not Simulation or Character and (Character.Health or 100) <= 0 then Clear(); return end
        local Third = Active(State.ThirdPersonModel)
        local Avatar = Get("Avatar Replacer", false) and Active(State.AvatarModel) or nil
        local Body = Avatar or Third or Active(State.LocalPlayer.Character)
        Update("Character", Body)
        local Viewmodel = Current and Active(Current.Viewmodel)
        local IsKnife = Current and Current.Data and Current.Data.Type == "Melee"
        local Equipped
        if Third then
            Equipped = Third:FindFirstChild("CurrentWeapon")
            Update("Arms", nil)
        elseif Viewmodel and Current.ViewmodelIsVisible ~= false then
            Equipped = WeaponModel(Current, Viewmodel)
            Update("Arms", Viewmodel:FindFirstChild("Arms"))
        else Update("Arms", nil) end
        Update("Gun", Current and not IsKnife and Equipped or nil)
        Update("Knife", IsKnife and Equipped or nil)
    end
    function Self:Update()
        Identity(RenderFrame)
    end
    function Self:Destroy()
        for _, Renderer in self.Renderers do
            if self.Weapon then Renderer:NormalizeVisibility(self.Weapon.VisiblePartsMap) end
            Renderer:Destroy()
        end
        if State.LocalChams == self then State.LocalChams = nil end
    end
State.Controllers.LocalChams = Self
end

Functions.Utility.Register("LocalChams", State.Controllers.LocalChams, "Colon")

do
    local Get, Color = Functions.Config.Get, Functions.Config.Color
    local Game, Utility = Functions.Game, Functions.Utility
    local Identity, Connect, Own, Notify = Utility.Identity, Utility.Connect, Utility.Own, Utility.Notify
    local Parent = State.GuiParent or State.Services.CoreGui
    local Self = {Scopes = {}, Originals = {}}
    local Gui = Own(Instance.new("ScreenGui"))
    Gui.Name, Gui.ResetOnSpawn, Gui.IgnoreGuiInset, Gui.DisplayOrder = "SwiftReticle", false, true, 6
    Gui.Parent = Parent
    local Root = Instance.new("Frame")
    Root.BackgroundTransparency, Root.Size, Root.Parent = 1, UDim2.fromScale(1, 1), Gui
    local Lines = {}
    for Index = 1, 5 do
        local Line = Instance.new("Frame")
        Line.BorderSizePixel, Line.AnchorPoint, Line.Parent = 0, Vector2.new(0.5, 0.5), Root
        Lines[Index] = Line
    end
    local function ScopeImage(Object)
        return (Object:IsA("ImageLabel") or Object:IsA("ImageButton")) and Object.Name == "Center"
            and Object.Parent and Object.Parent.Name == "Scope"
    end
    local PlayerGui = State.LocalPlayer:FindFirstChildOfClass("PlayerGui")
    local function Track(Object) if ScopeImage(Object) then Self.Scopes[Object] = true end end
    if PlayerGui then
        for _, Object in PlayerGui:GetDescendants() do Track(Object) end
        Connect(PlayerGui.DescendantAdded, Track)
    end
    local function ImageId(Value)
        Value = tostring(Value or ""):match("^%s*(.-)%s*$")
        local Id = Value:match("^rbxassetid://(%d+)$") or Value:match("^(%d+)$")
        return Id and tonumber(Id) and tonumber(Id) > 0 and "rbxassetid://" .. Id or nil
    end
    local function Restore(Object)
        local Original = Self.Originals[Object]
        if Original ~= nil and Object.Parent then Object.Image = Original end
        Self.Originals[Object] = nil
    end
    local function Update()
        local Camera, Simulation = Game.Camera(), Game.Simulation()
        local Weapon = State.Modules.Weapon.GetCurrentWeapon()
        local Scoped = Weapon and ((Weapon.ZoomLevel or 0) > 0
            or Weapon.Data and Weapon.Data.AltFunction and Weapon.Data.AltFunction.Name == "ScopeRifle" and Weapon.Mode == 2)
        Root.Visible = Get("Custom Crosshair", false) and Camera ~= nil and Simulation ~= nil
            and not (Scoped and Get("Crosshair Hide Scoped", true))
        if Root.Visible then
            local Color, Alpha = Color("Crosshair Color", Color3.new(1, 1, 1))
            local Length, Gap, Thickness = Get("Crosshair Length", 6), Get("Crosshair Gap", 4), Get("Crosshair Thickness", 2)
            local X, Y = Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2
            for Index, Line in Lines do
                local Horizontal = Index <= 2
                local Offset = Gap + Length / 2
                local Sign = Index % 2 == 0 and 1 or -1
                Line.BackgroundColor3, Line.BackgroundTransparency = Color, 1 - Alpha
                Line.Size = UDim2.fromOffset(Horizontal and Length or Thickness, Index > 2 and Index < 5 and Length or Thickness)
                Line.Position = UDim2.fromOffset(X + (Horizontal and Sign * Offset or 0), Y + (Index > 2 and Index < 5 and Sign * Offset or 0))
                Line.Visible = Index < 5 or Get("Crosshair Dot", true)
            end
        end
        local Image = Get("Override Scope Image", false) and ImageId(Get("Scope Image", ""))
        for Object in Self.Scopes do
            if not Object.Parent then Self.Scopes[Object], Self.Originals[Object] = nil, nil
            elseif Image then
                if Self.Originals[Object] == nil then Self.Originals[Object] = Object.Image end
                Object.Image = Image
            else Restore(Object) end
        end
    end
    function Self:Update() Update() end
    function Self:Destroy()
        for Object in self.Originals do Restore(Object) end
        Gui:Destroy()
    end
State.Controllers.Reticle = Self
end

Functions.Utility.Register("Reticle", State.Controllers.Reticle, "Colon")

do
    local Aliases = {
        ["Player Box"] = "Box", ["Player Box Color"] = "Box Color", ["Player Box Thickness"] = "Box Thickness",
        ["Player Box Outline"] = "Box Outline Enabled", ["Player Box Fill"] = "Box Fill", ["Player Box Fill Color"] = "Fill Color",
        ["Player Box Gradient"] = "Box Fill Gradient", ["Player Box Gradient Color"] = "Low Contrast Fill", ["Player Box Gradient Rotation"] = "Box Fill Rotation",
        ["Player Name"] = "Names", ["Player Name Color"] = "Names Text Color", ["Player Distance"] = "Distance Text", ["Player Distance Color"] = "Distance Text Color",
        ["Player Weapon"] = "Weapon Text", ["Player Weapon Color"] = "Weapon Text Color", ["Player Flags"] = "Flags", ["Player Flags Types"] = "ESP Flags", ["Player Flags Color"] = "Flags Text Color",
        ["Player Skeleton"] = "Skeletons", ["Player Skeleton Color"] = "Skeleton Color", ["Player Skeleton Thickness"] = "Skeleton Thickness",
        ["Player Health"] = "Healthbar", ["Player Health Width"] = "Healthbar Width", ["Player Health Color"] = "Health Color",
    }
    local function Get(Name, Default) return Functions.Config.Get(Aliases[Name] or Name, Default) end
    local function Color(Name, Default) return Functions.Config.Color(Aliases[Name] or Name, Default) end
    local Game = Functions.Game
    local Services = State.Services
    local Fonts = State.Library.Fonts
    local Self = {Entries = {}, Clock = 0}
    local White, Black = Color3.new(1, 1, 1), Color3.new(0, 0, 0)
    local Gradients = setmetatable({}, {__mode = "k"})
    local function Transparency(Opacity)
        return 1 - math.clamp(tonumber(Opacity) or 1, 0, 1)
    end
    local function TextSize()
        return math.clamp(tonumber(Get("Text Size", 10)) or 10, 8, 24)
    end
    local function Gradient(Object, Enabled, First, FirstOpacity, Last, LastOpacity, Rotation, Middle, MiddleOpacity)
        Object.Enabled = Enabled == true
        if not Object.Enabled then return end
        local Cached = Gradients[Object]
        if not Cached then Cached = {}; Gradients[Object] = Cached end
        if Cached.First ~= First or Cached.Last ~= Last or Cached.Middle ~= Middle then
            Object.Color = Middle and ColorSequence.new({ColorSequenceKeypoint.new(0, First), ColorSequenceKeypoint.new(0.5, Middle), ColorSequenceKeypoint.new(1, Last)}) or ColorSequence.new(First, Last)
            Cached.First, Cached.Last, Cached.Middle = First, Last, Middle
        end
        local FirstAlpha, LastAlpha = Transparency(FirstOpacity), Transparency(LastOpacity)
        local MiddleAlpha = Middle and Transparency(MiddleOpacity) or nil
        if Cached.FirstAlpha ~= FirstAlpha or Cached.LastAlpha ~= LastAlpha or Cached.MiddleAlpha ~= MiddleAlpha then
            Object.Transparency = Middle and NumberSequence.new({NumberSequenceKeypoint.new(0, FirstAlpha), NumberSequenceKeypoint.new(0.5, MiddleAlpha), NumberSequenceKeypoint.new(1, LastAlpha)}) or NumberSequence.new({NumberSequenceKeypoint.new(0, FirstAlpha), NumberSequenceKeypoint.new(1, LastAlpha)})
            Cached.FirstAlpha, Cached.LastAlpha, Cached.MiddleAlpha = FirstAlpha, LastAlpha, MiddleAlpha
        end
        if Cached.Rotation ~= (Rotation or 0) then Object.Rotation = Rotation or 0; Cached.Rotation = Rotation or 0 end
    end
    local Bones = {{"Head", "UpperTorso"}, {"UpperTorso", "LowerTorso"}, {"UpperTorso", "LeftUpperArm"}, {"LeftUpperArm", "LeftLowerArm"}, {"LeftLowerArm", "LeftHand"}, {"UpperTorso", "RightUpperArm"}, {"RightUpperArm", "RightLowerArm"}, {"RightLowerArm", "RightHand"}, {"LowerTorso", "LeftUpperLeg"}, {"LeftUpperLeg", "LeftLowerLeg"}, {"LeftLowerLeg", "LeftFoot"}, {"LowerTorso", "RightUpperLeg"}, {"RightUpperLeg", "RightLowerLeg"}, {"RightLowerLeg", "RightFoot"}}
    local function New(Class, Parent, Properties)
        local Object = Instance.new(Class)
        for Key, Value in Properties or {} do Object[Key] = Value end
        Object.Parent = Parent
        return Object
    end
    local Gui = New("ScreenGui", State.UI and State.UI.Parent or Services.CoreGui, {Name = "Swift2ESP", IgnoreGuiInset = true, ResetOnSpawn = false, DisplayOrder = 2})
    local function Label(Parent)
        return New("TextLabel", Parent, {BackgroundTransparency = 1, FontFace = Fonts:ESPFace(Get("ESP Font", "Pixel")), TextSize = 11, TextColor3 = White, TextStrokeColor3 = Black, TextStrokeTransparency = 0, Visible = false})
    end
    local function Bar(Parent)
        local Root = New("Frame", Parent, {BorderSizePixel = 0, BackgroundColor3 = Black, Visible = false})
        return Root, New("Frame", Root, {BorderSizePixel = 0, BackgroundColor3 = White})
    end
    local function Create()
        local Root = New("Frame", Gui, {BackgroundTransparency = 1, Size = UDim2.fromScale(1, 1), Visible = false})
        local Box = New("Frame", Root, {BackgroundTransparency = 1, BorderSizePixel = 0, Visible = false})
        local Outline = New("UIStroke", Box, {Color = Black, Thickness = 3, ApplyStrokeMode = Enum.ApplyStrokeMode.Border})
        local Border = New("Frame", Root, {BackgroundTransparency = 1, BorderSizePixel = 0, Visible = false})
        local Stroke = New("UIStroke", Border, {Thickness = 1, Color = White, ApplyStrokeMode = Enum.ApplyStrokeMode.Border})
        local Gradient = New("UIGradient", Box)
        local StrokeGradient = New("UIGradient", Stroke)
        local Health, HealthFill = Bar(Root)
        local Armor, ArmorFill = Bar(Root)
        local Ammo, AmmoFill = Bar(Root)
        local Entry = {Root = Root, Box = Box, Outline = Outline, Border = Border, Stroke = Stroke, Gradient = Gradient, StrokeGradient = StrokeGradient, Name = Label(Root), Distance = Label(Root), Weapon = Label(Root), Flags = Label(Root), Timer = Label(Root), AmmoText = Label(Root), Arrow = Label(Root), HealthText = Label(Root), Health = Health, HealthFill = HealthFill, HealthGradient = New("UIGradient", HealthFill, {Enabled = false, Rotation = 90}), Armor = Armor, ArmorFill = ArmorFill, Ammo = Ammo, AmmoFill = AmmoFill, Lines = {}, SkeletonOutlines = {}, Corners = {}, CornerOutlines = {}, CornerGradients = {}}
        Entry.Glow = New("ImageLabel", Root, {BackgroundTransparency = 1, Image = "rbxassetid://5028857084", ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(24, 24, 276, 276), ZIndex = -1, Visible = false})
        Entry.GlowGradient = New("UIGradient", Entry.Glow)
        Entry.Icon = New("ImageLabel", Root, {BackgroundTransparency = 1, ScaleType = Enum.ScaleType.Fit, Visible = false})
        Entry.Head = New("Frame", Root, {BorderSizePixel = 0, AnchorPoint = Vector2.new(0.5, 0.5), Visible = false})
        New("UICorner", Entry.Head, {CornerRadius = UDim.new(1, 0)})
        for Index = 1, #Bones + 1 do Entry.Lines[Index] = New("Frame", Root, {BorderSizePixel = 0, AnchorPoint = Vector2.new(0, 0.5), Visible = false}) end
        for Index = 1, #Bones do Entry.SkeletonOutlines[Index] = New("Frame", Root, {BorderSizePixel = 0, AnchorPoint = Vector2.new(0, 0.5), ZIndex = 0, Visible = false}) end
        for Index = 1, 8 do
            Entry.Corners[Index] = New("Frame", Root, {BorderSizePixel = 0, AnchorPoint = Vector2.new(0, 0.5), ZIndex = 2, Visible = false})
            Entry.CornerOutlines[Index] = New("Frame", Root, {BorderSizePixel = 0, AnchorPoint = Vector2.new(0, 0.5), ZIndex = 1, Visible = false})
            Entry.CornerGradients[Index] = New("UIGradient", Entry.Corners[Index])
        end
        Entry.Arrow.Text, Entry.Arrow.TextSize, Entry.Arrow.Size = "▲", 24, UDim2.fromOffset(28, 28)
        Entry.Arrow.FontFace = Fonts:ESPFace("Code")
        return Entry
    end
    local function Hide(Entry)
        Entry.Root.Visible = false
        if Entry.Highlight then Entry.Highlight.Enabled = false end
    end
    local function Destroy(Entry)
        if Entry.Highlight then Entry.Highlight:Destroy() end
        Entry.Root:Destroy()
    end
    local function Bounds(Data, Camera, Character)
        local Model = Data.Model
        local Low, High = Vector2.new(math.huge, math.huge), Vector2.new(-math.huge, -math.huge)
        for _, Part in Character and Model:GetChildren() or Model:GetDescendants() do
            if not Part:IsA("BasePart") or Part.Name == "CollisionBox" or Part.Name == "HumanoidRootPart" then continue end
            local Frame = Character and Game.PartFrame(Data, Part) or Part.CFrame
            if not Frame then continue end
            for X = -1, 1, 2 do for Y = -1, 1, 2 do for Z = -1, 1, 2 do
                local Point = Camera:WorldToViewportPoint(Frame * (Part.Size * Vector3.new(X, Y, Z) * 0.5))
                if Point.Z <= 0.05 then return nil end
                Low = Vector2.new(math.min(Low.X, Point.X), math.min(Low.Y, Point.Y))
                High = Vector2.new(math.max(High.X, Point.X), math.max(High.Y, Point.Y))
            end end end
        end
        local View = Camera.ViewportSize
        if Low.X == math.huge or High.X < 0 or High.Y < 0 or Low.X > View.X or Low.Y > View.Y then return nil end
        return math.floor(Low.X), math.floor(Low.Y), math.max(2, math.ceil(High.X - Low.X)), math.max(2, math.ceil(High.Y - Low.Y))
    end
    local function Line(Object, A, B, Thickness, Tint, Opacity)
        local Delta = B - A
        Object.AnchorPoint = Vector2.new(0.5, 0.5)
        Object.Position, Object.Size = UDim2.fromOffset((A.X + B.X) * 0.5, (A.Y + B.Y) * 0.5), UDim2.fromOffset(Delta.Magnitude, Thickness)
        Object.Rotation, Object.BackgroundColor3, Object.Visible = math.deg(math.atan2(Delta.Y, Delta.X)), Tint, true
        Object.BackgroundTransparency = Transparency(Opacity)
    end
    local function Text(Object, Enabled, Value, X, Y, Width, Tint, Opacity)
        Object.Visible = Enabled
        if not Enabled then return end
        Object.Text, Object.Position, Object.Size = tostring(Value), UDim2.fromOffset(X - 30, Y), UDim2.fromOffset(Width + 60, TextSize() + 4)
        Object.AnchorPoint = Vector2.new(0, 0)
        Object.TextXAlignment, Object.TextYAlignment = Enum.TextXAlignment.Center, Enum.TextYAlignment.Top
        Object.TextColor3 = Tint or White
        Object.TextTransparency = Transparency(Opacity)
        Object.TextSize = TextSize()
        Object.FontFace = Fonts:ESPFace(Get("ESP Font", "Pixel"))
        local OutlineColor, Alpha = Color("ESP Text Outline Color", Black)
        Object.TextStrokeColor3, Object.TextStrokeTransparency = OutlineColor, Get("ESP Text Outline", false) and 1 - (Alpha or 1) * (1 - Object.TextTransparency) or 1
    end
    local function WeaponIcon(Name)
        local Manager = State.Modules.WeaponManager
        local Data = Manager and Manager.Get and Manager.Get(Name)
        local Information = Data and Data.GuiInformation
        return Information and (Information.IconHorizontal or Information.Icon)
    end
    local function Render(Category, Data, Entry, Camera)
        Hide(Entry)
        local Character = Category == "Character"
        local Model = Data.Model
        if not Model or not Model.Parent or Character and (not Functions.Target.Valid(Data) or not Functions.Target.Enemy(Data)) then return end
        local Head = Character and (Model:FindFirstChild("Head") or Model.PrimaryPart)
        if Character and Get("ESP Visible Check", false) and (not Head or not Functions.Target.Visible(Head, nil, Game.PartPosition(Data, Head))) then return end
        local Center = Character and ((Head and Game.PartPosition(Data, Head)) or Data.Position) or Model:GetPivot().Position
        if typeof(Center) ~= "Vector3" then return end
        if Character and Get("Distance Limit", false) and (Camera.CFrame.Position - Center).Magnitude > Get("Max Distance", 1000) then return end
        local Screen, Onscreen = Camera:WorldToViewportPoint(Center)
        local X, Y, Width, Height = Bounds(Data, Camera, Character)
        for _, Object in Entry.Root:GetChildren() do if Object:IsA("GuiObject") then Object.Visible = false end end
        if not X then
            if not Character or not Get("Player Offscreen Arrows", false) then return end
            local View = Camera.ViewportSize
            local Direction = Vector2.new(Screen.X - View.X * 0.5, Screen.Y - View.Y * 0.5)
            if Screen.Z < 0 then Direction = -Direction end
            Direction = Direction.Magnitude > 0.001 and Direction.Unit or Vector2.new(0, -1)
            local Radius = math.min(View.X, View.Y) * math.clamp(Get("Player Arrow Distance", 0.45), 0.05, 0.48)
            local Position = View * 0.5 + Direction * Radius
            Entry.Root.Visible, Entry.Arrow.Visible = true, true
            Entry.Arrow.Position, Entry.Arrow.Rotation = UDim2.fromOffset(Position.X - 14, Position.Y - 14), math.deg(math.atan2(Direction.Y, Direction.X)) + 90
            local Tint, Opacity = Color("Player Arrow Color", White)
            Entry.Arrow.TextColor3, Entry.Arrow.TextTransparency = Tint, Transparency(Opacity)
            Entry.Arrow.TextStrokeTransparency = Transparency(Opacity)
            return
        end
        Entry.Root.Visible = true
        local Prefix = Character and "Player" or Category == "Bomb" and "C4" or "Dropped"
        Entry.Box.Position, Entry.Box.Size = UDim2.fromOffset(X, Y), UDim2.fromOffset(Width, Height)
        Entry.Border.Position, Entry.Border.Size = Entry.Box.Position, Entry.Box.Size
        Entry.Box.Visible, Entry.Border.Visible = Get(Prefix .. " Box", false), Get(Prefix .. " Box", false)
        local BoxColor, BoxOpacity = Color(Prefix .. " Box Color", White)
        Entry.Stroke.Color, Entry.Stroke.Transparency, Entry.Stroke.Thickness = BoxColor, Transparency(BoxOpacity), Get(Prefix .. " Box Thickness", 1)
        Entry.Outline.Enabled, Entry.Outline.Thickness = Get(Prefix .. " Box Outline", true), Entry.Stroke.Thickness + 2
        Entry.Outline.Color, Entry.Outline.Transparency = Black, 0
        local Fill, FillOpacity = Color(Prefix .. " Box Fill Color", White)
        local FillEnd, FillEndOpacity = Color(Prefix .. " Box Gradient Color", White)
        local FillGradient = Get(Prefix .. " Box Gradient", false)
        Entry.Box.BackgroundColor3 = FillGradient and White or Fill
        Entry.Box.BackgroundTransparency = Get(Prefix .. " Box Fill", false) and 1 - Get(Prefix .. " Box Fill Opacity", 0.2) * (FillGradient and 1 or FillOpacity) or 1
        Gradient(Entry.Gradient, FillGradient, Fill, FillOpacity, FillEnd, FillEndOpacity, Get(Prefix .. " Box Gradient Rotation", 90))
        Entry.StrokeGradient.Enabled = false
        if Character then
            local Outline, OutlineOpacity = Color("Box Outline Color", Black)
            Entry.Outline.Color, Entry.Outline.Transparency, Entry.Outline.Thickness = Outline, Transparency(OutlineOpacity), Get("Box Outline Thickness", 3)
            local PlayerFill, PlayerFillOpacity = Color("Fill Color", White)
            local HighFill, HighFillOpacity = Color("High Contrast Fill", PlayerFill)
            local LowFill, LowFillOpacity = Color("Low Contrast Fill", PlayerFill)
            local PlayerFillGradient = Get("Box Fill Gradient", false)
            Entry.Box.BackgroundColor3 = PlayerFillGradient and White or PlayerFill
            Entry.Box.BackgroundTransparency = Get("Box Fill", false) and (PlayerFillGradient and 0 or Transparency(PlayerFillOpacity)) or 1
            Gradient(Entry.Gradient, PlayerFillGradient, HighFill, HighFillOpacity, LowFill, LowFillOpacity, Get("Box Fill Rotation", 0))
            local HighBox, HighBoxOpacity = Color("High Contrast Box", BoxColor)
            local LowBox, LowBoxOpacity = Color("Low Contrast Box", BoxColor)
            local BoxGradient, BoxRotation = Get("Box Gradient", false), Get("Box Gradient Rotation", 0)
            Entry.Stroke.Color, Entry.Stroke.Transparency = BoxGradient and White or BoxColor, BoxGradient and 0 or Transparency(BoxOpacity)
            Gradient(Entry.StrokeGradient, BoxGradient, HighBox, HighBoxOpacity, LowBox, LowBoxOpacity, BoxRotation)
            local Corners = Get("Box", false) and Get("Box Style", "Full") == "Corners"
            Entry.Border.Visible, Entry.Outline.Enabled = Get("Box", false) and not Corners, Get("Box Outline Enabled", false) and not Corners
            if Corners then
                local Ratio = math.clamp(Get("Box Corner Length", 25) / 100, 0.1, 0.5)
                local A, B = Width * Ratio, Height * Ratio
                local Segments = {{X, Y, X + A, Y}, {X, Y, X, Y + B}, {X + Width - A, Y, X + Width, Y}, {X + Width, Y, X + Width, Y + B}, {X, Y + Height, X + A, Y + Height}, {X, Y + Height - B, X, Y + Height}, {X + Width - A, Y + Height, X + Width, Y + Height}, {X + Width, Y + Height - B, X + Width, Y + Height}}
                for Index, Segment in Segments do
                    local First, Last = Vector2.new(Segment[1], Segment[2]), Vector2.new(Segment[3], Segment[4])
                    if Get("Box Outline Enabled", false) then Line(Entry.CornerOutlines[Index], First, Last, Get("Box Outline Thickness", 3), Outline, OutlineOpacity) end
                    local SegmentLine = Entry.Corners[Index]
                    Line(SegmentLine, First, Last, Entry.Stroke.Thickness, Entry.Stroke.Color, BoxGradient and 1 or BoxOpacity)
                    Gradient(Entry.CornerGradients[Index], BoxGradient, HighBox, HighBoxOpacity, LowBox, LowBoxOpacity, BoxRotation - SegmentLine.Rotation)
                end
            end
            Entry.Glow.Visible = Get("Box", false) and Get("Box Glow", false)
            local GlowSize = Get("Glow Size", 45)
            Entry.Glow.Position, Entry.Glow.Size = UDim2.fromOffset(X - GlowSize * 0.5, Y - GlowSize * 0.5), UDim2.fromOffset(Width + GlowSize, Height + GlowSize)
            local Glow, GlowOpacity = Color("Glow Color", White)
            local HighGlow, HighGlowOpacity = Color("High Contrast Glow", Glow)
            local LowGlow, LowGlowOpacity = Color("Low Contrast Glow", Glow)
            local GlowGradient = Get("Box Glow Gradient", false)
            Entry.Glow.ImageColor3, Entry.Glow.ImageTransparency = GlowGradient and White or Glow, 1 - Get("Glow Opacity", 0.2) * (GlowGradient and 1 or GlowOpacity)
            Gradient(Entry.GlowGradient, GlowGradient, HighGlow, HighGlowOpacity, LowGlow, LowGlowOpacity, Get("Box Glow Rotation", 0))
        end
        local Player = Character and Data.UserId and Services.Players:GetPlayerByUserId(Data.UserId)
        local Weapon = Character and Data.CharacterCurrentWeapon or Data
        local WeaponName = Weapon and Weapon.Name or (Character and "none" or "")
        local Display = Character and (Player and Player.DisplayName or Data.Name or "Bot") or Category == "Bomb" and "C4" or WeaponName
        if Character and Player then
            local Choice = Get("ESP Name Type", "Display Name")
            if Choice == "Username" then Display = Player.Name elseif Choice == "Both" then Display = Player.DisplayName .. " (@" .. Player.Name .. ")" end
        end
        local RowHeight = TextSize() + 4
        local Ammo = Weapon and Weapon.Ammo
        local Manager = State.Modules.WeaponManager
        local WeaponData = Manager and Manager.Get and Manager.Get(WeaponName)
        local Capacity = WeaponData and WeaponData.Data and WeaponData.Data.ClipSize or 0
        local AmmoPrefix = Character and "Player" or "Dropped"
        Entry.Ammo.Visible = Category == "Bomb" and Get("C4 Timer Bar", false) or Category ~= "Bomb" and Get(AmmoPrefix .. " Ammo Bar", false) and Ammo ~= nil and Capacity > 0
        local AmmoHeight = Get("Player Ammo Bar Height", 4)
        Text(Entry.Name, Get(Prefix .. " Name", false), Display, X, Y - RowHeight - 3, Width, Color(Prefix .. " Name Color", White))
        local Bottom = Y + Height + (Entry.Ammo.Visible and AmmoHeight + 5 or 3)
        Text(Entry.Distance, Get(Prefix .. " Distance", false), string.format("%dst", (Camera.CFrame.Position - Center).Magnitude + 0.5), X, Bottom, Width, Color(Prefix .. " Distance Color", White))
        if Entry.Distance.Visible then Bottom += RowHeight end
        Text(Entry.Weapon, Character and Get("Player Weapon", false), WeaponName, X, Bottom, Width, Color("Player Weapon Color", White))
        if Entry.Weapon.Visible then Bottom += RowHeight end
        local Icon = WeaponIcon(Category == "Bomb" and "C4" or WeaponName)
        Entry.Icon.Visible = Get(Prefix .. " Icon", false) and Icon ~= nil
        if Icon then
            local Image = tostring(Icon)
            local Tint, Opacity = Color(Prefix .. " Icon Color", White)
            Entry.Icon.Image, Entry.Icon.Position = Image:match("^%d+$") and "rbxassetid://" .. Image or Image, UDim2.fromOffset(X - 5, Bottom)
            Entry.Icon.Size, Entry.Icon.ImageColor3, Entry.Icon.ImageTransparency = UDim2.fromOffset(Width + 10, Get("Player Icon Size", 22)), Tint, Transparency(Opacity)
            if Entry.Icon.Visible then Bottom += Entry.Icon.Size.Y.Offset + 2 end
        end
        local SidePadding = Character and Get("Player Armor", false) and Get("Player Armor Width", 4) + 8 or 4
        Text(Entry.AmmoText, Category ~= "Bomb" and Get(AmmoPrefix .. " Ammo Text", false) and Ammo ~= nil, Ammo or "", X + Width + SidePadding + 30, Y + Height - RowHeight, 0, Color(AmmoPrefix .. " Ammo Color", White))
        Entry.AmmoText.TextXAlignment = Enum.TextXAlignment.Left
        Entry.Ammo.Position, Entry.Ammo.Size = UDim2.fromOffset(X, Y + Height + 2), UDim2.fromOffset(Width, AmmoHeight)
        local AmmoTint, AmmoOpacity = Color(AmmoPrefix .. " Ammo Color", White)
        Entry.AmmoFill.Size, Entry.AmmoFill.BackgroundColor3 = UDim2.fromScale(math.clamp((Ammo or 0) / math.max(1, Capacity), 0, 1), 1), AmmoTint
        Entry.AmmoFill.BackgroundTransparency = Transparency(AmmoOpacity)
        if Category == "Bomb" then
            local Remaining = math.max(0, tonumber(Data.BlowTimer) or 0)
            Text(Entry.Timer, Get("C4 Timer Text", false), string.format("%.1fs", Remaining), X, Bottom, Width, Color("C4 Timer Color", White))
            Entry.Ammo.Visible = Get("C4 Timer Bar", false)
            local TimerTint, TimerOpacity = Color("C4 Timer Color", White)
            Entry.AmmoFill.Size, Entry.AmmoFill.BackgroundColor3 = UDim2.fromScale(math.clamp(Remaining / 40, 0, 1), 1), TimerTint
            Entry.AmmoFill.BackgroundTransparency = Transparency(TimerOpacity)
        end
        if not Character then return end
        Entry.Health.Visible, Entry.Armor.Visible = Get("Player Health", false), Get("Player Armor", false)
        local HealthWidth = Get("Player Health Width", 4)
        Entry.Health.Position, Entry.Health.Size = UDim2.fromOffset(X - HealthWidth - 3, Y), UDim2.fromOffset(HealthWidth, Height)
        Entry.HealthFill.AnchorPoint, Entry.HealthFill.Position = Vector2.new(0, 1), UDim2.fromScale(0, 1)
        Entry.HealthFill.Size = UDim2.fromScale(1, math.clamp((Data.Health or 0) / 100, 0, 1))
        local HealthColor, HealthOpacity = Color("Player Health Color", Color3.fromRGB(0, 255, 0))
        local Health = math.clamp((Data.Health or 0) / 100, 0, 1)
        Entry.HealthGradient.Enabled = Get("Health Gradient", false)
        Entry.HealthFill.BackgroundColor3, Entry.HealthFill.BackgroundTransparency = HealthColor, Transparency(HealthOpacity)
        if Entry.HealthGradient.Enabled then
            local Low, LowOpacity = Color("Low Health", Color3.new(1, 0, 0))
            local Mid, MidOpacity = Color("Mid Health", Color3.fromRGB(255, 165, 0))
            local High, HighOpacity = Color("High Health", Color3.new(0, 1, 0))
            Entry.HealthFill.BackgroundColor3, Entry.HealthFill.BackgroundTransparency = White, 0
            Gradient(Entry.HealthGradient, true, High, HighOpacity, Low, LowOpacity, 90, Mid, MidOpacity)
            if Health < 0.5 then
                local Ratio = Health * 2
                HealthColor, HealthOpacity = Low:Lerp(Mid, Ratio), LowOpacity + (MidOpacity - LowOpacity) * Ratio
            else
                local Ratio = Health * 2 - 1
                HealthColor, HealthOpacity = Mid:Lerp(High, Ratio), MidOpacity + (HighOpacity - MidOpacity) * Ratio
            end
        end
        if Get("Health Text Color Mode", "Health") == "Custom" then HealthColor, HealthOpacity = Color("Health Text Color", White) end
        Text(Entry.HealthText, Get("Player Health", false) and Get("Healthbar Text", false), math.ceil(Data.Health or 0), X, Y, 100, HealthColor, HealthOpacity)
        Entry.HealthText.AnchorPoint = Vector2.new(1, 0.5)
        Entry.HealthText.Position, Entry.HealthText.Size = UDim2.fromOffset(X - HealthWidth - 6, Y + Height * (1 - Health)), UDim2.fromOffset(160, RowHeight)
        Entry.HealthText.TextXAlignment, Entry.HealthText.TextYAlignment = Enum.TextXAlignment.Right, Enum.TextYAlignment.Center
        local Armor = Player and Player:GetAttribute("ArmorValue") or Data.ArmorValue
        Entry.Armor.Position, Entry.Armor.Size = UDim2.fromOffset(X + Width + 3, Y), UDim2.fromOffset(Get("Player Armor Width", 4), Height)
        Entry.ArmorFill.AnchorPoint, Entry.ArmorFill.Position = Vector2.new(0, 1), UDim2.fromScale(0, 1)
        local ArmorTint, ArmorOpacity = Color("Player Armor Color", Color3.fromRGB(90, 150, 255))
        Entry.ArmorFill.Size, Entry.ArmorFill.BackgroundColor3 = UDim2.fromScale(1, math.clamp((tonumber(Armor) or 0) / 100, 0, 1)), ArmorTint
        Entry.ArmorFill.BackgroundTransparency = Transparency(ArmorOpacity)
        local Tags, Selected = {}, Get("Player Flags Types", {})
        local Yaw, Pitch = Data.Yaw, Data.Pitch
        if Get("Player Flags", false) and type(Game.EntitySnapshot) == "function" and (Yaw == nil or Pitch == nil) then
            local Current = Game.EntitySnapshot(Data)
            local Snapshot = Current and Current.Snapshot
            if Snapshot then
                if Yaw == nil then Yaw = Snapshot.Yaw end
                if Pitch == nil then Pitch = Snapshot.Pitch end
            end
        end
        local function Tag(Name, TextValue, Condition) if Condition and type(Selected) == "table" and (Selected[Name] == true or table.find(Selected, Name)) then table.insert(Tags, TextValue) end end
        Tag("Defuse kit", "KIT", Player and Player:GetAttribute("DefuseKit"))
        Tag("Bomb", "BOMB", WeaponName == "C4" or WeaponName == "Bomb")
        Tag("Planting", "PLANT", Data.Planting)
        Tag("Defusing", "DEFUSE", Data.Defusing)
        Tag("Aiming", "ZOOM", Weapon and (Weapon.ZoomLevel or 0) > 0)
        Tag("Yaw", string.format("Y %.0f", math.deg(Yaw or 0)), true)
        Tag("Pitch", string.format("P %.0f", math.deg(Pitch or 0)), true)
        Tag("Team", tostring(Data.Team or Data.Data and Data.Data.Team or Player and Player:GetAttribute("Team") or ""), true)
        Text(Entry.Flags, Get("Player Flags", false) and #Tags > 0, table.concat(Tags, "\n"), X + Width + SidePadding + 30, Y, 80, Color("Player Flags Color", White))
        Entry.Flags.TextXAlignment, Entry.Flags.TextYAlignment, Entry.Flags.Size = Enum.TextXAlignment.Left, Enum.TextYAlignment.Top, UDim2.fromOffset(100, RowHeight * math.max(1, #Tags))
        if Get("Player Head Dot", false) and Head then
            local Point, Visible = Camera:WorldToViewportPoint(Game.PartPosition(Data, Head))
            local Size = Get("Player Head Dot Size", 5)
            local HeadTint, HeadOpacity = Color("Player Head Dot Color", White)
            Entry.Head.Visible, Entry.Head.Position, Entry.Head.Size, Entry.Head.BackgroundColor3 = Visible, UDim2.fromOffset(Point.X, Point.Y), UDim2.fromOffset(Size, Size), HeadTint
            Entry.Head.BackgroundTransparency = Transparency(HeadOpacity)
        end
        if Get("Player Skeleton", false) then
            for Index, Bone in Bones do
                local A, B = Model:FindFirstChild(Bone[1]), Model:FindFirstChild(Bone[2])
                if A and B then
                    local AP, AV = Camera:WorldToViewportPoint(Game.PartPosition(Data, A))
                    local BP, BV = Camera:WorldToViewportPoint(Game.PartPosition(Data, B))
                    if AV and BV then
                        if Get("Skeleton Outline", false) then Line(Entry.SkeletonOutlines[Index], Vector2.new(AP.X, AP.Y), Vector2.new(BP.X, BP.Y), Get("Skeleton Outline Thickness", 3), Color("Skeleton Outline Color", Black)) end
                        Line(Entry.Lines[Index], Vector2.new(AP.X, AP.Y), Vector2.new(BP.X, BP.Y), Get("Player Skeleton Thickness", 1), Color("Player Skeleton Color", White))
                    end
                end
            end
        end
        if Get("Player Tracer", false) then Line(Entry.Lines[#Bones + 1], Vector2.new(Camera.ViewportSize.X * 0.5, Camera.ViewportSize.Y), Vector2.new(X + Width * 0.5, Y + Height), Get("Player Tracer Thickness", 1), Color("Player Tracer Color", White)) end
        if Get("Player Chams", false) then
            if not Entry.Highlight then Entry.Highlight = New("Highlight", Services.Workspace, {Name = "Swift2Chams"}) end
            Entry.Highlight.Adornee, Entry.Highlight.Enabled = Model, true
            Entry.Highlight.DepthMode = Get("Player Chams Visible Only", false) and Enum.HighlightDepthMode.Occluded or Enum.HighlightDepthMode.AlwaysOnTop
            local Fill, FillAlpha = Color("Player Chams Color", White)
            local Edge, EdgeAlpha = Color("Player Chams Outline Color", White)
            Entry.Highlight.FillColor, Entry.Highlight.OutlineColor = Fill, Edge
            Entry.Highlight.FillTransparency, Entry.Highlight.OutlineTransparency = 1 - Get("Player Chams Opacity", 0.35) * (FillAlpha or 1), 1 - (EdgeAlpha or 1)
        end
    end
    function Self:Update()
        local Camera, Seen = Game.Camera(), {}
        for _, Category in {"Character", "Bomb", "DroppedWeapon"} do
            local Enabled = Camera and Get(Category == "Character" and "Esp Enabled" or Category .. " ESP", false)
            if Enabled then
                for Id, Data in Game.Entities(Category) do
                    if type(Game.Entity) == "function" then Data = Game.Entity(Category, Id) end
                    if not Data or type(Game.EntityCurrent) == "function" and not Game.EntityCurrent(Data, Category) then continue end
                    local Key = Category .. ":" .. tostring(Id)
                    local Entry = self.Entries[Key]
                    if Entry and Entry.Entity ~= Data then Destroy(Entry); Entry = nil end
                    if not Entry then Entry = Create(); Entry.Entity = Data; self.Entries[Key] = Entry end
                    Seen[Key] = true
                    Render(Category, Data, Entry, Camera)
                end
            end
        end
        for Key, Entry in self.Entries do
            if not Seen[Key] then
                Destroy(Entry)
                self.Entries[Key] = nil
            end
        end
    end
    function Self:Destroy()
        for _, Entry in self.Entries do if Entry.Highlight then Entry.Highlight:Destroy() end end
        table.clear(self.Entries)
        Gui:Destroy()
    end
State.Controllers.ESP = Self
end

Functions.Utility.Register("ESP", State.Controllers.ESP, "Colon")

do
    local Get, Color = Functions.Config.Get, Functions.Config.Color
    local Lighting, Terrain = State.Services.Lighting, State.Services.Workspace.Terrain
    local Self = {Originals = {}, Owned = {}, Objects = {}, Elapsed = 0}
    local function Object(Class, Parent)
        local Found = Self.Objects[Class]
        if Found and Found.Parent == Parent then return Found end
        Found = Parent:FindFirstChildOfClass(Class)
        if not Found then
            Found = Instance.new(Class)
            Found.Name = "Swift" .. Class
            if Found:IsA("PostEffect") or Class == "Clouds" then Found.Enabled = false end
            Self.Owned[Found] = true
            Found.Parent = Parent
        end
        Self.Objects[Class] = Found
        return Found
    end
    local function Reconcile(Desired)
        for Target, Saved in Self.Originals do
            for Property, Value in Saved do
                if not Desired[Target] or Desired[Target][Property] == nil then
                    if Target.Parent then Target[Property] = Value end
                    Saved[Property] = nil
                end
            end
            if not next(Saved) then
                Self.Originals[Target] = nil
                if Self.Owned[Target] then Target:Destroy(); Self.Owned[Target] = nil end
            end
        end
        for Target, Properties in Desired do
            local Saved = Self.Originals[Target] or {}
            Self.Originals[Target] = Saved
            for Property, Value in Properties do
                if Saved[Property] == nil then Saved[Property] = Target[Property] end
                if Target[Property] ~= Value then Target[Property] = Value end
            end
        end
    end
    local function Allowed(Class)
        if not Get("Disable Post Effects", false) then return true end
        local Disabled = Get("Disabled Effects", nil)
        return Disabled ~= nil and not table.find(Disabled, Class)
    end
    local function Update()
        local Desired, Properties = {}, {}
        Desired[Lighting] = Properties
        if Get("Fullbright", false) then
            Properties.Brightness = Get("World Brightness", 2)
            Properties.GlobalShadows = Get("World Shadows", "Off") == "On"
            Properties.Ambient, Properties.OutdoorAmbient = Color3.fromRGB(178, 178, 178), Color3.fromRGB(178, 178, 178)
        end
        if Get("Global Shadows Enabled", false) then Properties.GlobalShadows = Get("Global Shadows", "On") == "On" end
        if Get("Custom Time", false) then Properties.ClockTime = math.clamp(Get("Clock Time", 12), 0, 24) end
        if Get("Ambient Override", false) then
            Properties.Ambient = Color("Ambient Color", Color3.fromRGB(178, 178, 178))
            Properties.OutdoorAmbient = Properties.Ambient
        end
        if Get("Remove Fog", false) then
            Properties.FogStart, Properties.FogEnd = 0, Get("Fog Distance", 1000000)
            for _, Object in Lighting:GetDescendants() do
                if Object:IsA("Atmosphere") then Desired[Object] = {Density = 0, Haze = 0} end
            end
        end
        if Get("Disable Post Effects", false) then
            local Selected = Get("Disabled Effects", nil)
            for _, Root in {Lighting, State.Services.Workspace.CurrentCamera} do
                for _, Object in Root:GetDescendants() do
                    if Object:IsA("PostEffect") and (Selected == nil or table.find(Selected, Object.ClassName)) then Desired[Object] = {Enabled = false} end
                end
            end
        end
        if Get("Exposure Changer", false) then Properties.ExposureCompensation = Get("World Exposure", 0) end
        if Get("Environment Changer", false) then
            Properties.EnvironmentDiffuseScale = Get("Environment Diffuse", 1)
            Properties.EnvironmentSpecularScale = Get("Environment Specular", 1)
            Properties.GeographicLatitude = Get("Sun Latitude", 41.73)
            Properties.ColorShift_Top = Color("Light Top Color", Color3.new(0, 0, 0))
            Properties.ColorShift_Bottom = Color("Light Bottom Color", Color3.new(0, 0, 0))
        end
        if Get("Fog Changer", false) and not Get("Remove Fog", false) then
            Properties.FogColor = Color("World Fog Color", Color3.new(0.7, 0.75, 0.8))
            Properties.FogStart = Get("World Fog Start", 0)
            Properties.FogEnd = math.max(Properties.FogStart + 1, Get("World Fog End", 500))
        end
        if Get("Sunrays Changer", false) and Allowed("SunRaysEffect") then
            Desired[Object("SunRaysEffect", Lighting)] = {Enabled = true, Intensity = Get("Sunrays Intensity", 0.25), Spread = Get("Sunrays Spread", 1)}
        end
        if Get("Cloud Changer", false) then
            Desired[Object("Clouds", Terrain)] = {Enabled = true, Cover = Get("Cloud Cover", 0.5), Density = Get("Cloud Density", 0.6), Color = Color("Cloud Color", Color3.new(1, 1, 1))}
        end
        if Get("Bloom Changer", false) and Allowed("BloomEffect") then
            Desired[Object("BloomEffect", Lighting)] = {Enabled = true, Intensity = Get("Bloom Intensity", 0.6), Size = Get("Bloom Size", 24), Threshold = Get("Bloom Threshold", 0.9)}
        end
        if Get("Color Grading", false) and Allowed("ColorCorrectionEffect") then
            Desired[Object("ColorCorrectionEffect", Lighting)] = {Enabled = true, Brightness = Get("Grade Brightness", 0), Contrast = Get("Grade Contrast", 0.15), Saturation = Get("Grade Saturation", 0.2), TintColor = Color("Grade Tint", Color3.new(1, 1, 1))}
        end
        if Get("Depth Of Field", false) and Allowed("DepthOfFieldEffect") then
            Desired[Object("DepthOfFieldEffect", Lighting)] = {Enabled = true, FocusDistance = Get("Focus Distance", 25), InFocusRadius = Get("Focus Radius", 20), NearIntensity = Get("Near Blur", 0.1), FarIntensity = Get("Far Blur", 0.3)}
        end
        if Get("Atmosphere Changer", false) and not Get("Remove Fog", false) then
            Desired[Object("Atmosphere", Lighting)] = {Density = Get("Atmosphere Density", 0.3), Offset = Get("Atmosphere Offset", 0), Haze = Get("Atmosphere Haze", 1), Glare = Get("Atmosphere Glare", 0), Color = Color("Atmosphere Color", Color3.new(0.8, 0.85, 1)), Decay = Color("Atmosphere Decay", Color3.new(0.4, 0.45, 0.55))}
        end
        if Get("Water Changer", false) then
            Desired[Terrain] = {WaterColor = Color("Water Color", Color3.new(0.1, 0.4, 0.5)), WaterTransparency = Get("Water Transparency", 0.3), WaterReflectance = Get("Water Reflectance", 0.5), WaterWaveSize = Get("Water Wave Size", 0.15), WaterWaveSpeed = Get("Water Wave Speed", 10)}
        end
        Reconcile(Desired)
    end
    function Self:Update(Delta)
        Self.Elapsed += Delta
        if Self.Elapsed >= 0.1 then Self.Elapsed = 0; Update() end
    end
    function Self:Destroy() Reconcile({}) end
State.Controllers.World = Self
end

Functions.Utility.Register("World", State.Controllers.World, "Colon")

do
    local Get = Functions.Config.Get
    local Lighting = State.Services.Lighting
    local Self = {Hidden = {}, Elapsed = 0}
    local Faces = {"SkyboxBk", "SkyboxDn", "SkyboxFt", "SkyboxLf", "SkyboxRt", "SkyboxUp"}
    local Names = {"Back", "Down", "Front", "Left", "Right", "Up"}
    local Presets = {
        Sunset = {323494035, 323494368, 323494130, 323494252, 323494067, 323493360},
        Galaxy = {159454299, 159454296, 159454293, 159454286, 159454300, 159454288},
        ["Red Night"] = {401664839, 401664862, 401664960, 401664881, 401664901, 401664936},
        ["Warm Horizon"] = {162001887, 161998893, 162001897, 162001904, 162001919, 162001926},
    }
    local function Asset(Value)
        local Id = tostring(Value or ""):match("^%s*(%d+)%s*$") or tostring(Value or ""):match("^rbxassetid://(%d+)$")
        return Id and tonumber(Id) > 0 and "rbxassetid://" .. Id or nil
    end
    function Self:Clear()
        if self.Sky then self.Sky:Destroy(); self.Sky = nil end
        for Object in self.Hidden do if Object.Parent == nil then Object.Parent = Lighting end; self.Hidden[Object] = nil end
    end
    function Self:Update(Delta)
        self.Elapsed += Delta
        if self.Elapsed < 0.1 then return end
        self.Elapsed = 0
        if not Get("Custom Sky", false) then self:Clear(); return end
        if not self.Sky then self.Sky = Instance.new("Sky"); self.Sky.Name = "Swift2Sky"; self.Sky.CelestialBodiesShown = false; self.Sky.Parent = Lighting end
        for _, Object in Lighting:GetChildren() do if Object:IsA("Sky") and Object ~= self.Sky then self.Hidden[Object] = true; Object.Parent = nil end end
        local Preset = Get("Sky Preset", "Sunset")
        local Values = Presets[Preset] or Presets.Sunset
        for Index, Face in Faces do
            self.Sky[Face] = Preset == "Custom" and (Asset(Get("Sky " .. Names[Index], "")) or Asset(Get("Sky All Faces", "")) or "rbxassetid://" .. Values[Index]) or "rbxassetid://" .. Values[Index]
        end
    end
    function Self:Destroy() self:Clear() end
State.Controllers.Sky = Self
end

Functions.Utility.Register("Sky", State.Controllers.Sky, "Colon")

do
    local Get, Color = Functions.Config.Get, Functions.Config.Color
    local Workspace = State.Services.Workspace
    local function CreateRain()
        return Functions.Visuals.CreateRain()
    end
    local Self = {Emitters = {}, Rain = nil, Values = {}, Elapsed = 0}
    local Definitions = {
        Snow = {Texture = "rbxassetid://241876428", Size = 0.15, Lifetime = 5, Speed = 5, Rate = 160, Radius = 32},
        Orbs = {Texture = "rbxasset://textures/particles/flare_main.dds", Size = 0.22, Lifetime = 8, Speed = 0.6, Rate = 3, Radius = 12},
    }
    local Parameters = RaycastParams.new()
    Parameters.FilterType = Enum.RaycastFilterType.Exclude
    local function ClearRain()
        if Self.Rain then Self.Rain:Destroy(); Self.Rain = nil end
        Self.RainCamera = nil
        table.clear(Self.Values)
    end
    local function Set(Name, Method, Value)
        if Self.Values[Name] ~= Value then
            Self.Values[Name] = Value
            Self.Rain[Method](Self.Rain, Value)
        end
    end
    local function ConfigureRain(Camera)
        if not Camera or not Get("Rain", false) then return end
        local Created = Self.Rain == nil
        if Created then Self.Rain = CreateRain() end
        local Character = State.LocalPlayer and State.LocalPlayer.Character
        local ThirdPerson = State.ThirdPersonModel
        local Map = Workspace:FindFirstChild("Map")
        local Geometry = Map and Map:FindFirstChild("Geometry")
        if Created or Self.RainCamera ~= Camera or Self.Character ~= Character or Self.ThirdPerson ~= ThirdPerson or Self.Geometry ~= Geometry then
            Self.RainCamera, Self.Character, Self.ThirdPerson, Self.Geometry = Camera, Character, ThirdPerson, Geometry
            if Geometry then
                Self.Rain:SetCollisionMode(Self.Rain.CollisionMode.Whitelist, {Geometry, Workspace.Terrain})
            else
                local Ignore = {Camera}
                if State.Characters then table.insert(Ignore, State.Characters) end
                if Character then table.insert(Ignore, Character) end
                if ThirdPerson then table.insert(Ignore, ThirdPerson) end
                Self.Rain:SetCollisionMode(Self.Rain.CollisionMode.Blacklist, Ignore)
            end
        end
        local Tint, Opacity = Color("Rain Color", Color3.new(0.8, 0.85, 1))
        Set("RoofCheck", "SetRoofCheck", Get("Rain Roof Check", false))
        Set("Color", "SetColor", Tint)
        Set("Transparency", "SetTransparency", 1 - (Opacity or 1) * Get("Rain Opacity", 0.65))
        Set("Intensity", "SetIntensityRatio", Get("Rain Intensity", 0.45))
        Set("Speed", "SetSpeedRatio", Get("Rain Speed", 0.8))
        Set("Radius", "SetRadius", Get("Rain Radius", 48))
        Set("Splashes", "SetSplashRatio", Get("Rain Splashes", false) and 1 or 0)
        Set("Emission", "SetLightEmission", Get("Rain Light Emission", 0.05))
        Set("Influence", "SetLightInfluence", Get("Rain Light Influence", 0.9))
        Set("Volume", "SetVolume", Get("Rain Sound", false) and Get("Rain Volume", 0.2) or 0)
        local Strength = Get("Rain Wind", false) and Get("Rain Wind Strength", 0.25) or 0
        local Angle = math.rad(Get("Rain Wind Direction", 0))
        Set("Direction", "SetDirection", Vector3.new(math.sin(Angle) * Strength, -1, math.cos(Angle) * Strength).Unit)
        if Created then Self.Rain:Enable() end
    end
    local function Clear(Name)
        local Entry = Self.Emitters[Name]
        if Entry then Entry.Anchor:Destroy(); Self.Emitters[Name] = nil end
    end
    local function Create(Name, Camera)
        local Anchor = Instance.new("Part")
        Anchor.Name, Anchor.Anchored, Anchor.Transparency, Anchor.CastShadow = "Swift2" .. Name, true, 1, false
        Anchor.CanCollide, Anchor.CanTouch, Anchor.CanQuery = false, false, false
        local Emitter = Instance.new("ParticleEmitter", Anchor)
        Emitter.Shape, Emitter.ShapeStyle = Enum.ParticleEmitterShape.Box, Enum.ParticleEmitterShapeStyle.Volume
        Emitter.EmissionDirection, Emitter.SpreadAngle, Emitter.LightInfluence = Enum.NormalId.Bottom, Vector2.new(10, 10), 0
        Emitter.Orientation = Enum.ParticleOrientation.FacingCamera
        Emitter.Enabled, Emitter.LockedToPart, Emitter.VelocityInheritance = false, Name == "Orbs", 0
        if Name == "Orbs" then
            Emitter.EmissionDirection, Emitter.SpreadAngle, Emitter.Drag = Enum.NormalId.Top, Vector2.new(180, 180), 0.2
        end
        local Entry = {Anchor = Anchor, Emitter = Emitter, Camera = Camera}
        Self.Emitters[Name] = Entry
        return Entry
    end
    function Self:Update(Delta)
        Delta = Delta or 1 / 60
        local Camera = Functions.Game.Camera()
        if self.Rain and (not Camera or not Get("Rain", false) or self.RainCamera ~= Camera) then ClearRain() end
        for Name, Entry in self.Emitters do
            if not Camera or not Get(Name, false) or Entry.Camera ~= Camera then Clear(Name) end
        end
        self.Elapsed += Delta
        if self.Elapsed < 0.1 then
            for Name, Entry in self.Emitters do if Camera then Entry.Anchor.CFrame = CFrame.new(Camera.CFrame.Position + Vector3.new(0, Name == "Orbs" and 0 or 15, 0)) end end
            return
        end
        self.Elapsed = 0
        ConfigureRain(Camera)
        for Name, Definition in Definitions do
            if not Camera or not Get(Name, false) then Clear(Name); continue end
            local Entry = self.Emitters[Name] or Create(Name, Camera)
            local Radius = math.clamp(Get(Name .. " Radius", Definition.Radius), 5, Name == "Orbs" and 80 or 150)
            local Tint, Opacity = Color(Name .. " Color", Name == "Orbs" and Color3.fromRGB(170, 150, 255) or Color3.new(0.85, 0.9, 1))
            local Emitter = Entry.Emitter
            local Texture = tostring(Get(Name .. " Texture", "")):match("^%s*(.-)%s*$")
            Emitter.Texture = Texture ~= "" and (Texture:match("^%d+$") and "rbxassetid://" .. Texture or Texture) or Definition.Texture
            Emitter.Color, Emitter.Size = ColorSequence.new(Tint), NumberSequence.new(Get(Name .. " Size", Definition.Size))
            local Transparency = 1 - (Opacity or 1) * Get(Name .. " Opacity", Name == "Orbs" and 1 or 0.65)
            Emitter.Transparency = NumberSequence.new({NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(Name == "Orbs" and 0.08 or 0.1, Transparency), NumberSequenceKeypoint.new(Name == "Orbs" and 0.8 or 0.85, Transparency), NumberSequenceKeypoint.new(1, 1)})
            Emitter.Lifetime = NumberRange.new(Definition.Lifetime)
            local Speed = Get(Name .. " Speed", Definition.Speed)
            local Count = Name == "Orbs" and math.floor(math.clamp(Get("Orbs Count", 24), 5, 100))
            if Name == "Orbs" then Speed = math.clamp(Speed, 0, 5) end
            Emitter.Speed = Name == "Orbs" and NumberRange.new(Speed * 0.5, Speed) or NumberRange.new(Speed)
            Emitter.Rate = Count and Count / Definition.Lifetime or Get("Snow Density", 90)
            Emitter.LightEmission = Get(Name .. " Light Emission", Name == "Orbs" and Get("Orbs Glow", 0.7) or Get("Snow Glow", 0.2))
            Emitter.LightInfluence = Get(Name .. " Light Influence", 0)
            local Wind = Get(Name .. " Wind", false) and Get(Name .. " Wind Strength", 0.25) * 30 or 0
            local Angle = math.rad(Get(Name .. " Wind Direction", 0))
            Emitter.Acceleration = Vector3.new(math.sin(Angle) * Wind, Name == "Orbs" and 0.08 or -3, math.cos(Angle) * Wind)
            if Name == "Snow" then Emitter.Acceleration = Vector3.new(Get("Snow Drift", 1), -0.3, 0) end
            Entry.Anchor.Size = Vector3.new(Radius * 2, Name == "Orbs" and Radius or 1, Radius * 2)
            Entry.Anchor.CFrame, Entry.Anchor.Parent = CFrame.new(Camera.CFrame.Position + Vector3.new(0, Name == "Orbs" and 0 or 15, 0)), Camera
            if Get(Name .. " Roof Check", false) then
                Parameters.FilterDescendantsInstances = {Camera, State.Characters or Camera}
                Emitter.Enabled = Workspace:Raycast(Camera.CFrame.Position, Vector3.new(0, 32, 0), Parameters) == nil
            else Emitter.Enabled = true end
            if Count and Emitter.Enabled and Entry.Count ~= Count then
                if Entry.Count then Emitter:Clear() end
                Emitter:Emit(Count)
                Entry.Count = Count
            end
        end
    end
    function Self:Destroy()
        ClearRain()
        for Name in self.Emitters do Clear(Name) end
    end
State.Controllers.Weather = Self
end

Functions.Utility.Register("Weather", State.Controllers.Weather, "Colon")

do
    local Get, Color = Functions.Config.Get, Functions.Config.Color
    local Game, Utility = Functions.Game, Functions.Utility
    local Identity, Connect, Own, Notify = Utility.Identity, Utility.Connect, Utility.Own, Utility.Notify
    local Parent = State.GuiParent or State.Services.CoreGui
    local Self = {Circles = {}, Time = 0}
    local Parameters = RaycastParams.new()
    Parameters.FilterType, Parameters.RespectCanCollide = Enum.RaycastFilterType.Exclude, false
    local Segments = 48
    local function Clear()
        for _, Circle in Self.Circles do Circle.Model:Destroy() end
        table.clear(Self.Circles)
        Self.Grounded, Self.Character, Self.Ground = nil, nil, nil
    end
    local function Trace(Position)
        local Ignore = {State.Characters, Game.Camera()}
        if State.ThirdPersonModel then table.insert(Ignore, State.ThirdPersonModel) end
        local Map = State.Services.Workspace:FindFirstChild("Map")
        local Geometry = Map and Map:FindFirstChild("Geometry")
        Parameters.FilterType = Geometry and Enum.RaycastFilterType.Include or Enum.RaycastFilterType.Exclude
        Parameters.FilterDescendantsInstances = Geometry and {Geometry, State.Services.Workspace.Terrain} or Ignore
        return State.Services.Workspace:Raycast(Position + Vector3.new(0, 1, 0), Vector3.new(0, -64, 0), Parameters)
    end
    local function Spawn(Hit)
        if not Hit then return end
        if #Self.Circles >= 4 then table.remove(Self.Circles, 1).Model:Destroy() end
        local Model, Parts = Instance.new("Model"), {}
        Model.Name, Model.Parent = "SwiftJumpCircle", Game.Camera()
        local Origin = Hit.Position + Hit.Normal * 0.08
        local Right = Hit.Normal:Cross(math.abs(Hit.Normal.X) < 0.9 and Vector3.new(1, 0, 0) or Vector3.new(0, 0, 1)).Unit
        local Forward = Right:Cross(Hit.Normal).Unit
        local Tint, Alpha = Color("Jump Circle Color", Color3.new(1, 1, 1))
        local EndColor = Color("Jump Circle End Color", Tint)
        for Index = 1, Segments do
            local Part = Instance.new("Part")
            Part.Name, Part.Shape, Part.Anchored = "Ring", Enum.PartType.Cylinder, true
            Part.CanCollide, Part.CanTouch, Part.CanQuery, Part.CastShadow = false, false, false, false
            Part.Material, Part.Color, Part.Transparency = Get("Jump Circle Glow", false) and Enum.Material.Neon or Enum.Material.SmoothPlastic, Tint, 1
            Part.Parent = Model
            Parts[Index] = Part
        end
        table.insert(Self.Circles, {Model = Model, Parts = Parts, Origin = Origin, Right = Right, Forward = Forward,
            Time = Self.Time, Duration = math.max(0.1, Get("Jump Circle Duration", 1)),
            Radius = Get("Jump Circle Radius", 4), Thickness = Get("Jump Circle Thickness", 0.1),
            Color = Tint, EndColor = EndColor, Alpha = Alpha})
    end
    function Self:Update(Delta)
        Self.Time += Delta
        local Simulation, Character = Game.Simulation()
        if not Get("Jump Circles", false) or not Simulation or not Game.Camera()
            or Character and Character.Health and Character.Health <= 0 then Clear(); return end
        if Self.Character ~= Character then Clear(); Self.Character = Character end
        local Grounded = Simulation.OnGround ~= false
        if Self.Grounded ~= nil and Self.Grounded ~= Grounded then
            if not Grounded then Spawn(Self.Ground or Trace(Simulation.Position))
            elseif Get("Jump Circle Landing", false) then Spawn(Trace(Simulation.Position)) end
        end
        if Grounded then Self.Ground = Trace(Simulation.Position) end
        Self.Grounded = Grounded
        for Index = #Self.Circles, 1, -1 do
            local Circle = Self.Circles[Index]
            local Progress = math.clamp((Self.Time - Circle.Time) / Circle.Duration, 0, 1)
            if Progress >= 1 then Circle.Model:Destroy(); table.remove(Self.Circles, Index)
            else
                Circle.Model.Parent = Game.Camera()
                local Radius = Circle.Radius * (0.1 + 0.9 * (1 - (1 - Progress) ^ 3))
                local Color = Circle.Color:Lerp(Circle.EndColor, Progress)
                for Segment, Part in Circle.Parts do
                    local A, B = (Segment - 1) / Segments * math.pi * 2, Segment / Segments * math.pi * 2
                    local First = Circle.Origin + (Circle.Right * math.cos(A) + Circle.Forward * math.sin(A)) * Radius
                    local Last = Circle.Origin + (Circle.Right * math.cos(B) + Circle.Forward * math.sin(B)) * Radius
                    Part.Size = Vector3.new((Last - First).Magnitude + Circle.Thickness * 0.2, Circle.Thickness, Circle.Thickness)
                    Part.CFrame = CFrame.lookAt((First + Last) * 0.5, Last) * CFrame.Angles(0, math.pi * 0.5, 0)
                    Part.Color, Part.Transparency = Color, 1 - Circle.Alpha * (1 - Progress) ^ 0.7
                end
            end
        end
    end
    Connect(State.Services.Workspace:GetPropertyChangedSignal("CurrentCamera"), Clear)
    function Self:Destroy() Clear() end
State.Controllers.JumpCircle = Self
end

Functions.Utility.Register("JumpCircle", State.Controllers.JumpCircle, "Colon")

do
    local Get, Color = Functions.Config.Get, Functions.Config.Color
    local Game, Utility = Functions.Game, Functions.Utility
    local Identity, Connect, Own, Notify = Utility.Identity, Utility.Connect, Utility.Own, Utility.Notify
    local Parent = State.GuiParent or State.Services.CoreGui
    local Self = {Alive = true, Halo = nil, Aura = nil, Clock = 0, Request = 0, Templates = {}, Failed = {}}
    local Assets = {Starlight = "134645216613107", Heavenly = "139300897520961", Ribbon = "132069507632161",
        Sakura = "81755778619404", Angel = "97658130917593", Wind = "80694081850877", Flow = "119913533725648", Star = "73754563740680"}
    local Folder
    local function Part(Name, Parent, Shape)
        local Object = Instance.new(Shape or "Part")
        Object.Name, Object.Anchored, Object.Massless, Object.Material = Name, false, true, Enum.Material.Neon
        Object.LocalTransparencyModifier = 0
        Object.CanCollide, Object.CanTouch, Object.CanQuery, Object.CastShadow = false, false, false, false
        Object.Parent = Parent
        return Object
    end
    local function Clear(Name)
        if Self[Name] then Self[Name].Model:Destroy(); Self[Name] = nil end
    end
    local function Create(Name, Count, Anchor)
        local Model = Instance.new("Model")
        Model.Name, Model.Parent = "Swift" .. Name, Folder
        local Data = {Model = Model, Parts = {}, Joints = {}, Anchor = Anchor}
        for Index = 1, Count do
            local Object = Part(Name .. Index, Model)
            Object.Shape = Enum.PartType.Cylinder
            Object.CFrame = Anchor.CFrame
            local Joint = Instance.new("Weld")
            Joint.Name, Joint.Part0, Joint.Part1, Joint.C0 = Name .. "Joint", Anchor, Object, CFrame.new()
            Joint.Parent = Object
            table.insert(Data.Parts, Object)
            table.insert(Data.Joints, Joint)
        end
        Self[Name] = Data
        return Data
    end
    local function Source()
        local _, Character = Game.Simulation()
        if Character and type(Character.Health) == "number" and Character.Health <= 0 then return nil end
        local Model = Get("Avatar Replacer", false) and State.AvatarModel or nil
        if not Model or not Model.Parent then Model = State.ThirdPersonModel end
        if not Model or not Model.Parent then return nil end
        local Root = Model and (Model:FindFirstChild("UpperTorso") or Model:FindFirstChild("Torso") or Model:FindFirstChild("HumanoidRootPart"))
        local Head = Model and Model:FindFirstChild("Head")
        if not Root or not Root:IsA("BasePart") or not Head or not Head:IsA("BasePart") then return nil end
        return Root, Head, Model
    end
    local function PrepareAura(Template, Model)
        Clear("Aura")
        if not Model then return end
        local Container = Instance.new("Folder")
        Container.Name, Container.Parent = "SwiftAura", Folder
        local Clone, Owned, Emitters = Template:Clone(), {}, {}
        for _, Item in Clone:GetDescendants() do
            if Item:IsA("LuaSourceContainer") then Item:Destroy() end
        end
        for _, Body in Clone:GetChildren() do
            local Target = Model:FindFirstChild(Body.Name)
            if Target and Target:IsA("BasePart") then
                for _, Item in Body:GetChildren() do
                    if Item:IsA("Attachment") or Item:IsA("ParticleEmitter") or Item:IsA("Beam") or Item:IsA("Trail") then
                        Item.Parent = Target
                        table.insert(Owned, Item)
                        if Item:IsA("ParticleEmitter") or Item:IsA("Beam") or Item:IsA("Trail") then table.insert(Emitters, Item) end
                        for _, Child in Item:GetDescendants() do
                            if Child:IsA("ParticleEmitter") or Child:IsA("Beam") or Child:IsA("Trail") then table.insert(Emitters, Child) end
                        end
                    end
                end
            end
        end
        Clone:Destroy()
        Self.Aura = {Model = Container, Source = Model, Owned = Owned, Emitters = Emitters}
    end
    local function RemoveAura()
        if Self.Aura then for _, Item in Self.Aura.Owned do Item:Destroy() end end
        Clear("Aura")
    end
    local function ResetSource(Model)
        Clear("Halo"); RemoveAura()
        if Folder then Folder:Destroy(); Folder = nil end
        Self.Source = Model
        if Model then
            Folder = Instance.new("Folder")
            Folder.Name, Folder.Parent = "SwiftCharacterEffects", Model
        end
    end
    local function UpdateAura(Model)
        local Preset = Get("Character Aura Preset", "Angel")
        if not Get("Character Aura", false) or not Model then
            if Self.Loading then Self.Request += 1; Self.Loading = nil end
            RemoveAura()
            return
        end
        if Self.Aura and (Self.Aura.Source ~= Model or Self.Aura.Preset ~= Preset) then RemoveAura() end
        if not Self.Aura and not Self.Loading and not Self.Failed[Preset] and Assets[Preset] then
            if Self.Templates[Preset] then
                PrepareAura(Self.Templates[Preset], Model)
                if Self.Aura then Self.Aura.Preset = Preset end
            else
                Self.Request += 1
                local Request = Self.Request
                Self.Loading = Preset
                task.spawn(function()
                    local Okay, Objects = Identity(function() return game:GetObjects("rbxassetid://" .. Assets[Preset]) end, 2)
                    local Template = Okay and Objects and Objects[1]
                    if Request ~= Self.Request or not State.Alive or not Self.Alive then
                        if Template then Template:Destroy() end
                        return
                    end
                    Self.Loading = nil
                    if not Template then
                        Self.Failed[Preset] = true
                        Notify("Could Not Load " .. Preset .. " Aura", "Warning")
                        return
                    end
                    Self.Templates[Preset] = Template
                end)
            end
        end
        if Self.Aura then
            local Color, Alpha = Color("Character Aura Color", Color3.fromRGB(133, 220, 255))
            if Self.Aura.Color ~= Color or Self.Aura.Alpha ~= Alpha then
                for _, Item in Self.Aura.Emitters do
                    Item.Color = ColorSequence.new(Color)
                    if Item:IsA("ParticleEmitter") then Item.Transparency = NumberSequence.new(1 - Alpha) end
                end
                Self.Aura.Color, Self.Aura.Alpha = Color, Alpha
            end
        end
    end
    function Self:Update(Delta)
        if not Self.Alive then return end
        if not Get("Character Halo", false) and not Get("Character Aura", false) then
            ResetSource(nil)
            if Self.Loading then Self.Request += 1; Self.Loading = nil end
            return
        end
        Self.Clock += math.clamp(Delta or 0, 0, 0.1)
        local Root, Head, Model = Source()
        if not Root then
            ResetSource(nil)
            return
        end
        if Self.Source ~= Model or not Folder or not Folder.Parent then ResetSource(Model) end
        if Get("Character Halo", false) then
            if Self.Halo and Self.Halo.Anchor ~= Head then Clear("Halo") end
            local Halo = Self.Halo or Create("Halo", 48, Head)
            local Radius, Thickness = Get("Halo Radius", 1), Get("Halo Thickness", 0.08)
            local Color, Alpha = Color("Halo Color", Color3.fromRGB(255, 215, 110))
            local Bob = Get("Halo Animation", false) and math.sin(Self.Clock * Get("Halo Speed", 1.5)) * 0.15 or 0
            local Center = CFrame.new(0, Get("Halo Height", 1.2) + Bob, 0)
                * CFrame.Angles(math.rad(Get("Halo Tilt", 0)), 0, 0)
            for Index, Object in Halo.Parts do
                local Angle, Next = (Index - 1) * math.pi / 24, Index * math.pi / 24
                local A, B = Vector3.new(math.cos(Angle) * Radius, 0, math.sin(Angle) * Radius), Vector3.new(math.cos(Next) * Radius, 0, math.sin(Next) * Radius)
                Object.Size = Vector3.new((B - A).Magnitude + 0.01, Thickness, Thickness)
                local Offset = Center * CFrame.lookAt((A + B) * 0.5, B) * CFrame.Angles(0, math.pi / 2, 0)
                Halo.Joints[Index].C0 = Offset
                Object.Color, Object.Transparency = Color, 1 - Alpha
                Object.LocalTransparencyModifier = 0
            end
        else Clear("Halo") end
        UpdateAura(Model)
    end
    function Self:Destroy()
        self.Alive = false
        self.Request += 1
        ResetSource(nil)
        for _, Template in self.Templates do Template:Destroy() end
    end
State.Controllers.CharacterEffects = Self
end

Functions.Utility.Register("CharacterEffects", State.Controllers.CharacterEffects, "Colon")

do
    local Get, Color = Functions.Config.Get, Functions.Config.Color
    local Game, Utility = Functions.Game, Functions.Utility
    local Identity, Connect, Own, Notify = Utility.Identity, Utility.Connect, Utility.Own, Utility.Notify
    local Parent = State.GuiParent or State.Services.CoreGui
    local Services, Modules = State.Services, State.Modules
    local Gui = Own(Instance.new("ScreenGui"))
    Gui.Name, Gui.ResetOnSpawn, Gui.IgnoreGuiInset, Gui.DisplayOrder = "Swift2Effects", false, true, 3
    Gui.Parent = Parent
    local Self = {Sounds = {}, Objects = {}, LastShoot = 0}
    local HitSounds = Functions.Visuals.Sounds
    local function Track(Object, Lifetime, Fade)
        table.insert(Self.Objects, {Object = Object, Expiry = os.clock() + Lifetime, Fade = Fade})
        if #Self.Objects > 128 then table.remove(Self.Objects, 1).Object:Destroy() end
    end
    local function Asset(Value)
        if type(Value) ~= "string" or Value == "" then return nil end
        if Value:match("^%d+$") then return "rbxassetid://" .. Value end
        if Value:match("^rbxassetid://") or Value:match("^rbxasset://") then return Value end
        if type(getcustomasset) == "function" and type(isfile) == "function" and isfile(Value) then
            local Okay, Result = pcall(getcustomasset, Value)
            if Okay then return Result end
        end
        return nil
    end
    local function PlaySound(Value, Volume, Speed)
        local SoundId = Asset(Value)
        if not SoundId then return end
        local Sound = Instance.new("Sound")
        Sound.SoundId, Sound.Volume, Sound.PlaybackSpeed, Sound.Parent = SoundId, Volume or 1, Speed or 1, Gui
        Track(Sound, 8)
        Sound:Play()
    end
    function Self:PreviewHitSound(Headshot)
        local Preset = Get(Headshot and "Headshot Sound Preset" or "Bodyshot Sound Preset", "Custom")
        local Value = Preset == "Custom" and Get(Headshot and "Headshot Sound" or "Bodyshot Sound", "") or HitSounds:Resolve(Preset)
        PlaySound(Value, Get("Hit Sound Volume", 1), Get("Hit Sound Speed", 1))
    end
    local function Tracer(Start, Finish)
        if typeof(Start) ~= "Vector3" or typeof(Finish) ~= "Vector3" then return end
        local Delta = Finish - Start
        if Delta.Magnitude <= 0.01 then return end
        local Part = Instance.new("Part")
        Part.Name, Part.Anchored, Part.CanCollide, Part.CanTouch, Part.CanQuery = "Swift2Tracer", true, false, false, false
        Part.Material, Part.CastShadow = Enum.Material.Neon, false
        Part.Color = Color("Bullet Tracer Color", Color3.new(1, 1, 1))
        local Opacity, Width = Get("Bullet Tracer Opacity", 0.9), Get("Bullet Tracer Width", 0.05)
        local Style = Get("Bullet Tracer Style", "Solid")
        local Beam
        if Style == "Solid" then
            Part.Transparency, Part.Size = 1 - Opacity, Vector3.new(Width, Width, Delta.Magnitude)
            Part.CFrame = CFrame.lookAt((Start + Finish) * 0.5, Finish)
        else
            Part.Transparency, Part.Size, Part.CFrame = 1, Vector3.new(0.05, 0.05, 0.05), CFrame.new(Start)
            local A, B = Instance.new("Attachment", Part), Instance.new("Attachment", Part)
            B.Position = Delta
            Beam = Instance.new("Beam")
            Beam.Attachment0, Beam.Attachment1, Beam.FaceCamera, Beam.Segments = A, B, true, 1
            Beam.Width0, Beam.Width1, Beam.LightEmission, Beam.LightInfluence = Width, Width, 1, 0
            local Textures = {Laser = "12781800668", Light = "2382169232", Flow = "12788927812"}
            Beam.Texture, Beam.TextureMode = "rbxassetid://" .. (Textures[Style] or Textures.Laser), Enum.TextureMode.Wrap
            Beam.TextureLength, Beam.TextureSpeed = Style == "Light" and 15 or 2, Get("Bullet Tracer Texture Speed", 1.5)
            local EndColor = Get("Bullet Tracer Gradient", false) and Color("Bullet Tracer End Color", Part.Color) or Part.Color
            Beam.Color = ColorSequence.new(Part.Color, EndColor)
            Beam.Transparency, Beam.Parent = NumberSequence.new(1 - Opacity), Part
        end
        Part.Parent = Services.Workspace
        Track(Part, Get("Bullet Tracer Lifetime", 2), {Beam = Beam, Opacity = Opacity})
    end
    local TracerController = Functions.Visuals.CreateTracers(Tracer)
    local function Impact(Position)
        if typeof(Position) ~= "Vector3" then return end
        local Part = Instance.new("Part")
        Part.Name, Part.Anchored, Part.CanCollide, Part.CanTouch, Part.CanQuery = "Swift2Impact", true, false, false, false
        Part.Material, Part.CastShadow = Enum.Material.Neon, false
        Part.Color = Color("Bullet Impact Color", Color3.fromRGB(255, 70, 70))
        local Size = Get("Bullet Impact Size", 0.3)
        Part.Size, Part.Position, Part.Parent = Vector3.new(Size, Size, Size), Position, Services.Workspace
        Track(Part, Get("Bullet Impact Lifetime", 2))
    end
    local function SoundAllowed(Name)
        local Categories = Get("Sound ESP Types", {})
        local Lower = string.lower(Name)
        local Kind = "Other"
        if Lower:find("fire", 1, true) or Lower:find("reload", 1, true) or Lower:find("weapon", 1, true) then Kind = "Weapons"
        elseif Lower:find("bomb", 1, true) or Lower:find("c4", 1, true) or Lower:find("plant", 1, true) or Lower:find("defus", 1, true) then Kind = "Bomb"
        elseif Lower:find("footstep", 1, true) or Lower:find("landing", 1, true) or Lower:find("ladder", 1, true) then Kind = "Footsteps"
        elseif Lower:find("impact", 1, true) or Lower:find("hit", 1, true) then Kind = "Impacts"
        elseif Lower:find("pickup", 1, true) or Lower:find("drop", 1, true) then Kind = "Items"
        elseif Lower:find("menu", 1, true) or Lower:find("ui", 1, true) then Kind = "Misc" end
        for _, Category in Categories do
            if Category == Kind then return true end
        end
        return false
    end
    local function AddSound(Name, Position)
        if not Get("Sound ESP", false) or not SoundAllowed(Name) or typeof(Position) ~= "Vector3" then return end
        local Text = Instance.new("TextLabel")
        Text.BackgroundTransparency, Text.BorderSizePixel, Text.AnchorPoint = 1, 0, Vector2.new(0.5, 0.5)
        Text.Size, Text.TextSize, Text.Font, Text.TextColor3 = UDim2.fromOffset(220, 18), 12, Enum.Font.Code, Color("Sound ESP Color", Color3.new(1, 1, 1))
        Text.Text, Text.Parent = Name, Gui
        local Stroke = Instance.new("UIStroke", Text)
        Stroke.Thickness, Stroke.Color = 1, Color3.new(0, 0, 0)
        local Entry = {Label = Text, Position = Position, Expiry = os.clock() + Get("Sound ESP Lifetime", 4)}
        table.insert(Self.Sounds, Entry)
    end
    Functions.Hooks.Add("Effects.Process", Modules.WeaponEffects.Process, function(Original, Weapon, Impacts, Tracers, Hits, Dual, Silenced)
        Identity(function()
        if Weapon and Weapon == Modules.Weapon.GetCurrentWeapon() then
            if Get("Bullet Tracer", false) and Tracers then
                if TracerController then
                    TracerController:Process(Weapon, Tracers, Dual, Silenced)
                else
                    local Muzzle = Weapon.Viewmodel and Weapon.Viewmodel:FindFirstChild(Silenced and "SilencerMuzzle" or Dual and "LeftMuzzle" or "Muzzle")
                    for _, Data in Tracers do
                        if Data and typeof(Data.EndPosition) == "Vector3" then
                            Tracer(Muzzle and Muzzle.Position or Data.StartPosition, Data.EndPosition)
                        end
                    end
                end
            end
            if Get("Bullet Impact", false) and Impacts then
                for _, Data in Impacts do if Data and not Data.Knife then Impact(Data.Position) end end
            end
        end
        if Hits then
            for Identifier, Data in Hits do
                local Target = Game.Entity("Character", Identifier)
                if Target and Functions.Target.Enemy(Target, true) then
                    for _, Hit in Data[1] and Data or {Data} do
                        local Name = Hit.Object and Hit.Object.Name or "body"
                        if Get("Hit Notification", false) then
                            local Player = Target.UserId and Services.Players:GetPlayerByUserId(Target.UserId)
                            Notify(string.format("Hit %s in %s for %d", Player and Player.DisplayName or "Bot", Name, math.floor(Hit.Damage or 0)),
                                "Success", Color("Hit Notification Color", Color3.new(1, 1, 1)))
                        end
                        if Get("Hit Sound", false) then
                            Self:PreviewHitSound(Name == "Head")
                        end
                    end
                end
            end
        end
        end)
        return Original(Weapon, Impacts, Tracers, Hits, Dual, Silenced)
    end, {"Bullet Tracer", "Bullet Impact", "Hit Notification", "Hit Sound"})
    Functions.Hooks.Add("Effects.Sound", Modules.Sound.Play, function(Original, Name, Data)
        local Replace = false
        Identity(function()
        if type(Name) == "string" then
            if Data and Data.Position then AddSound(Name, Data.Position) end
            if Get("Custom Shoot Sound", false) and Data and Data.LocalReplicated then
                local Weapon = Modules.Weapon.GetCurrentWeapon()
                local SoundA, SoundB
                if Weapon then
                    SoundA = Modules.Sound.GetWeaponFireSound(Weapon.Name, true)
                    SoundB = Modules.Sound.GetWeaponFireSound(Weapon.Name, false)
                end
                if Name == SoundA or Name == SoundB then
                    PlaySound(Get("Shoot Sound Id", ""), Get("Shoot Sound Volume", 1), Get("Shoot Sound Speed", 1))
                    Replace = Get("Replace Shoot Sound", false)
                end
            end
        end
        end)
        if Replace then return end
        return Original(Name, Data)
    end, {"Sound ESP", "Custom Shoot Sound"})
    function Self:Update()
        local Camera = Game.Camera()
        local Now = os.clock()
        for Index = #Self.Objects, 1, -1 do
            local Entry = Self.Objects[Index]
            if Now >= Entry.Expiry or not Entry.Object.Parent then
                Entry.Object:Destroy()
                table.remove(Self.Objects, Index)
            elseif Entry.Fade then
                local Alpha = 1 - Entry.Fade.Opacity * math.clamp((Entry.Expiry - Now) / 0.2, 0, 1)
                if Entry.Fade.Beam then Entry.Fade.Beam.Transparency = NumberSequence.new(Alpha)
                else Entry.Object.Transparency = Alpha end
            end
        end
        for Index = #Self.Sounds, 1, -1 do
            local Entry = Self.Sounds[Index]
            if os.clock() >= Entry.Expiry or not Entry.Label.Parent then
                Entry.Label:Destroy()
                table.remove(Self.Sounds, Index)
            elseif Camera then
                local Point, Visible = Camera:WorldToViewportPoint(Entry.Position)
                Entry.Label.Visible = Visible
                if Visible then Entry.Label.Position = UDim2.fromOffset(Point.X, Point.Y) end
            end
        end
    end
    function Self:Destroy()
        if TracerController then TracerController:Destroy() end
        for _, Entry in self.Sounds do Entry.Label:Destroy() end
        for _, Entry in self.Objects do Entry.Object:Destroy() end
        table.clear(self.Objects)
        Gui:Destroy()
    end
State.Controllers.Effects = Self
end

Functions.Utility.Register("Effects", State.Controllers.Effects, "Colon")

do
    local Get, Identity, Connect, Notify = Functions.Config.Get, Functions.Utility.Identity, Functions.Utility.Connect, Functions.Utility.Notify
    local Self = {NextMessage = 1, Elapsed = 0, LastEnabled = false}
    local Presets = {"swift on top", "get swift"}
    local function Message()
        local Choice = Get("Chatbot Message", "Rotate")
        if Choice == "Custom" then
            local Custom = tostring(Get("Chatbot Custom Message", "")):match("^%s*(.-)%s*$")
            return Custom ~= "" and Custom or nil
        end
        if Choice == "Swift On Top" then return Presets[1] end
        if Choice == "Get Swift" then return Presets[2] end
        local Selected = Presets[Self.NextMessage]
        Self.NextMessage = Self.NextMessage % #Presets + 1
        return Selected
    end
    local function Send()
        if not State.Alive or not Get("Chatbot", false) then return end
        local Text = Message()
        if not Text then return end
        task.spawn(function()
            if not State.Alive or not Get("Chatbot", false) then return end
            local Chat = State.Services.TextChatService
            local Simulation = Functions.Game.Simulation()
            local Channel = Chat:FindFirstChild(Simulation and "AllChat" or "DeadChat") or Chat:FindFirstChild("AllChat")
            if not Channel then return end
            local Okay = Identity(function() Channel:SendAsync(Text) end)
            if not Okay then Notify("Chat message could not be sent", "Warning") end
        end)
    end
    function Self:OnKill()
        local Mode = Get("Chatbot Mode", "On Kill")
        if Mode == "On Kill" or Mode == "Both" then Send() end
    end
    Functions.Hooks.Add("Chatbot.KillFeed", State.Modules.KillFeed.NewKill, function(Original, ...)
        local Args = table.pack(...)
        local Result = table.pack(Original(...))
        if Args[7] == State.LocalPlayer.Name and Args[6] ~= Args[7] then Self:OnKill() end
        return table.unpack(Result, 1, Result.n)
    end, {"Chatbot"})
    function Self:Update(Delta)
        local Enabled = Get("Chatbot", false)
        if not Enabled then Self.Elapsed = 0; Self.LastEnabled = false; return end
        if not Self.LastEnabled then Self.Elapsed = 0; Self.LastEnabled = true end
        local Mode = Get("Chatbot Mode", "On Kill")
        if Mode ~= "Timed" and Mode ~= "Both" then return end
        Self.Elapsed += Delta or 0
        local Interval = math.max(5, tonumber(Get("Chatbot Interval", 15)) or 15)
        if Self.Elapsed >= Interval then Self.Elapsed %= Interval; Send() end
    end
    function Self:Destroy() end
State.Controllers.Chatbot = Self
end

Functions.Utility.Register("Chatbot", State.Controllers.Chatbot, "Colon")

do
    local Library = State.Library
    local Self = {Sections = {}, Fields = {}, Names = {}}
    local Schema = {
        {"Minimum Damage", "Rage Minimum Damage", 0, 0, 200},
        {"Minimum Hit Chance", "Rage Minimum Hit Chance", 65, 1, 100},
        {"Accuracy Check", "Rage Accuracy Check", false},
        {"Range", "Rage Range", 300, 10, 2000},
        {"Hitbox", "Rage Hitbox", "Highest Damage", {"Highest Damage", "Head", "Torso", "Arms", "Legs"}},
        {"Target Priority", "Rage Target Priority", "Highest Damage", {"Highest Damage", "Closest", "Crosshair", "Lowest Health"}},
        {"Hitscan", "Rage Hitscan", false}, {"Wallbang", "Rage Wallbang", false},
        {"Auto Stop", "Rage Auto Stop", false}, {"Auto Scope", "Rage Auto Scope", false},
        {"Auto Crouch", "Rage Auto Crouch", false}, {"Auto Reload", "Rage Auto Reload", false},
    }
    local Excluded = {Knives = true, Knife = true, Arms = true, Misc = true, Grenade = true, Grenades = true, Bomb = true}
    local function Prefix(Name) return "Weapon Config " .. Name .. " / " end
    local function Show()
        for Name, Section in Self.Sections do Section:SetVisible(Library.Flags["Weapon Config Editor"] == Name) end
    end
    for _, Field in Schema do Self.Fields[Field[2]] = Field end
    local Section = State.UI.Tabs.Rage:AddSection({Title = "Weapon Configs", Icon = "Gun", Side = 2})
    local Enabled = Section:AddToggle({Text = "Use Weapon Configs", Flag = "Weapon Configs", Default = false})
    local Selector = Enabled:Settings():AddDropdown({Text = "Edit Weapon", Flag = "Weapon Config Editor", Options = {}, Callback = Show})
    local function Add(Name, Category, Data, Names)
        if type(Name) ~= "string" or Name == "" or Excluded[Category] or Names[Name] then return end
        if type(Data) == "table" and (Data.WeaponType == "Knife" or Data.Type == "Knife" or Data.Type == "Grenade" or Data.Type == "Bomb") then return end
        Names[Name] = true
    end
    function Self:Refresh()
        local Names = {}
        local Skins = State.Controllers.Skins
        for Category, Weapons in Skins and Skins.Available or {} do
            if type(Weapons) == "table" then for Name in Weapons do Add(Name, Category, nil, Names) end end
        end
        for Name, Weapon in State.UI.Skins and State.UI.Skins.Weapons or {} do
            Add(Name, Weapon.Category and Weapon.Category.Name, nil, Names)
        end
        local Manager = State.Modules and State.Modules.WeaponManager
        if Manager and type(Manager.GetAllWeapons) == "function" then
            local Okay, Weapons = pcall(Manager.GetAllWeapons)
            if Okay and type(Weapons) == "table" then
                for Name, Weapon in Weapons do
                    if type(Weapon) == "table" and type(Weapon.Data) == "table" then
                        local Data = Weapon.Data
                        if type(Data.MagazineSize) == "number" or type(Data.Ammo) == "number" or type(Data.FireRate) == "number" or Data.Damage ~= nil then
                            Add(type(Name) == "string" and Name or Weapon.Name, Weapon.Category or Data.Category, Data, Names)
                        end
                    end
                end
            end
        end
        table.clear(Self.Names)
        for Name in Names do table.insert(Self.Names, Name) end
        table.sort(Self.Names)
        for _, Name in Self.Names do
            if Self.Sections[Name] then continue end
            local Profile = State.UI.Tabs.Rage:AddSection({Title = Name .. " Settings", Icon = "Gun", Side = 2})
            Self.Sections[Name] = Profile
            local Override = Profile:AddToggle({Text = "Override Global Settings", Flag = Prefix(Name) .. "Enabled", Default = false})
            local Settings = Override:Settings()
            for _, Field in Schema do
                local Config = {Text = Field[1], Flag = Prefix(Name) .. Field[2], Default = Field[3]}
                if type(Field[3]) == "boolean" then Settings:AddToggle(Config)
                elseif type(Field[4]) == "table" then Config.Options = Field[4]; Settings:AddDropdown(Config)
                else Config.Min, Config.Max, Config.Increment = Field[4], Field[5], 1; Settings:AddSlider(Config) end
            end
        end
        local Previous = Library.Flags["Weapon Config Editor"]
        Selector:SetOptions(Self.Names, true)
        if not table.find(Self.Names, Previous) and Self.Names[1] then Selector:Set(Self.Names[1]) end
        Show()
        return Self.Names
    end
    function Self:Resolve(Flag)
        local Field, Flags = Self.Fields[Flag], Library.Flags
        if not Field or not Flags["Weapon Configs"] then return nil end
        local Okay, Weapon
        if Functions.Game and Functions.Game.Weapon then Okay, Weapon = pcall(Functions.Game.Weapon)
        elseif State.Modules and State.Modules.Weapon then Okay, Weapon = pcall(State.Modules.Weapon.GetCurrentWeapon) end
        local Name = Okay and Weapon and Weapon.Name
        if not Name or not Self.Sections[Name] or not Flags[Prefix(Name) .. "Enabled"] then return nil end
        local Value = Flags[Prefix(Name) .. Flag]
        if type(Value) ~= type(Field[3]) then return Field[3] end
        if type(Value) == "number" then return Value == Value and math.abs(Value) < math.huge and math.clamp(Value, Field[4], Field[5]) or Field[3] end
        if type(Value) == "string" and not table.find(Field[4], Value) then return Field[3] end
        return Value
    end
    function Self:Destroy() if State.WeaponConfigs == Self then State.WeaponConfigs = nil end end
    State.WeaponConfigs = Self
    Self:Refresh()
State.Controllers.WeaponConfigs = Self
end

Functions.Utility.Register("WeaponConfigs", State.Controllers.WeaponConfigs, "Colon")

do
    local Reports = {}
    Functions.Utility.Connect(State.Services.RunService.RenderStepped, function(Delta)
        for _, Name in State.Order do
            local Controller = State.Controllers[Name]
            if type(Controller.Update) ~= "function" then continue end
            local Okay, Reason
            if State.Styles[Name] == "Colon" then Okay, Reason = pcall(Controller.Update, Controller, Delta)
            else Okay, Reason = pcall(Controller.Update, Delta) end
            if not Okay then
                State.Errors[Name] = tostring(Reason)
                local Last = Reports[Name]
                if not Last or os.clock() - Last >= 10 then
                    Reports[Name] = os.clock()
                    warn("Swift 2 " .. Name .. ": " .. tostring(Reason))
                    if not Last then Functions.Utility.Notify(Name .. " encountered an error", "Error") end
                end
            end
        end
    end)
end
function State.Diagnostics()
    local Result = {Alive = State.Alive, Runtime = table.clone(State.Runtime), Modules = table.clone(State.ModuleSources), Errors = table.clone(State.Errors), Hooks = {}}
    for Name, Entry in Hooks do Result.Hooks[Name] = Entry.Active == true end
    for _, Name in {"Combat", "Movement"} do
        local Controller = State.Controllers[Name]
        if Controller and Controller.Diagnostics then Result[Name] = Controller.Diagnostics() end
    end
    return Result
end
State.UI:Finish()
Functions.Utility.Notify("Swift loaded")
return true
end

do
    local Okay, Started, Reason = pcall(Functions.Initialize)
    Functions.Initialize = nil
    if not Okay or Started ~= true then
        Reason = tostring(not Okay and Started or Reason or "initialization did not complete")
        State.Errors.Startup = Reason
        if State.Library then pcall(State.Library.Unload, State.Library) end
        if Functions.Utility then pcall(Functions.Utility.Destroy) end
        State.Alive = false
        warn("Swift 2 startup: " .. Reason)
        pcall(function()
            game:GetService("StarterGui"):SetCore("SendNotification", {Title = "Swift", Text = Reason, Duration = 6})
        end)
    end
end
]==========];
local function Launch(Payload, Environment)
	Environment = Environment or getfenv();
	local function Fail(Reason)
		TABLE_TableIndirection["Message%0"] = _G['tostring'](Reason);
		TABLE_TableIndirection["Report%0"] = ((type(Environment.warn) == hmmm("\215\214\213\38\242\178\200\16", "\126\177\163\187\69\134\219\167")) and Environment.warn) or _G['warn'];
		if (type(TABLE_TableIndirection["Report%0"]) == hmmm("\37\216\36\198\232\42\194\36", "\156\67\173\74\165")) then
			pcall(TABLE_TableIndirection["Report%0"], TABLE_TableIndirection["Message%0"]);
		end
		return false, TABLE_TableIndirection["Message%0"];
	end
	local Environments, SeenEnvironments = {}, {};
	local function AddEnvironment(Value)
		if ((type(Value) == hmmm("\32\182\75\26\185", "\38\84\215\41\118\220\70")) and not SeenEnvironments[Value]) then
			SeenEnvironments[Value] = true;
			_G['table'].insert(Environments, Value);
		end
	end
	AddEnvironment(Environment);
	if (type(Environment.getgenv) == hmmm("\86\3\44\17\234\89\25\44", "\158\48\118\66\114")) then
		local Okay, Globals = _G['pcall'](Environment.getgenv);
		if Okay then
			AddEnvironment(Globals);
		end
	end
	AddEnvironment(Environment._G);
	local function Resolve(Paths)
		for _, Path in Paths do
			for _, Globals in Environments do
				TABLE_TableIndirection["Value%0"] = Globals;
				for _, Key in Path do
					TABLE_TableIndirection["Value%0"] = ((type(TABLE_TableIndirection["Value%0"]) == hmmm("\191\37\18\58\118", "\155\203\68\112\86\19\197")) and TABLE_TableIndirection["Value%0"][Key]) or nil;
				end
				if (type(TABLE_TableIndirection["Value%0"]) == hmmm("\64\200\56\255\84\113\234\246", "\152\38\189\86\156\32\24\133")) then
					return TABLE_TableIndirection["Value%0"], _G['table'].concat(Path, ".");
				end
			end
		end
	end
	TABLE_TableIndirection["Enumerate%0"] = Resolve({{hmmm("\251\82\179\71\255\67\168\84\239", "\38\156\55\199")},{hmmm("\175\120\104\23\18\119\238\76\186\110", "\35\200\29\28\72\115\20\154")},{hmmm("\24\188\197\208\159", "\84\121\223\177\191\237\76"),hmmm("\188\83\221\161\57\68\63\211\168", "\161\219\54\169\192\90\48\80")},{hmmm("\90\91\14", "\69\41\34\96"),hmmm("\187\198\195\11\1\63\179\209\196", "\75\220\163\183\106\98")}});
	local Dispatch, API = Resolve({{hmmm("\16\175\133\8\214\12\133\138\52\205\13\168", "\185\98\218\235\87")},{hmmm("\217\41\41\233\208\171\200\40\40\244", "\202\171\92\71\134\190")},{hmmm("\40\194\56\135\59", "\232\73\161\76"),hmmm("\169\204\76\98\17\181\230\67\94\10\180\203", "\126\219\185\34\61")},{hmmm("\13\205\74\125\108", "\135\108\174\62\18\30\23\147"),hmmm("\164\252\36\196\22\175\48\211\185\251", "\167\214\137\74\171\120\206\83")},{hmmm("\138\243\38\82\234", "\199\235\144\82\61\152"),hmmm("\21\3\183", "\75\103\118\217")},{hmmm("\212\77\126", "\126\167\52\16\116\217"),hmmm("\218\59\46\191\187\23\195\201\45\52\143\166", "\156\168\78\64\224\212\121")},{hmmm("\20\247\171", "\174\103\142\197"),hmmm("\68\61\81\55\43\95\251\66\39\77", "\152\54\72\63\88\69\62")}});
	if (not TABLE_TableIndirection["Enumerate%0"] or not Dispatch) then
		return Fail(hmmm("\231\211\231\90\192\132\188\6\148\229\237\72\219\214\174\89\204\193\237\73\192\205\225\82\148\205\253\28\193\202\239\74\213\205\226\93\214\200\235\28\221\202\174\72\220\205\253\28\209\220\235\95\193\208\225\78", "\60\180\164\142"));
	end
	local Okay, Actors = _G['pcall'](TABLE_TableIndirection["Enumerate%0"]);
	if (not Okay or (type(Actors) ~= hmmm("\76\95\7\37\34", "\114\56\62\101\73\71\141"))) then
		return Fail(hmmm("\139\254\210\194\172\169\137\158\248\234\212\209\180\237\155\202\183\253\155\200\177\250\207\132\191\232\214\193\248\200\216\208\183\251\200\158\248", "\164\216\137\187") .. _G['tostring'](Actors));
	end
	TABLE_TableIndirection["Game%0"] = Environment.game;
	if not TABLE_TableIndirection["Game%0"] then
		for _, Globals in Environments do
			if Globals.game then
				TABLE_TableIndirection["Game%0"] = Globals.game;
				break;
			end
		end
	end
	if not TABLE_TableIndirection["Game%0"] then
		return Fail(hmmm("\225\241\56\180\178\190\89\136\166\54\179\171\251\75\219\245\113\167\168\255\29\211\239\61\179\164\242\14", "\107\178\134\81\210\198\158"));
	end
	local PlayerOkay, Player = _G['pcall'](function()
		return TABLE_TableIndirection["Game%0"]:GetService(hmmm("\8\2\131\223\175\42\29", "\202\88\110\226\166")).LocalPlayer;
	end);
	if not PlayerOkay then
		return Fail(hmmm("\240\24\139\241\222\131\93\216\183\201\204\26\142\243\138\205\0\150\183\216\198\14\134\183\222\203\10\194\251\197\192\14\142\183\218\207\14\155\242\216\153\79", "\170\163\111\226\151") .. _G['tostring'](Player));
	end
	if not Player then
		return Fail(hmmm("\34\39\187\62\90\119\123\75\112\184\55\71\57\105\58\63\188\44\92\54\105\19\53\180\55\92\50\105\3\37\188\54\71\57\46\81\36\186\61\14\36\42\3\57\162\44", "\73\113\80\210\88\46\87"));
	end
	local Target, Score, Ambiguous, Count, Only = nil, -1, false, 0, nil;
	TABLE_TableIndirection["Seen%0"] = {};
	for _, Actor in Actors do
		local Valid, Name, Local = _G['pcall'](function()
			if not Actor:IsA(hmmm("\160\47\217\29\245", "\135\225\76\173\114")) then
				return nil;
			end
			return Actor.Name, Actor:IsDescendantOf(Player);
		end);
		if (not Valid or not Name or TABLE_TableIndirection["Seen%0"][Actor]) then
			continue;
		end
		TABLE_TableIndirection["Seen%0"][Actor], Count, Only = true, Count + 1, Actor;
		if (Name == hmmm("\50\236\182\180\160\184\181", "\199\122\141\216\208\204\221")) then
			TABLE_TableIndirection["Value%0"] = (Local and 2) or 1;
			if (TABLE_TableIndirection["Value%0"] > Score) then
				Target, Score, Ambiguous = Actor, TABLE_TableIndirection["Value%0"], false;
			elseif (TABLE_TableIndirection["Value%0"] == Score) then
				Ambiguous = true;
			end
		end
	end
	if (not Target and (Count == 1)) then
		Target = Only;
	end
	if (not Target or Ambiguous) then
		return Fail(hmmm("\158\202\25\246\108\182\255\135\80\243\119\227\161\217\80\254\119\226\237\212\20\245\118\226\164\219\9\176\119\248\168\157\23\241\117\243\237\245\17\254\124\250\168\207\80\209\123\226\162\207\80\184", "\150\205\189\112\144\24") .. _G['tostring'](Count) .. hmmm("\101\165\188\88\11\154\2\89", "\112\69\228\223\44\100\232\113"));
	end
	local NameOkay, TargetName = _G['pcall'](function()
		return Target:GetFullName();
	end);
	if (not NameOkay or (type(TargetName) ~= hmmm("\199\11\21\218\184\123", "\230\180\127\103\179\214\28"))) then
		return Fail(hmmm("\191\18\86\64\240\1\178\214\69\92\73\241\77\228\204\11\80\82\164\83\229\141\1\31\82\236\68\160\139\4\82\67\164\96\227\152\10\77\6\244\64\244\132", "\128\236\101\63\38\132\33"));
	end
	TABLE_TableIndirection["Marker%0"] = 'local SwiftRuntime = {Mode = "Actor"}';
	TABLE_TableIndirection["Position%0"] = (type(Payload) == hmmm("\191\189\3\77\184\236", "\175\204\201\113\36\214\139")) and Payload:find(TABLE_TableIndirection["Marker%0"], 1, true);
	if (not TABLE_TableIndirection["Position%0"] or Payload:find(TABLE_TableIndirection["Marker%0"], TABLE_TableIndirection["Position%0"] + #TABLE_TableIndirection["Marker%0"], true)) then
		return Fail(hmmm("\116\219\60\218\16\7\158\111\156\37\68\216\58\206\68\87\205\44\208\11\70\200\117\206\17\73\216\60\209\1\7\193\52\206\15\66\222\117\213\23\7\197\59\202\5\75\197\49", "\100\39\172\85\188"));
	end
	TABLE_TableIndirection["Metadata%0"] = _G['string'].format(hmmm("\161\119\186\129\63\237\75\174\137\53\185\74\172\142\39\164\117\188\192\110\237\99\148\143\55\168\56\228\192\118\188\52\249\161\3\132\56\228\192\118\188\52\249\161\48\185\119\171\192\110\237\61\168\157", "\83\205\24\217\224"), hmmm("\199\198\217\50\244", "\93\134\165\173"), API, TargetName);
	TABLE_TableIndirection["Source%1"] = Payload:sub(1, TABLE_TableIndirection["Position%0"] - 1) .. TABLE_TableIndirection["Metadata%0"] .. Payload:sub(TABLE_TableIndirection["Position%0"] + #TABLE_TableIndirection["Marker%0"]);
	TABLE_TableIndirection["Unloaded%0"] = {};
	for _, Globals in Environments do
		for _, Name in {hmmm("\141\229\200\196\46\156", "\30\222\146\161\162\90\174\210"),hmmm("\214\89\121\12\241\98\121\8\247\79\98\19", "\106\133\46\16"),hmmm("\107\55\122\250\78", "\32\56\64\19\156\58")} do
			TABLE_TableIndirection["Previous%0"] = Globals[Name];
			if ((type(TABLE_TableIndirection["Previous%0"]) ~= hmmm("\78\201\231\90\95", "\224\58\168\133\54\58\146")) or TABLE_TableIndirection["Unloaded%0"][TABLE_TableIndirection["Previous%0"]]) then
				continue;
			end
			TABLE_TableIndirection["Callback%0"] = nil;
			if (Name == hmmm("\106\65\66\251\97\212", "\107\57\54\43\157\21\230\231")) then
				TABLE_TableIndirection["Callback%0"] = TABLE_TableIndirection["Previous%0"].Destroy;
			else
				TABLE_TableIndirection["Callback%0"] = TABLE_TableIndirection["Previous%0"].Unload;
			end
			if (type(TABLE_TableIndirection["Callback%0"]) ~= hmmm("\221\158\31\246\173\213\192\213", "\175\187\235\113\149\217\188")) then
				continue;
			end
			TABLE_TableIndirection["Unloaded%0"][TABLE_TableIndirection["Previous%0"]] = true;
			local Stopped, Reason;
			if (Name == hmmm("\15\184\136\74\247\43", "\24\92\207\225\44\131\25")) then
				Stopped, Reason = _G['pcall'](TABLE_TableIndirection["Callback%0"]);
			else
				Stopped, Reason = _G['pcall'](TABLE_TableIndirection["Callback%0"], TABLE_TableIndirection["Previous%0"]);
			end
			if not Stopped then
				return Fail(hmmm("\120\196\177\74\15\61\25\137\248\79\20\104\71\215\248\66\20\105\11\192\172\67\11\61\95\219\189\12\11\111\78\197\177\67\14\110\11", "\29\43\179\216\44\123") .. Name .. hmmm("\253\203\53\66\169\208\45\73\231\153", "\44\221\185\64") .. _G['tostring'](Reason));
			end
		end
	end
	local Started, Reason = _G['pcall'](Dispatch, Target, TABLE_TableIndirection["Source%1"]);
	if (not Started or (Reason == false)) then
		return Fail(hmmm("\50\240\65\89\103\65\181\18\31", "\19\97\135\40\63") .. API .. hmmm("\238\95\60\46\35\53\238\82\60\47\111\34\186\93\33\47\111\56\160\28", "\81\206\60\83\91\79") .. TargetName .. hmmm("\20\235", "\196\46\203\176\18\79\163\45") .. _G['tostring'](Reason));
	end
	return true;
end
Launch(TABLE_TableIndirection["Source%0"]);

Comments 0

Log in or sign up to comment.