local J={}J.__index=J function J.new()return setmetatable({Bindable=Instance.new("\066\105\110\100\097\098\108\101\069\118\101\110\116")},J)end function J.Connect(T,J)return T.Bindable.Event:Connect(function(T)J(T())end)end function J.Fire(J,...)local T={...}local c=select("\035",...)J.Bindable:Fire(function()return unpack(T,1,c)end)end function J.Wait(J)return(J.Bindable.Event:Wait())()end function J.Destroy(J)J.Bindable:Destroy()end return J
local Signal = {}
Signal.__index = Signal

function Signal.new()
	return setmetatable({
		Bindable = Instance.new("BindableEvent"),
	}, Signal)
end

function Signal:Connect(Callback)
	return self.Bindable.Event:Connect(function(GetArgumentStack)
		Callback(GetArgumentStack())
	end)
end

function Signal:Fire(...)
	local Arguments = { ... }
	local n = select("#", ...)

	self.Bindable:Fire(function()
		return unpack(Arguments, 1, n)
	end)
end

function Signal:Wait()
	return self.Bindable.Event:Wait()()
end

function Signal:Destroy()
	self.Bindable:Destroy()
end

return Signal
