function DataStore.Get(M,A,o)if o then return M.value end local O=0 if not M.haveValue then while not M.haveValue and not pcall(M._GetRaw,M)do if M.backupRetries then O=O+1 if O>=M.backupRetries then M.backup=true M.haveValue=true M.value=M.backupValue break end end end if M.value~=nil then for A,o in pairs(M.beforeInitialGet)do M.value=o(M.value,M)end end end local c if M.value==nil and A~=nil then c=A else c=M.value end c=clone(c)M.value=c return c end

function DataStore:Get(defaultValue, dontAttemptGet)
	if dontAttemptGet then
		return self.value
	end

	local backupCount = 0

	if not self.haveValue then
		while not self.haveValue and not pcall(self._GetRaw, self) do
			if self.backupRetries then
				backupCount = backupCount + 1

				if backupCount >= self.backupRetries then
					self.backup = true
					self.haveValue = true
					self.value = self.backupValue
					break
				end
			end
		end

		if self.value ~= nil then
			for _,modifier in pairs(self.beforeInitialGet) do
				self.value = modifier(self.value, self)
			end
		end
	end

	local value

	if self.value == nil and defaultValue ~= nil then --not using "not" because false is a possible value
		value = defaultValue
	else
		value = self.value
	end

	value = clone(value)

	self.value = value

	return value
end
