local function n(n,Z)assert(type(n)=="\115\116\114\105\110\103","\065\114\103\117\109\101\110\116 \035\049 \116\111 \096\115\116\114\105\099\116\096 \109\117\115\116 \098\101 \097 \115\116\114\105\110\103 \111\114 \116\104\101 \116\097\098\108\101 \116\111 \109\111\100\105\102\121")assert(type(Z)=="\116\097\098\108\101","\065\114\103\117\109\101\110\116 \035\050 \116\111 \096\115\116\114\105\099\116\096 \109\117\115\116 \098\101 \110\105\108 \111\114 \116\104\101 \116\097\098\108\101 \116\111 \109\111\100\105\102\121")setmetatable(Z,{__index=function(Z,w)error(("\037\113 \105\115 \110\111\116 \097 \118\097\108\105\100 \109\101\109\098\101\114 \111\102 \115\116\114\105\099\116 \116\097\098\108\101 \037\113"):format(tostring(w),n),2)end;__newindex=function()error(("\083\116\114\105\099\116 \116\097\098\108\101 \037\113 \105\115 \114\101\097\100-\111\110\108\121"):format(n),2)end})return Z end return function(Z,w)if type(Z)=="\115\116\114\105\110\103"then return n(Z,w)else return n("\060\117\110\110\097\109\101\100 \116\097\098\108\101\062",w)end end
local function strictInner(name, target)
	assert(type(name) == "string", "Argument #1 to `strict` must be a string or the table to modify")
	assert(type(target) == "table", "Argument #2 to `strict` must be nil or the table to modify")

	setmetatable(target, {
		__index = function(_, key)
			error(("%q is not a valid member of strict table %q"):format(tostring(key), name), 2)
		end,

		__newindex = function()
			error(("Strict table %q is read-only"):format(name), 2)
		end,
	})

	return target
end

return function(nameOrTarget, target)
	if type(nameOrTarget) == "string" then
		return strictInner(nameOrTarget, target)
	else
		return strictInner("<unnamed table>", target)
	end
end