<?xml version="1.0" encoding="UTF-8"?>
<!-- Warning:  This is a beta DTD and is subject to change  -->
<!ELEMENT dotfuscator (propertylist?, global?, (trigger | input)?, output?, tempdir?, obfuscationattributemap?, renaming?, controlflow?, stringencrypt?, removal?, linking?, premark?, signing?, eventlist?)>
<!ATTLIST dotfuscator
	version CDATA #REQUIRED
>
<!ELEMENT propertylist (property)*>
<!ELEMENT property EMPTY>
<!ATTLIST property
	name CDATA #REQUIRED
	value CDATA #REQUIRED
>
<!ELEMENT global (option)*>
<!ELEMENT option (#PCDATA)>
<!ELEMENT comment (#PCDATA)>
<!ELEMENT trigger (filelist)>
<!ELEMENT input (loadpaths?, (filelist | asmlist))>
<!ELEMENT asmlist (inputassembly+)>
<!ELEMENT filelist (file+)>
<!ELEMENT file EMPTY>
<!ATTLIST file
	dir CDATA #REQUIRED
	name CDATA #IMPLIED
>
<!ELEMENT inputassembly (option*, file, loadpaths?)>
<!ELEMENT output (file)>
<!ELEMENT tempdir (file)>
<!ELEMENT renaming (option*, excludelist?, mapping?)>
<!ATTLIST renaming
	scheme (lowalpha | upperalpha | numeric | unprintable) "lowalpha"
>
<!ELEMENT excludelist (type | namespace | module | assembly)*>
<!ELEMENT includelist (type | namespace | module | assembly)*>
<!ELEMENT type (comment? | (method | field | customattribute)*)>
<!ATTLIST type
	name CDATA #REQUIRED
	regex (false | true) "false"
	excludetype (false | true) "true"
	speclist CDATA #IMPLIED
>
<!ELEMENT method (comment? | customattribute*)>
<!ATTLIST method
	regex (false | true) "false"
	name CDATA #REQUIRED
	speclist CDATA #IMPLIED
	signature CDATA #IMPLIED
>
<!ELEMENT field (comment? | customattribute*)>
<!ATTLIST field
	name CDATA #REQUIRED
	regex (false | true) "false"
	speclist CDATA #IMPLIED
>
<!ELEMENT namespace (comment?)>
<!ATTLIST namespace
	name CDATA #REQUIRED
	regex (false | true) "false"
>
<!ELEMENT assembly (file)>
<!ELEMENT module EMPTY>
<!ATTLIST module
	name CDATA #REQUIRED
	assemblyname CDATA #REQUIRED
>
<!ELEMENT mapping (mapinput?, mapoutput?)>
<!ELEMENT mapoutput (file, transform?)>
<!ATTLIST mapoutput
	overwrite (true | false) "false"
>
<!ELEMENT mapinput (file)>
<!ELEMENT controlflow (option*, excludelist?)>
<!ATTLIST controlflow
	level (high | medium | low) #REQUIRED
>
<!ELEMENT removal (option*, triggerlist?, conditionalincludes?, removalreport?)>
<!ELEMENT triggerlist (type | namespace | module | assembly)*>
<!ELEMENT stringencrypt (option*, includelist?)>
<!ELEMENT conditionalincludes (type | namespace | module | assembly)*>
<!ELEMENT removalreport (file, transform?)>
<!ATTLIST removalreport
	overwrite (true | false) "false"
>
<!ELEMENT transform (file?)>
<!ELEMENT customattribute (comment?)>
<!ATTLIST customattribute
	name CDATA #REQUIRED
	regex (false | true) "false"
>
<!ELEMENT signing (option*, resign?, delaysign?)>
<!ELEMENT resign (option*, key?)>
<!ELEMENT delaysign (option*, key?)>
<!ELEMENT key (file | container)>
<!ELEMENT container EMPTY>
<!ATTLIST container
	name CDATA #REQUIRED
>
<!ELEMENT obfuscationattributemap (feature+)>
<!ELEMENT feature (#PCDATA)>
<!ATTLIST feature
	name CDATA #REQUIRED
>
<!ELEMENT loadpaths (file*)>
<!ELEMENT eventlist (event+)>
<!ELEMENT event (option*, program+)>
<!ATTLIST event
	type CDATA #REQUIRED
>
<!ELEMENT program (file, environment)>
<!ELEMENT environment EMPTY>
<!ATTLIST environment
	commandline CDATA #REQUIRED
	workingdir CDATA #IMPLIED
>
<!ELEMENT linking (option*, linkedassembly*)>
<!ELEMENT linkedassembly (option*, primaryinput, assemblylist, outputassembly)>
<!ELEMENT primaryinput (assembly)>
<!ELEMENT assemblylist (assembly*)>
<!ELEMENT outputassembly (option*, entrypoint?)>
<!ATTLIST outputassembly
	name CDATA #REQUIRED
>
<!ELEMENT entrypoint (type)>
<!ELEMENT premark (option*, assemblylist?, passphrase?, encoding?, watermark? )>
<!ELEMENT passphrase (#PCDATA)>
<!ELEMENT encoding EMPTY>
<!ATTLIST encoding 
	name CDATA #REQUIRED 
>

<!ELEMENT watermark (#PCDATA)>


