return function(I,n)if n then setfenv(1,n)end local M=service.Players.LocalPlayer local w=M.PlayerGui local P=script.Parent.Parent local l=P.Frame local W=P.Frame.TextBox local F=P.Frame.ScrollingFrame local T=P.Frame.PlayerList local S=P.Entry local C=gTable.BindEvent local U=false local g=false local o=false local u=client.Remote.Get("\083\101\116\116\105\110\103",{"\083\112\108\105\116\075\101\121";"\067\111\110\115\111\108\101\075\101\121\067\111\100\101","\066\097\116\099\104\075\101\121","\080\114\101\102\105\120"})local B=u.SplitKey local A=u.ConsoleKeyCode local R=u.BatchKey local J=u.Prefix local r=client.Remote.Get("\070\111\114\109\097\116\116\101\100\067\111\109\109\097\110\100\115")or{}local N=TweenInfo.new(.2)local p=service.TweenService:Create(l,N,{Size=UDim2.new(1,0,0,140)})local i=service.TweenService:Create(l,N,{Size=UDim2.new(1,0,0,40)})local Y=service.TweenService:Create(l,N,{Position=UDim2.new(0,0,.02,0)})local D=service.TweenService:Create(l,N,{Position=UDim2.new(0,0,0,-200)})l.Position=UDim2.new(0,0,0,-200)l.Visible=false l.Size=UDim2.new(1,0,0,40)F.Visible=false if client.Variables.ConsoleOpen then if client.Variables.ChatEnabled then service.StarterGui:SetCoreGuiEnabled("\067\104\097\116",true)end if client.Variables.PlayerListEnabled then service.StarterGui:SetCoreGuiEnabled("\080\108\097\121\101\114\076\105\115\116",true)end if client.UI.Get("\078\111\116\105\102")then(client.UI.Get("\078\111\116\105\102",nil,true)).Object.LABEL.Visible=true end local I=client.UI.Get("\067\104\097\116",nil,true)if I then I.Object.Drag.Visible=true end local n=client.UI.Get("\080\108\097\121\101\114\076\105\115\116",nil,true)if n then n.Object.Drag.Visible=true end local M=client.UI.Get("\072\105\110\116\072\111\108\100\101\114",nil,true)if M then M.Object.Frame.Visible=true end end client.Variables.ChatEnabled=service.StarterGui:GetCoreGuiEnabled("\067\104\097\116")client.Variables.PlayerListEnabled=service.StarterGui:GetCoreGuiEnabled("\080\108\097\121\101\114\076\105\115\116")local function X()if P:IsDescendantOf(game)and not o then o=true F:ClearAllChildren()F.CanvasSize=UDim2.new(0,0,0,0)F.ScrollingEnabled=false l.Size=UDim2.new(1,0,0,40)F.Visible=false T.Visible=false scrollOpen=false if client.Variables.ChatEnabled then service.StarterGui:SetCoreGuiEnabled("\067\104\097\116",true)end if client.Variables.PlayerListEnabled then service.StarterGui:SetCoreGuiEnabled("\080\108\097\121\101\114\076\105\115\116",true)end if client.UI.Get("\078\111\116\105\102")then(client.UI.Get("\078\111\116\105\102",nil,true)).Object.LABEL.Visible=true end local I=client.UI.Get("\067\104\097\116",nil,true)if I then I.Object.Drag.Visible=true end local n=client.UI.Get("\080\108\097\121\101\114\076\105\115\116",nil,true)if n then n.Object.Drag.Visible=true end local M=client.UI.Get("\072\105\110\116\072\111\108\100\101\114",nil,true)if M then M.Object.Frame.Visible=true end D:Play()o=false U=false end end local function d()if P:IsDescendantOf(game)and not o then o=true client.Variables.ChatEnabled=service.StarterGui:GetCoreGuiEnabled("\067\104\097\116")client.Variables.PlayerListEnabled=service.StarterGui:GetCoreGuiEnabled("\080\108\097\121\101\114\076\105\115\116")service.StarterGui:SetCoreGuiEnabled("\067\104\097\116",false)service.StarterGui:SetCoreGuiEnabled("\080\108\097\121\101\114\076\105\115\116",false)F.ScrollingEnabled=true T.ScrollingEnabled=true if client.UI.Get("\078\111\116\105\102")then(client.UI.Get("\078\111\116\105\102",nil,true)).Object.LABEL.Visible=false end local I=client.UI.Get("\067\104\097\116",nil,true)if I then I.Object.Drag.Visible=false end local n=client.UI.Get("\080\108\097\121\101\114\076\105\115\116",nil,true)if n then n.Object.Drag.Visible=false end local M=client.UI.Get("\072\105\110\116\072\111\108\100\101\114",nil,true)if M then M.Object.Frame.Visible=false end Y:Play()l.Size=UDim2.new(1,0,0,40)F.Visible=false T.Visible=false scrollOpen=false W.Text=""l.Visible=true l.Position=UDim2.new(0,0,0,0)W:CaptureFocus()W.Text=""wait()W.Text=""o=false U=true end end local function O(I)for I,n in ipairs(w:GetGuiObjectsAtPosition(I.X,I.Y))do if n==P or n==P.Frame then return true end end return false end W.FocusLost:Connect(function(I)if I then if W.Text~=""and string.len(W.Text)>1 then client.Remote.Send("\080\114\111\099\101\115\115\067\111\109\109\097\110\100",W.Text)end X()elseif not O(M:GetMouse())then X()end end)W.Changed:Connect(function(I)if I=="\084\101\120\116"and(W.Text~=""and d)then if string.sub(W.Text,string.len(W.Text))=="\t"then if T:FindFirstChild("\069\110\116\114\121 \048")then W.Text=(string.sub(W.Text,1,string.len(W.Text)-1)..T["\069\110\116\114\121 \048"].Text).." "elseif F:FindFirstChild("\069\110\116\114\121 \048")then W.Text=(string.split(F["\069\110\116\114\121 \048"].Text,"\060"))[1]else W.Text=W.Text..J end W.CursorPosition=string.len(W.Text)+1 W.Text=string.gsub(W.Text,"\t","")end F:ClearAllChildren()T:ClearAllChildren()local I=W.Text if string.match(I,"\046\042"..(R.."\040\091\094\'\093\043\041"))then I=string.match(I,"\046\042"..(R.."\040\091\094\'\093\043\041"))I=string.match(I,"\094\037\115\042\040\046-\041\037\115\042\036")end local n=0 local M=string.match(I,"\046\043"..(B.."\040\046\042\041\036"))for w,P in next,service.Players:GetPlayers()do if M and string.sub(string.lower(tostring(P)),1,#M)==string.lower(M)or string.match(I,B.."\036")then local I=S:Clone()I.Text=tostring(P)I.Name="\069\110\116\114\121 "..n I.TextXAlignment="\082\105\103\104\116"I.Visible=true I.Parent=T I.Position=UDim2.new(0,0,0,20*n)I.Activated:Connect(function()W.Text=W.Text..tostring(P)W:CaptureFocus()end)n=n+1 end end T.CanvasSize=UDim2.new(0,0,0,n*20)local w=0 for n,M in next,r do if string.sub(string.lower(M),1,#I)==string.lower(I)or string.find(string.lower(M),string.match(string.lower(I),"\094\040\046-\041"..B)or string.lower(I),1,true)then if not scrollOpen then p:Play()F.Visible=true T.Visible=true scrollOpen=true end local I=S:Clone()I.Visible=true I.Parent=F I.Text=M I.Name="\069\110\116\114\121 "..w I.Position=UDim2.new(0,0,0,20*w)I.Activated:Connect(function()W.Text=I.Text:gsub("\060\046-\062","")W:CaptureFocus()end)w=w+1 end end local P=service.TweenService:Create(l,N,{Size=UDim2.new(1,0,0,math.clamp(w*20+40,40,140))})local C=service.TweenService:Create(F,N,{CanvasSize=UDim2.new(0,0,0,w*20)})P:Play()C:Play()elseif I=="\084\101\120\116"and(W.Text==""and U)then i:Play()F.Visible=false T.Visible=false scrollOpen=false F:ClearAllChildren()F.CanvasSize=UDim2.new(0,0,0,0)end end)C(service.UserInputService.InputBegan,function(I)local n=service.UserInputService:GetFocusedTextBox()if not n and(rawequal(I.UserInputType,Enum.UserInputType.Keyboard)and I.KeyCode.Name==(client.Variables.CustomConsoleKey or A))then if U then X()else d()end client.Variables.ConsoleOpen=U end end)gTable:Ready()end


return function(data, env)
	if env then
		setfenv(1, env)
	end
	local player = service.Players.LocalPlayer
	local playergui = player.PlayerGui
	local gui = script.Parent.Parent
	local frame = gui.Frame
	local text = gui.Frame.TextBox
	local scroll = gui.Frame.ScrollingFrame
	local players = gui.Frame.PlayerList
	local entry = gui.Entry
	local BindEvent = gTable.BindEvent

	local opened = false
	local scrolling = false
	local debounce = false
	local settings = client.Remote.Get("Setting",{"SplitKey","ConsoleKeyCode","BatchKey","Prefix"})
	local splitKey = settings.SplitKey
	local consoleKey = settings.ConsoleKeyCode
	local batchKey = settings.BatchKey
	local prefix = settings.Prefix
	local commands = client.Remote.Get('FormattedCommands') or {}

	local tweenInfo = TweenInfo.new(0.20)----service.SafeTweenSize(frame,UDim2.new(1,0,0,40),nil,nil,0.3,nil,function() if scrollOpen then frame.Size = UDim2.new(1,0,0,140) end end)
	local scrollOpenTween = service.TweenService:Create(frame, tweenInfo, {
		Size = UDim2.new(1, 0, 0, 140);
	})

	local scrollCloseTween = service.TweenService:Create(frame, tweenInfo, {
		Size = UDim2.new(1, 0, 0, 40);
	})

	local consoleOpenTween = service.TweenService:Create(frame, tweenInfo, {
		Position = UDim2.new(0, 0, 0.02, 0);
	})

	local consoleCloseTween = service.TweenService:Create(frame, tweenInfo, {
		Position = UDim2.new(0, 0, 0, -200);
	})

	frame.Position = UDim2.new(0,0,0,-200)
	frame.Visible = false
	frame.Size = UDim2.new(1,0,0,40)
	scroll.Visible = false

	if client.Variables.ConsoleOpen then
		if client.Variables.ChatEnabled then
			service.StarterGui:SetCoreGuiEnabled("Chat",true)
		end

		if client.Variables.PlayerListEnabled then
			service.StarterGui:SetCoreGuiEnabled('PlayerList',true)
		end
		if client.UI.Get("Notif") then
			client.UI.Get("Notif",nil,true).Object.LABEL.Visible = true
		end

		local scr = client.UI.Get("Chat",nil,true)
		if scr then scr.Object.Drag.Visible = true end

		local scr = client.UI.Get("PlayerList",nil,true)
		if scr then scr.Object.Drag.Visible = true end

		local scr = client.UI.Get("HintHolder",nil,true)
		if scr then scr.Object.Frame.Visible = true end
	end

	client.Variables.ChatEnabled = service.StarterGui:GetCoreGuiEnabled("Chat")
	client.Variables.PlayerListEnabled = service.StarterGui:GetCoreGuiEnabled('PlayerList')

	local function close()
		if gui:IsDescendantOf(game) and not debounce then
			debounce = true
			scroll:ClearAllChildren()
			scroll.CanvasSize = UDim2.new(0,0,0,0)
			scroll.ScrollingEnabled = false
			frame.Size = UDim2.new(1,0,0,40)
			scroll.Visible = false
			players.Visible = false
			scrollOpen = false

			if client.Variables.ChatEnabled then
				service.StarterGui:SetCoreGuiEnabled("Chat",true)
			end

			if client.Variables.PlayerListEnabled then
				service.StarterGui:SetCoreGuiEnabled('PlayerList',true)
			end

			if client.UI.Get("Notif") then
				client.UI.Get("Notif",nil,true).Object.LABEL.Visible = true
			end

			local scr = client.UI.Get("Chat",nil,true)
			if scr then scr.Object.Drag.Visible = true end

			local scr = client.UI.Get("PlayerList",nil,true)
			if scr then scr.Object.Drag.Visible = true end

			local scr = client.UI.Get("HintHolder",nil,true)
			if scr then scr.Object.Frame.Visible = true end

			consoleCloseTween:Play();
			--service.SafeTweenPos(frame,UDim2.new(0,0,0,-200),'Out','Linear',0.2,true)
			--frame:TweenPosition(UDim2.new(0,0,0,-200),'Out','Linear',0.2,true)
			debounce = false
			opened = false
		end
	end

	local function open()
		if gui:IsDescendantOf(game) and not debounce then
			debounce = true
			client.Variables.ChatEnabled = service.StarterGui:GetCoreGuiEnabled("Chat")
			client.Variables.PlayerListEnabled = service.StarterGui:GetCoreGuiEnabled('PlayerList')

			service.StarterGui:SetCoreGuiEnabled("Chat",false)
			service.StarterGui:SetCoreGuiEnabled('PlayerList',false)

			scroll.ScrollingEnabled = true
			players.ScrollingEnabled = true

			if client.UI.Get("Notif") then
				client.UI.Get("Notif",nil,true).Object.LABEL.Visible = false
			end

			local scr = client.UI.Get("Chat",nil,true)
			if scr then scr.Object.Drag.Visible = false end

			local scr = client.UI.Get("PlayerList",nil,true)
			if scr then scr.Object.Drag.Visible = false end

			local scr = client.UI.Get("HintHolder",nil,true)
			if scr then scr.Object.Frame.Visible = false end

			consoleOpenTween:Play();

			frame.Size = UDim2.new(1,0,0,40)
			scroll.Visible = false
			players.Visible = false
			scrollOpen = false
			text.Text = ''
			frame.Visible = true
			frame.Position = UDim2.new(0,0,0,0)
			text:CaptureFocus()
			text.Text = ''
			wait()
			text.Text = ''
			debounce = false
			opened = true
		end
	end

	local function isInConsoleBounds(pos) -- input.Position
		for i,v in ipairs(playergui:GetGuiObjectsAtPosition(pos.X, pos.Y)) do
			if v == gui or v == gui.Frame then return true end
		end
		return false
	end

	text.FocusLost:Connect(function(enterPressed)
		if enterPressed then
			if text.Text~='' and string.len(text.Text)>1 then
				client.Remote.Send('ProcessCommand',text.Text)
			end
			close()
		elseif not isInConsoleBounds(player:GetMouse()) then
			close()
		end
	end)

	text.Changed:Connect(function(c)
		if c == 'Text' and text.Text ~= '' and open then
			if string.sub(text.Text, string.len(text.Text)) == "	" then
				if players:FindFirstChild("Entry 0") then
					text.Text = (string.sub(text.Text, 1, (string.len(text.Text) - 1))..players["Entry 0"].Text).." "
				elseif scroll:FindFirstChild("Entry 0") then
					text.Text = string.split(scroll["Entry 0"].Text, "<")[1]
				else
					text.Text = text.Text..prefix
				end
				text.CursorPosition = string.len(text.Text) + 1
				text.Text = string.gsub(text.Text, "	", "")
			end
			scroll:ClearAllChildren()
			players:ClearAllChildren()

			local nText = text.Text
			if string.match(nText,".*"..batchKey.."([^']+)") then
				nText = string.match(nText,".*"..batchKey.."([^']+)")
				nText = string.match(nText,"^%s*(.-)%s*$")
			end

			local pNum = 0
			local pMatch = string.match(nText,".+"..splitKey.."(.*)$")
			for i,v in next,service.Players:GetPlayers() do
				if (pMatch and string.sub(string.lower(tostring(v)),1,#pMatch) == string.lower(pMatch)) or string.match(nText,splitKey.."$") then
					local new = entry:Clone()
					new.Text = tostring(v)
					new.Name = "Entry "..pNum
					new.TextXAlignment = "Right"
					new.Visible = true
					new.Parent = players
					new.Position = UDim2.new(0,0,0,20*pNum)
					new.Activated:Connect(function()
						text.Text = text.Text..tostring(v)
						text:CaptureFocus()
					end)
					pNum = pNum+1
				end
			end

			players.CanvasSize = UDim2.new(0,0,0,pNum*20)

			local num = 0
			for i,v in next,commands do
				if string.sub(string.lower(v),1,#nText) == string.lower(nText) or string.find(string.lower(v), string.match(string.lower(nText),"^(.-)"..splitKey) or string.lower(nText), 1, true) then
					if not scrollOpen then
						scrollOpenTween:Play();
						--frame.Size = UDim2.new(1,0,0,140)
						scroll.Visible = true
						players.Visible = true
						scrollOpen = true
					end
					local b = entry:Clone()
					b.Visible = true
					b.Parent = scroll
					b.Text = v
					b.Name = "Entry "..num
					b.Position = UDim2.new(0,0,0,20*num)
					b.Activated:Connect(function()
						text.Text = b.Text:gsub("<.->", "")
						text:CaptureFocus()
					end)
					num = num+1
				end
			end
			local temptween = service.TweenService:Create(frame, tweenInfo, {
				Size =  UDim2.new(1, 0, 0, math.clamp((num*20)+40, 40, 140));
			})

			local temptween1 = service.TweenService:Create(scroll, tweenInfo, {
				CanvasSize = UDim2.new(0,0,0,num*20);
			})

			temptween:Play(); 			temptween1:Play()

		elseif c == 'Text' and text.Text == '' and opened then
			scrollCloseTween:Play();
			--service.SafeTweenSize(frame,UDim2.new(1,0,0,40),nil,nil,0.3,nil,function() if scrollOpen then frame.Size = UDim2.new(1,0,0,140) end end)
			scroll.Visible = false
			players.Visible = false
			scrollOpen = false
			scroll:ClearAllChildren()
			scroll.CanvasSize = UDim2.new(0,0,0,0)
		end
	end)

	BindEvent(service.UserInputService.InputBegan, function(InputObject)
		local textbox = service.UserInputService:GetFocusedTextBox()
		if not (textbox) and rawequal(InputObject.UserInputType, Enum.UserInputType.Keyboard) and InputObject.KeyCode.Name == (client.Variables.CustomConsoleKey or consoleKey) then
			if opened then
				close()
			else
				open()
			end
			client.Variables.ConsoleOpen = opened
		end
	end)

	gTable:Ready()
end
