local function W(m,O)O=O or{}if O[m]then return O[m]end if type(m)=="\116\097\098\108\101"then local q={}O[m]=q for m,c in pairs(m)do q[W(m,O)]=W(c,O)end return setmetatable(q,W(getmetatable(m),O))else return m end end Table.deepCopy=W

local function deepCopy(target, _context)
	_context = _context or  {}
	if _context[target] then
		return _context[target]
	end

	if type(target) == "table" then
		local new = {}
		_context[target] = new
		for index, value in pairs(target) do
			new[deepCopy(index, _context)] = deepCopy(value, _context)
		end
		return setmetatable(new, deepCopy(getmetatable(target), _context))
	else
		return target
	end
end
Table.deepCopy = deepCopy
