function Blend.AccelTween(c,A)local p=Blend.toPropertyObservable(c)or Rx.of(c)local l=Blend.toNumberObservable(A)local function u(c,A)local p=AccelTween.new()if A then p.p=A p.t=A p.v=0 end if l then c:GiveTask(l:Subscribe(function(c)assert(type(c)=="\110\117\109\098\101\114","\066\097\100 \118\097\108\117\101")p.a=c end))end return p end return Observable.new(function(c)local A local l=Maid.new()local I,Z=StepUtils.bindToRenderStep(function()c:Fire(A.p)return A.rtime>0 end)l:GiveTask(Z)l:GiveTask(p:Subscribe(function(c)A=A or u(l,c)A.t=c I()end))return l end)end
--[=[
	Like Blend.Spring, but for AccelTween

	@param source any -- Source observable (or convertable)
	@param acceleration any -- Source acceleration (or convertable)
	@return Observable
]=]
function Blend.AccelTween(source, acceleration)
	local sourceObservable = Blend.toPropertyObservable(source) or Rx.of(source)
	local accelerationObservable = Blend.toNumberObservable(acceleration)

	local function createAccelTween(maid, initialValue)
		local accelTween = AccelTween.new()

		if initialValue then
			accelTween.p = initialValue
			accelTween.t = initialValue
			accelTween.v = 0
		end

		if accelerationObservable then
			maid:GiveTask(accelerationObservable:Subscribe(function(value)
				assert(type(value) == "number", "Bad value")
				accelTween.a = value
			end))
		end

		return accelTween
	end

	-- TODO: Centralize and cache
	return Observable.new(function(sub)
		local accelTween
		local maid = Maid.new()

		local startAnimate, stopAnimate = StepUtils.bindToRenderStep(function()
			sub:Fire(accelTween.p)
			return accelTween.rtime > 0
		end)

		maid:GiveTask(stopAnimate)
		maid:GiveTask(sourceObservable:Subscribe(function(value)
			accelTween = accelTween or createAccelTween(maid, value)
			accelTween.t = value
			startAnimate()
		end))

		return maid
	end)
end
