def METHOD_NAME(filename):
	#print(filename)
	with open(filename, encoding="utf-8") as f:
		RawContent = f.read()
		content = RawContent.splitlines()
		basename = os.path.basename(filename)
		name, extension = os.path.splitext(basename)
		UuidRe = re.compile('_[0-9A-F]{8}_[0-9A-F]{4}_[0-9A-F]{4}_[0-9A-F]{4}_[0-9A-F]{12}\Z', re.I)
		LineNumber = 0
		IsBom = content[0][0] == '\ufeff'
		if IsBom:
			content[0] = content[0][1:]
		CheckBom = True
		CheckIncludeGuards = True
		CheckSelfInclude = True
		if content[0].startswith("// validator: "):
			if "no-bom" in content[0]:
				CheckBom = False
			if "no-include-guards" in content[0]:
				CheckIncludeGuards = False
			if "no-self-include" in content[0]:
				CheckSelfInclude = False
			content = content[1:]
		def Raise(Message, Line=-1):
			RealLine = LineNumber if Line==-1 else Line
			raise StyleException(filename, RealLine + 1, content[RealLine], Message)
		if CheckBom and not IsBom:
			Raise("No BOM")
		if content[-1] == "":
			Raise("Too many empty lines", len(content) - 1)
		if RawContent[-1][-1] not in ['\r', '\n']:
			Raise("No final EOL", len(content) - 1)
		if extension in [".hpp", ".h"] and CheckIncludeGuards:
			LockGuardName = basename.upper().replace(".", "_")
			LockGuardTemplate1 = "#ifndef " + LockGuardName
			LockGuardTemplate2 = "#define " + LockGuardName
			LockGuardTemplate3 = "#endif // " + LockGuardName
			def CheckLine(Line, Template):
				return Line.startswith(Template) and UuidRe.match(Line[len(Template):])
			if not (CheckLine(content[0], LockGuardTemplate1) and CheckLine(content[1], LockGuardTemplate2) and CheckLine(content[-1], LockGuardTemplate3)):
				Raise("No include guard")
			LineNumber = 2
			if content[LineNumber] != "#pragma once":
				Raise("No #pragma once")
			LineNumber += 1
			if content[LineNumber] != "":
				Raise("No empty line")
			LineNumber += 1
		if content[LineNumber] != "/*":
			Raise("No comment")
		LineNumber += 1
		if content[LineNumber] != basename:
			Raise("Name mismatch")
		LineNumber += 1;
		while content[LineNumber] != "*/":
			LineNumber += 1
		LineNumber += 1
		if content[LineNumber] != "/*":
			Raise("No comment")
		LineNumber += 1
		if not content[LineNumber].startswith("Copyright"):
			Raise("No copyright")
		LineNumber += 1
		if content[LineNumber].startswith("Copyright"):
			LineNumber += 1
		if content[LineNumber] != "All rights reserved.":
			Raise("No copyright")
		LineNumber += 1
		License = [