function ValueObject.__index(F,h)if h=="\086\097\108\117\101"then return F._value elseif ValueObject[h]then return ValueObject[h]elseif h=="\095\118\097\108\117\101"then return nil else error(("\037\113 \105\115 \110\111\116 \097 \109\101\109\098\101\114 \111\102 \086\097\108\117\101\079\098\106\101\099\116"):format(tostring(h)))end end function ValueObject.__newindex(m,h,F)if h=="\086\097\108\117\101"then local h=rawget(m,"\095\118\097\108\117\101")if h~=F then rawset(m,"\095\118\097\108\117\101",F)local T=Maid.new()m.Changed:Fire(F,h,T)m._maid._valueMaid=T end else error(("\037\113 \105\115 \110\111\116 \097 \109\101\109\098\101\114 \111\102 \086\097\108\117\101\079\098\106\101\099\116"):format(tostring(h)))end end

function ValueObject:__index(index)
	if index == "Value" then
		return self._value
	elseif ValueObject[index] then
		return ValueObject[index]
	elseif index == "_value" then
		return nil -- Edge case
	else
		error(("%q is not a member of ValueObject"):format(tostring(index)))
	end
end

function ValueObject:__newindex(index, value)
	if index == "Value" then
		local previous = rawget(self, "_value")
		if previous ~= value then
			rawset(self, "_value", value)

			local maid = Maid.new()

			self.Changed:Fire(value, previous, maid)

			self._maid._valueMaid = maid
		end
	else
		error(("%q is not a member of ValueObject"):format(tostring(index)))
	end
end
