local function G(G,...)local M={}local t=""for G,m in pairs({...})do M[m]=true t=t..((t==""and""or" \111\114 ")..m)end local m=type(G)assert(M[m],t..(" \116\121\112\101 \101\120\112\101\099\116\101\100\044 \103\111\116\058 "..m))end
-- Used to sanitize user-supplied functions
local function AssertTypes(param, ...)
	local allowedTypes = {}
	local typeString = ""
	for _, typeName in pairs({ ... }) do
		allowedTypes[typeName] = true
		typeString = typeString .. (typeString == "" and "" or " or ") .. typeName
	end
	local theType = type(param)
	assert(allowedTypes[theType], typeString .. " type expected, got: " .. theType)
end
