diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..577d11f --- /dev/null +++ b/.gitattributes @@ -0,0 +1,7 @@ + +# Our batch files requires CRLF for correct work. +# https://github.com/3F/hMSBuild/issues/2 + +*.bat text eol=crlf +*.cmd text eol=crlf +*.tpl text eol=crlf \ No newline at end of file diff --git a/.release.version b/.release.version index 0519ecb..4b60236 100644 --- a/.release.version +++ b/.release.version @@ -1 +1 @@ - \ No newline at end of file +beta4 \ No newline at end of file diff --git a/.version b/.version index 83d1a5e..9dbb0c0 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -1.6.6 \ No newline at end of file +1.7.0 \ No newline at end of file diff --git a/.vssbe b/.vssbe index af1e346..83ed290 100644 --- a/.vssbe +++ b/.vssbe @@ -144,7 +144,7 @@ "Mode": { "$type": "net.r_eg.vsSBE.Events.ModeScript, vsSolutionBuildEvent", "Type": "Script", - "Command": "#[( !(#[IO exists.file(\"$(pGetNuTool)/gnt.sln\")]) )\n{\n #[File call(\"git\", \"submodule update --init --recursive GetNuTool\", 1000)]\n}]\n\n#[( !(#[IO exists.file(\"$(pMvsSln)/MvsSln.sln\")]) )\n{\n #[File call(\"git\", \"submodule update --init --recursive MvsSln\", 1000)]\n}]\n\n#[( !(#[IO exists.file(\"$(phMSBuild)/hMSBuild.sln\")]) )\n{\n #[File call(\"git\", \"submodule update --init --recursive hMSBuild\", 1000)]\n}]\n\nTODO: option for expensive coreclr\n\n\n#[\" Packages \"]\n\n#[( !(#[IO exists.file(\"packages/__checked\")]) )\n{\n #[File call(\"tools\\hmsbuild.bat\", \"-t:restore /v:q /nologo /p:Configuration=$(Configuration) /p:Platform=\\\"Any CPU\\\"\", 1000)]\n \n #[NuGet gnt.raw(\"/p:ngconfig=\\\"packages.config;PeViewer/packages.config;NSBin/packages.config\\\" /nologo /v:m /m:4\")]\n \n #[IO copy.directory(\"\", \"packages/\", true)]\n #[File write(\"packages/__checked\"): ]\n}]", + "Command": "#[( !(#[IO exists.file(\"$(pGetNuTool)/gnt.sln\")]) )\n{\n #[File call(\"git\", \"submodule update --init --recursive GetNuTool\", 1000)]\n}]\n\n#[( !(#[IO exists.file(\"$(pMvsSln)/MvsSln.sln\")]) )\n{\n #[File call(\"git\", \"submodule update --init --recursive MvsSln\", 1000)]\n}]\n\n#[( !(#[IO exists.file(\"$(phMSBuild)/hMSBuild.sln\")]) )\n{\n #[File call(\"git\", \"submodule update --init --recursive hMSBuild\", 1000)]\n}]\n\nTODO: option for expensive coreclr\n\n\n#[\" Packages \"]\n\n#[( !(#[IO exists.file(\"packages/__checked\")]) )\n{\n #[File call(\"tools\\hmsbuild.bat\", \"-t:restore /v:q /nologo /p:Configuration=$(Configuration) /p:Platform=\\\"Any CPU\\\"\", 1000)]\n \n #[NuGet gnt.raw(\"/p:ngconfig=\\\"packages.config;PeViewer/packages.config;NSBin/packages.config;Wizard/packages.config\\\" /nologo /v:m /m:4\")]\n \n #[IO copy.directory(\"\", \"packages/\", true)]\n #[File write(\"packages/__checked\"): ]\n}]", "Command__": [ "#[( !(#[IO exists.file(\"$(pGetNuTool)/gnt.sln\")]) )", "{", @@ -170,7 +170,7 @@ "{", " #[File call(\"tools\\hmsbuild.bat\", \"-t:restore /v:q /nologo /p:Configuration=$(Configuration) /p:Platform=\\\"Any CPU\\\"\", 1000)]", " ", - " #[NuGet gnt.raw(\"/p:ngconfig=\\\"packages.config;PeViewer/packages.config;NSBin/packages.config\\\" /nologo /v:m /m:4\")]", + " #[NuGet gnt.raw(\"/p:ngconfig=\\\"packages.config;PeViewer/packages.config;NSBin/packages.config;Wizard/packages.config\\\" /nologo /v:m /m:4\")]", " ", " #[IO copy.directory(\"\", \"packages/\", true)]", " #[File write(\"packages/__checked\"): ]", @@ -288,7 +288,7 @@ "Mode": { "$type": "net.r_eg.vsSBE.Events.ModeScript, vsSolutionBuildEvent", "Type": "Script", - "Command": "#[var tpl = // This code was generated by a vsSolutionBuildEvent. \n// Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.\nnamespace net.r_eg.DllExport.Wizard\n{\n using System;\n\n internal struct WizardVersion\n {\n public static readonly Version number = new Version(S_NUM_REV);\n\n public const string S_NUM = \"%S_NUM%\";\n public const string S_REV = \"%S_REV%\";\n public const string S_REL = \"%S_REL%\";\n\n public const string S_NUM_REV = S_NUM + \".\" + S_REV;\n\n public const string BRANCH_SHA1 = \"%B_SHA1%\";\n public const string BRANCH_NAME = \"%B_NAME%\";\n public const string BRANCH_REVC = \"%B_REVC%\";\n\n internal const string S_INFO = S_NUM_REV + \" \" + S_REL + \" [ \" + BRANCH_SHA1 + \" ]\";\n internal const string S_INFO_FULL = S_INFO + \" /'\" + BRANCH_NAME + \"':\" + BRANCH_REVC;\n }\n}]\n\n\n#[\" \n Calculate revision\n\"]\n#[var tBase = $([System.DateTime]::Parse('$(revDeltaBase)').ToBinary())]\n#[var tNow = $([System.DateTime]::UtcNow.Ticks)]\n#[var revBuild = #[$(\n [System.TimeSpan]::FromTicks('$(\n [MSBuild]::Subtract($(tNow), $(tBase))\n )')\n .TotalMinutes.ToString('0'))]]\n \n#[var revBuild = #[$(\n [MSBuild]::Add(\n $(revDeltaMin), \n $([MSBuild]::Modulo(\n $(revBuild), \n $([MSBuild]::Subtract(\n $(revDeltaMax), $(revDeltaMin)\n ))\n ))\n )\n )]\n]\n\n#[$(dxpPrintVersion = \"v$(pVer).$(revBuild)$(partRelV)\")]\n\n#[\" \n Remove placeholders\n\"]\n#[var tpl = $(tpl.Replace(\"%S_NUM%\", \"$(pVer)\").Replace(\"%S_REV%\", \"$(revBuild)\").Replace(\"%S_REL%\", \"$(pReleaseVersion)\"))]\n\n#[\" \n Checking of the git to define sha1, branch name, etc.\n\"]\n#[var isGit = #[IO cmd(\"git rev-parse 2>&1\")]]\n#[( $(isGit) == \"\" )\n{\n #[var bSha1 = #[IO sout(\"git\", \"rev-parse --short HEAD\")]]\n #[var bName = #[IO sout(\"git\", \"rev-parse --abbrev-ref HEAD\")]]\n #[var bRevc = #[IO sout(\"git\", \"rev-list HEAD --count\")]]\n \n #[($(bName) == \"HEAD\") {\n #[var bName = $(APPVEYOR_REPO_BRANCH)]\n }]\n \n #[$(dxpPrintVersion = \"$(dxpPrintVersion) [ $(bSha1) ]\")]\n}\nelse {\n #[$(bSha1 = '-')] #[$(bName = '-')] #[$(bRevc = '-')]\n}]\n\n#[var tpl = #[$(tpl.Replace(\"%B_SHA1%\", \"#[var bSha1]\")\n .Replace(\"%B_NAME%\", \"#[var bName]\")\n .Replace(\"%B_REVC%\", \"#[var bRevc]\") )]]\n\n#[\" \n Save result\n\"]\n#[File write(\"$(pWizard)/WizardVersion.cs\"):#[var tpl]]", + "Command": "#[var tpl = // This code was generated by a vsSolutionBuildEvent. \n// Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.\nnamespace net.r_eg.DllExport.Wizard\n{\n using System;\n\n internal struct WizardVersion\n {\n public static readonly Version number = new Version(S_NUM_REV);\n\n public const string S_NUM = \"%S_NUM%\";\n public const string S_REV = \"%S_REV%\";\n public const string S_REL = \"%S_REL%\";\n\n public const string S_NUM_REV = S_NUM + \".\" + S_REV;\n\n public const string BRANCH_SHA1 = \"%B_SHA1%\";\n public const string BRANCH_NAME = \"%B_NAME%\";\n public const string BRANCH_REVC = \"%B_REVC%\";\n\n internal const string S_INFO = S_NUM_REV + \"+\" + BRANCH_SHA1;\n internal const string S_INFO_FULL = S_INFO + \":\" + BRANCH_NAME + \"-\" + BRANCH_REVC;\n }\n}]\n\n\n#[\" \n Calculate revision\n\"]\n#[var tBase = $([System.DateTime]::Parse('$(revDeltaBase)').ToBinary())]\n#[var tNow = $([System.DateTime]::UtcNow.Ticks)]\n#[var revBuild = #[$(\n [System.TimeSpan]::FromTicks('$(\n [MSBuild]::Subtract($(tNow), $(tBase))\n )')\n .TotalMinutes.ToString('0'))]]\n \n#[var revBuild = #[$(\n [MSBuild]::Add(\n $(revDeltaMin), \n $([MSBuild]::Modulo(\n $(revBuild), \n $([MSBuild]::Subtract(\n $(revDeltaMax), $(revDeltaMin)\n ))\n ))\n )\n )]\n]\n\n#[$(dxpPrintVersion = \"v$(pVer).$(revBuild)$(partRelV)\")]\n\n#[\" \n Remove placeholders\n\"]\n#[var tpl = $(tpl.Replace(\"%S_NUM%\", \"$(pVer)\").Replace(\"%S_REV%\", \"$(revBuild)\").Replace(\"%S_REL%\", \"$(pReleaseVersion)\"))]\n\n#[\" \n Checking of the git to define sha1, branch name, etc.\n\"]\n#[var isGit = #[IO cmd(\"git rev-parse 2>&1\")]]\n#[( $(isGit) == \"\" )\n{\n #[var bSha1 = #[IO sout(\"git\", \"rev-parse --short HEAD\")]]\n #[var bName = #[IO sout(\"git\", \"rev-parse --abbrev-ref HEAD\")]]\n #[var bRevc = #[IO sout(\"git\", \"rev-list HEAD --count\")]]\n \n #[($(bName) == \"HEAD\") {\n #[var bName = $(APPVEYOR_REPO_BRANCH)]\n }]\n \n #[$(dxpPrintVersion = \"$(dxpPrintVersion)+$(bSha1)\")]\n}\nelse {\n #[$(bSha1 = '-')] #[$(bName = '-')] #[$(bRevc = '-')]\n}]\n\n#[var tpl = #[$(tpl.Replace(\"%B_SHA1%\", \"#[var bSha1]\")\n .Replace(\"%B_NAME%\", \"#[var bName]\")\n .Replace(\"%B_REVC%\", \"#[var bRevc]\") )]]\n\n#[\" \n Save result\n\"]\n#[File write(\"$(pWizard)/WizardVersion.cs\"):#[var tpl]]", "Command__": [ "#[var tpl = // This code was generated by a vsSolutionBuildEvent. ", "// Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.", @@ -310,8 +310,8 @@ " public const string BRANCH_NAME = \"%B_NAME%\";", " public const string BRANCH_REVC = \"%B_REVC%\";", "", - " internal const string S_INFO = S_NUM_REV + \" \" + S_REL + \" [ \" + BRANCH_SHA1 + \" ]\";", - " internal const string S_INFO_FULL = S_INFO + \" /'\" + BRANCH_NAME + \"':\" + BRANCH_REVC;", + " internal const string S_INFO = S_NUM_REV + \"+\" + BRANCH_SHA1;", + " internal const string S_INFO_FULL = S_INFO + \":\" + BRANCH_NAME + \"-\" + BRANCH_REVC;", " }", "}]", "", @@ -361,7 +361,7 @@ " #[var bName = $(APPVEYOR_REPO_BRANCH)]", " }]", " ", - " #[$(dxpPrintVersion = \"$(dxpPrintVersion) [ $(bSha1) ]\")]", + " #[$(dxpPrintVersion = \"$(dxpPrintVersion)+$(bSha1)\")]", "}", "else {", " #[$(bSha1 = '-')] #[$(bName = '-')] #[$(bRevc = '-')]", @@ -403,7 +403,7 @@ "Mode": { "$type": "net.r_eg.vsSBE.Events.ModeScript, vsSolutionBuildEvent", "Type": "Script", - "Command": "#[IO copy.file(\n \"$(SolutionDir)tools/*.*\", \n \"$(odir)/tools/\", \n true, \n {\"*.nuspec\"})]\n\n#[IO copy.file(\"tools/DllExport.nuspec\", \"$(odir)/DllExport.nuspec\", true)]\n#[IO replace(\"$(odir)/DllExport.nuspec\", \"$-version-$\", \"$(pVerRel)\")]\n\n#[IO copy.file({\n \"$(pDllExport)/$(OutDir:$(pDllExport))/*.*\",\n \"$(pMSBuild)/$(OutDir:$(pMSBuild))/*.*\",\n \"$(pNSBin)/$(OutDir:$(pNSBin))/*.*\",\n \"$(pWizard)/$(OutDir:$(pWizard))/*.*\",\n \"$(pPeViewer)/$(OutDir:$(pPeViewer))/*.*\"\n }, \n \"$(odir)/tools/\", true)]\n\n#[\" https://github.com/3F/DllExport/issues/36 \"]\n#[IO copy.directory(\"\", \"$(odir)/lib/net20/\", true)]\n#[IO write(\"$(odir)/lib/net20/_._\"):]\n\n#[IO copy.directory(\"\", \"$(odir)/lib/netstandard2.0/\", true)]\n#[IO write(\"$(odir)/lib/netstandard2.0/_._\"):]\n\n\n#[IO copy.file(\"$(pMeta)/$(OutDir:$(pMeta))/*.dll\", \"$(odir)/tools/raw/lib/net20/\", true)]\n#[IO copy.file(\"$(pMetaCore)/$(OutputPath:$(pMetaCore))*.dll\", \"$(odir)/tools/raw/lib/netstd/\", true)]\n\n#[IO copy.file(\"tools/build.targets\", \"$(odir)/build/net20/DllExport.targets\", true)]\n\n#[IO copy.file({ \"Readme.md\", \"3rd-party.txt\", \"changelog.txt\" }, \"$(odir)/\", true)]\n#[IO copy.file(\"LICENSE\", \"$(odir)/License.txt\", true)]\n\n#[var buildInfo = $([System.String]::Concat(\" \"))\n S_NUM: #[$(pVer)]\n \n S_REV: #[$(revBuild)]\n \n S_NUM_REV: #[$(pVer)].#[$(revBuild)]\n \n S_REL: #[$(pReleaseVersion)]\n \n bSha1: #[$(bSha1)]\n \n bName: #[$(bName)]\n \n bRevc: #[$(bRevc)]\n \n Wizard .NET: #[$(TargetFrameworkVersion:$(pWizard))]\n \n Configuration: #[$(Configuration)]\n \n Platform: #[$(Platform)]\n \n cfgname: #[$(cfgname)]\n \n revDeltaBase: #[$(revDeltaBase)]\n \n revDeltaMin: #[$(revDeltaMin)]\n \n revDeltaMax: #[$(revDeltaMax)]\n \n \n :: generated by a vsSolutionBuildEvent v#[$(vsSolutionBuildEvent)]\n]\n\n#[IO writeLine(\"$(odir)/build_info.txt\"):#[var buildInfo]]\n\n\n#[IO replace(\"$(odir)/DllExport.nuspec\", \"{build_info}\", \"$(buildInfo)\")]", + "Command": "#[IO copy.file(\n \"$(SolutionDir)tools/*.*\", \n \"$(odir)/tools/\", \n true, \n {\"*.nuspec\"})]\n\n#[IO copy.file(\"tools/DllExport.nuspec\", \"$(odir)/DllExport.nuspec\", true)]\n#[IO replace(\"$(odir)/DllExport.nuspec\", \"$-version-$\", \"$(pVerRel)\")]\n\n#[IO copy.file({\n \"$(pDllExport)/$(OutDir:$(pDllExport))/*.*\",\n \"$(pMSBuild)/$(OutDir:$(pMSBuild))/*.*\",\n \"$(pNSBin)/$(OutDir:$(pNSBin))/*.*\",\n \"$(pWizard)/$(OutDir:$(pWizard))/*.*\",\n \"$(pPeViewer)/$(OutDir:$(pPeViewer))/*.*\"\n }, \n \"$(odir)/tools/\", true)]\n\n#[\" https://github.com/3F/DllExport/issues/36 \"]\n#[IO copy.directory(\"\", \"$(odir)/lib/net20/\", true)]\n#[IO write(\"$(odir)/lib/net20/_._\"):]\n\n#[$(metaCoreTargetVer = $(TargetFramework:$(pMetaCore)))]\n\n#[IO copy.directory(\"\", \"$(odir)/lib/$(metaCoreTargetVer)/\", true)]\n#[IO write(\"$(odir)/lib/$(metaCoreTargetVer)/_._\"):]\n\n\n#[IO copy.file(\"$(pMeta)/$(OutDir:$(pMeta))/*.dll\", \"$(odir)/tools/raw/lib/net20/\", true)]\n#[IO copy.file(\"$(pMetaCore)/$(OutputPath:$(pMetaCore))*.dll\", \"$(odir)/tools/raw/lib/netstd/\", true)]\n\n##[IO copy.file(\"tools/build.targets\", \"$(odir)/build/net/DllExport.targets\", true)]\n\n#[IO copy.file({ \"Readme.md\", \"3rd-party.txt\", \"changelog.txt\", \".gitattributes\" }, \"$(odir)/\", true)]\n#[IO copy.file(\"LICENSE\", \"$(odir)/License.txt\", true)]\n\n#[var buildInfo = $([System.String]::Concat(\" \"))\n S_NUM: #[$(pVer)]\n \n S_REV: #[$(revBuild)]\n \n S_NUM_REV: #[$(pVer)].#[$(revBuild)]\n \n S_REL: #[$(pReleaseVersion)]\n \n bSha1: #[$(bSha1)]\n \n bName: #[$(bName)]\n \n bRevc: #[$(bRevc)]\n \n MetaCor: #[$(TargetFramework:$(pMetaCore))]\n \n MetaLib: #[$(TargetFrameworkVersion:$(pMeta))]\n \n Wizard: #[$(TargetFrameworkVersion:$(pWizard))]\n \n Configuration: #[$(Configuration)]\n \n Platform: #[$(Platform)]\n \n cfgname: #[$(cfgname)]\n \n revDeltaBase: #[$(revDeltaBase)]\n \n revDeltaMin: #[$(revDeltaMin)]\n \n revDeltaMax: #[$(revDeltaMax)]\n \n \n :: generated by a vsSolutionBuildEvent v#[$(vsSolutionBuildEvent)]\n]\n\n#[IO writeLine(\"$(odir)/build_info.txt\"):#[var buildInfo]]\n\n\n#[IO replace(\"$(odir)/DllExport.nuspec\", \"{build_info}\", \"$(buildInfo)\")]", "Command__": [ "#[IO copy.file(", " \"$(SolutionDir)tools/*.*\", ", @@ -427,16 +427,18 @@ "#[IO copy.directory(\"\", \"$(odir)/lib/net20/\", true)]", "#[IO write(\"$(odir)/lib/net20/_._\"):]", "", - "#[IO copy.directory(\"\", \"$(odir)/lib/netstandard2.0/\", true)]", - "#[IO write(\"$(odir)/lib/netstandard2.0/_._\"):]", + "#[$(metaCoreTargetVer = $(TargetFramework:$(pMetaCore)))]", + "", + "#[IO copy.directory(\"\", \"$(odir)/lib/$(metaCoreTargetVer)/\", true)]", + "#[IO write(\"$(odir)/lib/$(metaCoreTargetVer)/_._\"):]", "", "", "#[IO copy.file(\"$(pMeta)/$(OutDir:$(pMeta))/*.dll\", \"$(odir)/tools/raw/lib/net20/\", true)]", "#[IO copy.file(\"$(pMetaCore)/$(OutputPath:$(pMetaCore))*.dll\", \"$(odir)/tools/raw/lib/netstd/\", true)]", "", - "#[IO copy.file(\"tools/build.targets\", \"$(odir)/build/net20/DllExport.targets\", true)]", + "##[IO copy.file(\"tools/build.targets\", \"$(odir)/build/net/DllExport.targets\", true)]", "", - "#[IO copy.file({ \"Readme.md\", \"3rd-party.txt\", \"changelog.txt\" }, \"$(odir)/\", true)]", + "#[IO copy.file({ \"Readme.md\", \"3rd-party.txt\", \"changelog.txt\", \".gitattributes\" }, \"$(odir)/\", true)]", "#[IO copy.file(\"LICENSE\", \"$(odir)/License.txt\", true)]", "", "#[var buildInfo = $([System.String]::Concat(\" \"))", @@ -454,7 +456,11 @@ " ", " bRevc: #[$(bRevc)]", " ", - " Wizard .NET: #[$(TargetFrameworkVersion:$(pWizard))]", + " MetaCor: #[$(TargetFramework:$(pMetaCore))]", + " ", + " MetaLib: #[$(TargetFrameworkVersion:$(pMeta))]", + " ", + " Wizard: #[$(TargetFrameworkVersion:$(pWizard))]", " ", " Configuration: #[$(Configuration)]", " ", @@ -577,7 +583,7 @@ "Mode": { "$type": "net.r_eg.vsSBE.Events.ModeScript, vsSolutionBuildEvent", "Type": "Script", - "Command": "#[IO writeLine(STDOUT): Build GetNuTool ...]\n#[IO writeLine(STDOUT): #[IO cmd(\"cd GetNuTool & call build PublicRelease\", 400)]]\n\n#[var frontend = $(pManager)\\\\batch\\\\Manager.bat]\n#[var gntECore = \"$(pGetNuTool)\\\\bin\\\\Release\\\\raw\\\\executables\\\\batch\\\\gnt.bat\"]\n#[var dxpWZ = $(dbin.Replace('/', '\\\\'))DllExport.bat]\n\n#[try\n{\n #[IO writeLine(STDOUT):\n #[IO cmd(\"copy /Y/B $(frontend)+$(gntECore) $(dxpWZ)\")]\n ]\n}\ncatch(err, msg)\n{\n #[IO write(STDOUT):\n Trying with another method... ]\n \n #[IO cmd(\"type $(frontend)>$(dxpWZ)\")]\n #[IO cmd(\"type $(gntECore)>>$(dxpWZ)\")]\n \n #[IO writeLine(STDOUT): ok]\n\n}]\n\n\n#[\" \n finalization\n\"]\n#[IO replace.Regex(\"$(dxpWZ)\", \"(@echo off) & echo.*?exit /B \\d+\", \"$1\")]\n\n\n#[\" \n update version\n\"]\n#[IO replace(\"$(dxpWZ)\", \"$-pkg-version-$\", \"$(pVerRel)\")]\n#[( $(Configuration) != \"PublicRelease\" )\n{\n #[$(wzPrintVer = \"$(pVer)$(partRelV)\")]\n #[( $(Configuration) ~= \"Debug\" )\n {\n #[$(wzPrintVer += \" [ Debug ]\")]\n }] \n #[IO replace(\"$(dxpWZ)\", \"$-version-$\", \"$(wzPrintVer)\")]\n}\nelse\n{\n #[IO replace(\"$(dxpWZ)\", \"$-version-$\", \"$(dxpPrintVersion)\")]\n}]\n\n#[\" \n .compressor\n\"]\n#[IO writeLine(STDOUT): Generate minified version of the Wizard's manager ...]\n#[$(mbatch = \"$(SolutionDir)$(pManager)/batch/\")]\n#[IO writeLine(STDOUT): #[IO cmd(\"$(SolutionDir)tools\\hMSBuild $(mbatch).compressor /p:core=\\\"$(SolutionDir)$(dxpWZ)\\\" /p:output=\\\"$(SolutionDir)$(dxpWZ)_minified.bat\\\" /p:maptpl=\\\"$(mbatch)map.tpl.targets\\\" /nologo /v:m /m:4 \", 400)]]\n\n#[IO copy.file(\"$(dxpWZ)\", \"$(dxpWZ).full.bat\", true)]\n#[IO copy.file(\"$(dxpWZ)_minified.bat\", \"$(dxpWZ)\", true)]\n#[IO delete.files({\"$(dxpWZ)_minified.bat\"})]\n\n#[IO copy.file(\"$(dxpWZ)\", \"$(odir)/\", true)]\n\n\n#[\" \n quick commands\n\"]\n\n##[IO write(\"$(dbin)/DllExport_Configure.bat\"): DllExport -action Configure %*]\n", + "Command": "#[IO writeLine(STDOUT): Build GetNuTool ...]\n#[IO writeLine(STDOUT): #[IO cmd(\"cd GetNuTool & call build PublicRelease\", 400)]]\n\n#[var frontend = $(pManager)\\\\batch\\\\Manager.bat]\n#[var gntECore = \"$(pGetNuTool)\\\\bin\\\\Release\\\\raw\\\\executables\\\\batch\\\\gnt.bat\"]\n#[var dxpWZ = $(dbin.Replace('/', '\\\\'))DllExport.bat]\n\n#[try\n{\n #[IO writeLine(STDOUT):\n #[IO cmd(\"copy /Y/B $(frontend)+$(gntECore) $(dxpWZ)\")]\n ]\n}\ncatch(err, msg)\n{\n #[IO write(STDOUT):\n Trying with another method... ]\n \n #[IO cmd(\"type $(frontend)>$(dxpWZ)\")]\n #[IO cmd(\"type $(gntECore)>>$(dxpWZ)\")]\n \n #[IO writeLine(STDOUT): ok]\n\n}]\n\n\n#[\" \n finalization\n\"]\n#[IO replace.Regex(\"$(dxpWZ)\", \"(@echo off) & echo.*?exit /B \\d+\", \"$1\")]\n\n\n#[\" \n update version\n\"]\n#[IO replace(\"$(dxpWZ)\", \"$-pkg-version-$\", \"$(pVerRel)\")]\n#[( $(Configuration) != \"PublicRelease\" )\n{\n #[$(wzPrintVer = \"$(pVer)$(partRelV)\")]\n #[( $(Configuration) ~= \"Debug\" )\n {\n #[$(wzPrintVer += \" [ Debug ]\")]\n }] \n #[IO replace(\"$(dxpWZ)\", \"$-version-$\", \"$(wzPrintVer)\")]\n}\nelse\n{\n #[IO replace(\"$(dxpWZ)\", \"$-version-$\", \"$(dxpPrintVersion)\")]\n}]\n\n#[\" \n .compressor\n\"]\n#[IO writeLine(STDOUT): Generate minified version of the Wizard's manager ...]\n#[$(mbatch = \"$(SolutionDir)$(pManager)/batch/\")]\n#[IO writeLine(STDOUT): #[IO cmd(\"$(SolutionDir)tools\\hMSBuild $(mbatch).compressor /p:core=\\\"$(SolutionDir)$(dxpWZ)\\\" /p:output=\\\"$(SolutionDir)$(dxpWZ)_minified.bat\\\" /p:maptpl=\\\"$(mbatch)map.tpl.targets\\\" /nologo /v:m /m:4 \", 400)]]\n\n##[IO copy.file(\"$(dxpWZ)\", \"$(dxpWZ).full.bat\", true)]\n#[IO copy.file(\"$(dxpWZ)_minified.bat\", \"$(dxpWZ)\", true)]\n#[IO delete.files({\"$(dxpWZ)_minified.bat\"})]\n\n#[IO copy.file(\"$(dxpWZ)\", \"$(odir)/\", true)]\n\n\n#[\" \n quick commands\n\"]\n\n##[IO write(\"$(dbin)/DllExport_Configure.bat\"): DllExport -action Configure %*]\n", "Command__": [ "#[IO writeLine(STDOUT): Build GetNuTool ...]", "#[IO writeLine(STDOUT): #[IO cmd(\"cd GetNuTool & call build PublicRelease\", 400)]]", @@ -636,7 +642,7 @@ "#[$(mbatch = \"$(SolutionDir)$(pManager)/batch/\")]", "#[IO writeLine(STDOUT): #[IO cmd(\"$(SolutionDir)tools\\hMSBuild $(mbatch).compressor /p:core=\\\"$(SolutionDir)$(dxpWZ)\\\" /p:output=\\\"$(SolutionDir)$(dxpWZ)_minified.bat\\\" /p:maptpl=\\\"$(mbatch)map.tpl.targets\\\" /nologo /v:m /m:4 \", 400)]]", "", - "#[IO copy.file(\"$(dxpWZ)\", \"$(dxpWZ).full.bat\", true)]", + "##[IO copy.file(\"$(dxpWZ)\", \"$(dxpWZ).full.bat\", true)]", "#[IO copy.file(\"$(dxpWZ)_minified.bat\", \"$(dxpWZ)\", true)]", "#[IO delete.files({\"$(dxpWZ)_minified.bat\"})]", "", @@ -675,7 +681,7 @@ "Mode": { "$type": "net.r_eg.vsSBE.Events.ModeScript, vsSolutionBuildEvent", "Type": "Script", - "Command": "\n#[$(mgrTests = \"$(dbin)/tests/mgr/\")]\n\n#[IO copy.file(\n {\n \"$(dbin)*.bat\",\n \"$(dbin)*.map\",\n \"$(dbin)*.targets\"\n }, \n \"$(mgrTests)/\", \n true\n)]\n\n\n#[IO copy.file(\n {\n \"$(mbatch)tests.bat\",\n \"$(mbatch)tests.targets\"\n }, \n \"$(mgrTests)/\", \n true\n)]\n\n#[File replace(\"$(mgrTests)tests.bat\", \"$version$\", \"$(pVer)\")]", + "Command": "\n#[$(mgrTests = \"$(dbin)/tests/mgr/\")]\n\n#[IO copy.file(\n {\n \"$(dbin)*.bat\",\n \"$(dbin)*.map\",\n \"$(dbin)*.targets\"\n }, \n \"$(mgrTests)/\", \n true\n)]\n\n\n#[IO copy.file(\n {\n \"$(mbatch)tests.bat\",\n \"$(mbatch)tests.targets\"\n }, \n \"$(mgrTests)/\", \n true\n)]\n\n#[File replace(\"$(mgrTests)tests.bat\", \"$version$\", \"$(pVerRel)\")]", "Command__": [ "", "#[$(mgrTests = \"$(dbin)/tests/mgr/\")]", @@ -700,7 +706,7 @@ " true", ")]", "", - "#[File replace(\"$(mgrTests)tests.bat\", \"$version$\", \"$(pVer)\")]" + "#[File replace(\"$(mgrTests)tests.bat\", \"$version$\", \"$(pVerRel)\")]" ] } }, @@ -769,22 +775,23 @@ "Mode": { "$type": "net.r_eg.vsSBE.Events.ModeScript, vsSolutionBuildEvent", "Type": "Script", - "Command": "#[\" \n Offline version\n\"]\n#[$(mgrOffline = \"$(pManager)\\\\batch\\\\Manager.offline.bat\")]\n\n#[IO copy.directory(\"$(odir)\", \"$(dbin)/raw.offline/packages.offline/DllExport\", true, true)]\n#[IO copy.file(\"$(mgrOffline)\", \"$(dbin)/raw.offline/DllExport.bat\", true)]\n##[IO write(\"$(dbin)/raw.offline/DllExport_Configure.bat\"): DllExport -action Configure %*]\n\n#[IO write(\"$(dbin)/raw.offline/Readme.txt\"): \n! Please note ! this folder contains an offline version of the .NET DllExport package. \n\nThat is, manager is already configured for already received package inside this folder through DllExport.bat wrapper in upper level.\nInternet connection is not required for any build at all.\n\nUse the same commands to this wrapper as for the classic version, for example:\n\n```\n DllExport -action Export\n```\n\nPlease read our documentation or press:\n\n```\n DllExport -help\n```\n\n! Don't forget to search the latest an offline version of this package with the new features and bug fixes ! \n \n\nAbout manager:\nhttps://github.com/3F/DllExport/wiki/DllExport-Manager\n\nThe latest releases including nightly builds:\nhttps://github.com/3F/DllExport/releases\n\nThe project repo on GitHub:\nhttps://github.com/3F/DllExport\n\n\n]\n\n", + "Command": "#[\" \n Offline version\n\"]\n#[$(mgrOffline = \"$(pManager)\\\\batch\\\\Manager.offline.bat\")]\n\n#[IO copy.directory(\"$(odir)\", \"$(dbin)/raw.offline/packages/DllExport\", true, true)]\n#[IO copy.file(\"$(mgrOffline)\", \"$(dbin)/raw.offline/DllExport.bat\", true)]\n#[IO copy.file({ \".gitattributes\" }, \"$(dbin)/raw.offline/\", true)]\n##[IO write(\"$(dbin)/raw.offline/DllExport_Configure.bat\"): DllExport -action Configure %*]\n\n#[IO write(\"$(dbin)/raw.offline/Readme.txt\"): \n! Please note ! this folder contains an offline version of the .NET DllExport package. \n\nManager is already configured for already received package inside this folder through DllExport.bat wrapper in upper level.\nInternet connection is not required for any use.\n\nUse the same commands to this wrapper as for the classic version, for example:\n\n```\n DllExport -action Export\n```\n\nPlease read our documentation or press:\n\n```\n DllExport -help\n```\n\n! Don't forget to search the latest an offline version of this package with the new features and bug fixes ! \n \n\nAbout manager:\nhttps://github.com/3F/DllExport/wiki/DllExport-Manager\n\nThe latest releases including nightly builds:\nhttps://github.com/3F/DllExport/releases\n\nThe project repo on GitHub:\nhttps://github.com/3F/DllExport\n\n\n]\n\n", "Command__": [ "#[\" ", " Offline version", "\"]", "#[$(mgrOffline = \"$(pManager)\\\\batch\\\\Manager.offline.bat\")]", "", - "#[IO copy.directory(\"$(odir)\", \"$(dbin)/raw.offline/packages.offline/DllExport\", true, true)]", + "#[IO copy.directory(\"$(odir)\", \"$(dbin)/raw.offline/packages/DllExport\", true, true)]", "#[IO copy.file(\"$(mgrOffline)\", \"$(dbin)/raw.offline/DllExport.bat\", true)]", + "#[IO copy.file({ \".gitattributes\" }, \"$(dbin)/raw.offline/\", true)]", "##[IO write(\"$(dbin)/raw.offline/DllExport_Configure.bat\"): DllExport -action Configure %*]", "", "#[IO write(\"$(dbin)/raw.offline/Readme.txt\"): ", "! Please note ! this folder contains an offline version of the .NET DllExport package. ", "", - "That is, manager is already configured for already received package inside this folder through DllExport.bat wrapper in upper level.", - "Internet connection is not required for any build at all.", + "Manager is already configured for already received package inside this folder through DllExport.bat wrapper in upper level.", + "Internet connection is not required for any use.", "", "Use the same commands to this wrapper as for the classic version, for example:", "", @@ -840,7 +847,7 @@ "Mode": { "$type": "net.r_eg.vsSBE.Events.ModeScript, vsSolutionBuildEvent", "Type": "Script", - "Command": "#[\" v1.5 and 1.6 contains bug if used 1.2.3-alpha, 1.2.3-beta-2, 1.2.3-rc ... \"] \n##[NuGet gnt.raw(\"/t:pack /p:ngin=\\\"$(odir)\\\" /p:ngout=\\\"$(dbin)\\\"\")] \n#[IO cmd(\"tools\\\\gnt.bat /t:pack /p:ngin=\\\"$(SolutionDir)$(odir)\\\" /p:ngout=\\\"$(SolutionDir)$(dbin)\\\"\", 400)]\n\n#[( $(cfgname) != \"Debug\" )\n{\n #[($(revBuild) == \"\" || $(revBuild) ~= \"*\") {\n #[$(zipname = \"DllExport_v$(pVer)$(partRelV).zip\")]\n }\n else {\n #[$(zipname = \"DllExport_v$(pVer).$(revBuild)$(partRelV)_$(bSha1).zip\")]\n }]\n \n #[7z pack.files({ \n \"$(odir)\\\\lib\\\\net20\\\\*.*\",\n \"$(odir)\\\\lib\\\\netstandard2.0\\\\*.*\",\n \"$(odir)\\\\tools\\\\*.*\",\n \"$(odir)\\\\tools\\\\coreclr\\\\*.*\",\n \"$(odir)\\\\tools\\\\raw\\\\lib\\\\net20\\\\*.*\",\n \"$(odir)\\\\tools\\\\raw\\\\lib\\\\netstd\\\\*.*\",\n \"$(odir)\\\\*.*\"\n }, \n \"$(dbin)\\\\$(zipname)\", \n { \"$(odir)\\\\*.nuspec\" })]\n \n \n \n #[\" \n Offline version\n \"]\n \n #[7z pack.directory(\n \"$(dbin)raw.offline\", \n \"$(dbin)offline.$(zipname)\",\n Zip,\n Deflate,\n 1\n )]\n \n}]\n", + "Command": "#[\" v1.5 and 1.6 contains bug if used 1.2.3-alpha, 1.2.3-beta-2, 1.2.3-rc ... \"] \n##[NuGet gnt.raw(\"/t:pack /p:ngin=\\\"$(odir)\\\" /p:ngout=\\\"$(dbin)\\\"\")] \n#[IO cmd(\"tools\\\\gnt.bat /t:pack /p:ngin=\\\"$(SolutionDir)$(odir)\\\" /p:ngout=\\\"$(SolutionDir)$(dbin)\\\"\", 400)]\n\n#[( $(cfgname) != \"Debug\" )\n{\n #[($(revBuild) == \"\" || $(revBuild) ~= \"*\") {\n #[$(zipname = \"DllExport.$(pVerRel).zip\")]\n }\n else {\n #[$(zipname = \"DllExport.$(pVer).$(revBuild)$(partRelV)+$(bSha1).zip\")]\n }]\n \n ##[7z pack.files({ \n \"$(odir)\\\\lib\\\\net20\\\\*.*\",\n \"$(odir)\\\\lib\\\\$(metaCoreTargetVer)\\\\*.*\",\n \"$(odir)\\\\tools\\\\*.*\",\n \"$(odir)\\\\tools\\\\coreclr\\\\*.*\",\n \"$(odir)\\\\tools\\\\raw\\\\lib\\\\net20\\\\*.*\",\n \"$(odir)\\\\tools\\\\raw\\\\lib\\\\netstd\\\\*.*\",\n \"$(odir)\\\\*.*\"\n }, \n \"$(dbin)\\\\$(zipname)\", \n { \"$(odir)\\\\*.nuspec\" })]\n \n \n \n #[\" \n Offline version\n \"]\n \n #[7z pack.directory(\n \"$(dbin)raw.offline\", \n \"$(dbin)offline.$(zipname)\",\n Zip,\n Deflate,\n 1\n )]\n \n}]\n", "Command__": [ "#[\" v1.5 and 1.6 contains bug if used 1.2.3-alpha, 1.2.3-beta-2, 1.2.3-rc ... \"] ", "##[NuGet gnt.raw(\"/t:pack /p:ngin=\\\"$(odir)\\\" /p:ngout=\\\"$(dbin)\\\"\")] ", @@ -849,15 +856,15 @@ "#[( $(cfgname) != \"Debug\" )", "{", " #[($(revBuild) == \"\" || $(revBuild) ~= \"*\") {", - " #[$(zipname = \"DllExport_v$(pVer)$(partRelV).zip\")]", + " #[$(zipname = \"DllExport.$(pVerRel).zip\")]", " }", " else {", - " #[$(zipname = \"DllExport_v$(pVer).$(revBuild)$(partRelV)_$(bSha1).zip\")]", + " #[$(zipname = \"DllExport.$(pVer).$(revBuild)$(partRelV)+$(bSha1).zip\")]", " }]", " ", - " #[7z pack.files({ ", + " ##[7z pack.files({ ", " \"$(odir)\\\\lib\\\\net20\\\\*.*\",", - " \"$(odir)\\\\lib\\\\netstandard2.0\\\\*.*\",", + " \"$(odir)\\\\lib\\\\$(metaCoreTargetVer)\\\\*.*\",", " \"$(odir)\\\\tools\\\\*.*\",", " \"$(odir)\\\\tools\\\\coreclr\\\\*.*\",", " \"$(odir)\\\\tools\\\\raw\\\\lib\\\\net20\\\\*.*\",", diff --git a/3rd-party.txt b/3rd-party.txt index 59a6388..45d86e5 100644 --- a/3rd-party.txt +++ b/3rd-party.txt @@ -1,5 +1,5 @@ -DllExport [ github.com/3F/DllExport ] -- - - - - - - - - - - - - - - - - - - +DllExport - https://github.com/3F/DllExport +- - - - - - - - - - - - - - - - - - - - - - # Third-party software components @@ -21,13 +21,15 @@ DllExport [ github.com/3F/DllExport ] * https://github.com/3F/Conari - ### GetNuTool core & hMSBuild logic + ### GetNuTool + hMSBuild - As an main core for new manager. + As the main core for new manager + and helpers for modern SDK-based projects. * https://github.com/3F/GetNuTool * https://github.com/3F/hMSBuild + ## Dev Dependencies includes the following tools for src: * vsSolutionBuildEvent @@ -41,3 +43,17 @@ DllExport [ github.com/3F/DllExport ] * GetNuTool https://github.com/3F/GetNuTool + + + ## Graphics + + ### The Visual Studio image library + + (Visual Studio 2017; 28 November 2017) + Over 1,000 images can be used to create applications that look visually consistent with Microsoft software: + https://docs.microsoft.com/en-us/visualstudio/designers/the-visual-studio-image-library?view=vs-2017 + + License Terms: + + * ./Resources/vsico/Visual Studio 2017 Image Library EULA.RTF + https://download.microsoft.com/download/0/6/0/0607D8EA-9BB7-440B-A36A-A24EB8C9C67E/Visual%20Studio%202017%20Image%20Library%20EULA.RTF diff --git a/DllExport.sln b/DllExport.sln index 6d7c231..153553a 100644 --- a/DllExport.sln +++ b/DllExport.sln @@ -23,10 +23,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "root", "root", "{E623294B-0 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{44F550ED-6D5E-45CB-8FD0-CBB35051B8E1}" ProjectSection(SolutionItems) = preProject - tools\build.targets = tools\build.targets tools\DllExport.nuspec = tools\DllExport.nuspec tools\gnt.bat = tools\gnt.bat tools\hMSBuild.bat = tools\hMSBuild.bat + tools\init.ps1 = tools\init.ps1 tools\net.r_eg.DllExport.targets = tools\net.r_eg.DllExport.targets EndProjectSection EndProject diff --git a/Manager/batch/.compressor b/Manager/batch/.compressor index c42ddc7..8ed3b62 100644 --- a/Manager/batch/.compressor +++ b/Manager/batch/.compressor @@ -92,7 +92,7 @@ var vdict = gencomb(cdict, 2, (int i) => { return char.IsLetter(cdict[i]) || cdict[i] == '_'; }); // to skip processing for: - var exvar = new[] { "__p_call", "wMgrArgs", "wSlnDir", "wPkgPath", "wMetaLib", "wMetaCor", "wDxpTarget", "wAction", "wSlnFile", "wRootPath", "ngserver" }; + var exvar = new[] { "__p_call", "wMgrArgs", "wPkgVer", "wProxy", "wSlnDir", "wPkgPath", "wMetaLib", "wMetaCor", "wDxpTarget", "wAction", "wSlnFile", "wRootPath", "ngserver" }; const string VNAME = "[a-z_][a-z_0-9]+"; const string VERS = "[Minified version]"; diff --git a/Manager/batch/Manager.bat b/Manager/batch/Manager.bat index e1862e5..cb67832 100644 --- a/Manager/batch/Manager.bat +++ b/Manager/batch/Manager.bat @@ -125,10 +125,10 @@ echo. echo Licensed under the MIT license @echo https://github.com/3F/DllExport echo. -echo Based on hMSBuild and includes GetNuTool core: https://github.com/3F +echo Based on hMSBuild, MvsSln, +GetNuTool: https://github.com/3F echo. @echo. -@echo Usage: DllExport [args to DllExport] [args to GetNuTool core] +@echo Usage: DllExport [args to DllExport] [args to GetNuTool] echo ------ echo. echo Arguments: @@ -271,6 +271,7 @@ set key=!arg[%idx%]! ) else if [!key!]==[-proxy] ( set /a "idx+=1" & call :eval arg[!idx!] v set proxy=!v! + set wProxy=!v! goto continue ) else if [!key!]==[-pkg-link] ( set /a "idx+=1" & call :eval arg[!idx!] v @@ -369,6 +370,7 @@ if defined dxpVersion ( set "dxpVersion=" ) ) +set wPkgVer=!dxpVersion! if z%wAction%==zUpgrade ( call :dbgprint "Upgrade is on" @@ -522,7 +524,7 @@ if defined xmgrtest ( :: keep it as the last one-line command before final exit! if defined mgrUp ( - (copy /B/Y "!wPkgPath!\\DllExport.bat" "!fManager!" > nul) && ( echo Manager has been updated. & exit /B !EXIT_CODE! ) || ( echo -mgr-up failed. & exit /B %ERRORLEVEL% ) + (copy /B/Y "!wPkgPath!\\DllExport.bat" "!fManager!" > nul) && ( echo Manager has been updated. & exit /B 0 ) || ( (echo -mgr-up failed:!EXIT_CODE! 1>&2) & exit /B 1 ) ) exit /B !EXIT_CODE! diff --git a/Manager/batch/Manager.offline.bat b/Manager/batch/Manager.offline.bat index ea444c5..80cb791 100644 --- a/Manager/batch/Manager.offline.bat +++ b/Manager/batch/Manager.offline.bat @@ -1,52 +1,40 @@ @echo off -:: Copyright (c) 2016-2020 Denis Kuzmin [ x-3F@outlook.com ] GitHub/3F -:: Licensed under the MIT license :: https://github.com/3F/DllExport :: --- :: Offline version - wrapper :: - :: - - - - - - - - - - - - - - - -:: the command when no arguments at all +:: Activated version to use +set "pkgVersion=actual" + +:: Use command when no arguments to this wrapper set "defaultCommand=-action Configure" -:: common directory with offline packages -set "pkgsDir=packages.offline" +:: Where offline packages are stored +set "pkgsDir=packages" + + + + + + -:: DllExport package -set "unpackedPkg=DllExport" -:: DllExport Manager -set "mgrFile=DllExport.bat" :: - - - - - - - - - - - - - - - setlocal enableDelayedExpansion set args=%* +set "__=DllExport" +if not defined args set args=%defaultCommand% -call :isEmptyOrWhitespace args _is -if [!_is!]==[1] ( - set args=%defaultCommand% +if "%pkgVersion%"=="actual" ( + call ".\\%pkgsDir%\\%__%\\%__%" -packages %pkgsDir% -dxp-version actual !args! +) else ( + call ".\\%pkgsDir%\\%__%.%pkgVersion%\\%__%" -packages %pkgsDir% !args! ) -call .\%pkgsDir%\%unpackedPkg%\%mgrFile% -packages %pkgsDir% -dxp-version actual !args! - exit /B %ERRORLEVEL% - - - -:isEmptyOrWhitespace -:: Usage: call :isEmptyOrWhitespace input output(1/0) -setlocal enableDelayedExpansion -set "_v=!%1!" - -if not defined _v endlocal & set /a %2=1 & exit /B 0 - -set _v=%_v: =% -set "_v= %_v%" -if [^%_v:~1,1%]==[] endlocal & set /a %2=1 & exit /B 0 - -endlocal & set /a %2=0 -exit /B 0 \ No newline at end of file diff --git a/MetadataCore/MetadataCore.csproj b/MetadataCore/MetadataCore.csproj index 822e4f5..471648f 100644 --- a/MetadataCore/MetadataCore.csproj +++ b/MetadataCore/MetadataCore.csproj @@ -1,12 +1,12 @@ - 1.6.5 + 1.7.0 ..\MetadataFx\ - netstandard2.0 + netstandard1.1 net.r_eg.DllExport DllExport true diff --git a/MetadataFx/AssemblyInfo.cs b/MetadataFx/AssemblyInfo.cs index 9b7b9f9..1cd7ca8 100644 --- a/MetadataFx/AssemblyInfo.cs +++ b/MetadataFx/AssemblyInfo.cs @@ -12,4 +12,4 @@ [assembly: Guid("E0E525D9-49F8-4641-910F-E9D01821AB15")] //[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: AssemblyVersion("1.6.6.*")] +[assembly: AssemblyVersion("1.7.0.*")] diff --git a/MetadataFx/DllExportAttribute.cs b/MetadataFx/DllExportAttribute.cs index a799638..f3f72d5 100644 --- a/MetadataFx/DllExportAttribute.cs +++ b/MetadataFx/DllExportAttribute.cs @@ -67,7 +67,6 @@ 00000600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ /// About our meta-information in user-code: /// https://github.com/3F/DllExport/issues/16 /// - [Serializable] [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class DllExportAttribute: Attribute { diff --git a/NSBin/Log/ISender.cs b/NSBin/Log/ISender.cs deleted file mode 100644 index d7db772..0000000 --- a/NSBin/Log/ISender.cs +++ /dev/null @@ -1,83 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2016-2019 Denis Kuzmin < entry.reg@gmail.com > GitHub/3F - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -*/ - -using System; - -namespace net.r_eg.Conari.Log -{ - public interface ISender - { - /// - /// When message has been received. - /// - event EventHandler Received; - - /// - /// To send new message. - /// - /// - /// - void send(object sender, Message msg); - - /// - /// To send new message. - /// - /// - /// - void send(object sender, string msg); - - /// - /// To send new message. - /// - /// - /// - /// - void send(object sender, string msg, Message.Level type); - - /// - /// To send new message with default sender as typeof(T). - /// It useful for static methods etc. - /// - /// - /// - void send(Message msg) where T: class; - - /// - /// To send new message with default sender as typeof(T). - /// It useful for static methods etc. - /// - /// - /// - void send(string msg) where T : class; - - /// - /// To send new message with default sender as typeof(T). - /// It useful for static methods etc. - /// - /// - /// - /// - void send(string msg, Message.Level type) where T : class; - } -} diff --git a/NSBin/Log/LSender.cs b/NSBin/Log/LSender.cs deleted file mode 100644 index 692bbcc..0000000 --- a/NSBin/Log/LSender.cs +++ /dev/null @@ -1,198 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2016-2019 Denis Kuzmin < entry.reg@gmail.com > GitHub/3F - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -*/ - -using System; - -namespace net.r_eg.Conari.Log -{ - /// - /// A simple retranslator. - /// Use the NLog etc. - /// - public class LSender: ISender - { - /// - /// When message has been received. - /// - public event EventHandler Received = delegate(object sender, Message e) { }; - - /// - /// Static alias to Received. - /// - public static event EventHandler SReceived - { - add { - _.Received += value; - } - remove { - _.Received -= value; - } - } - - /// - /// Static alias to `send(object sender, Message msg)` - /// - /// - /// - public static void Send(object sender, Message msg) - { - _.send(sender, msg); - } - - /// - /// Static alias to `send(object sender, string msg)` - /// - /// - /// - public static void Send(object sender, string msg) - { - _.send(sender, msg); - } - - /// - /// Static alias to `send(object sender, string msg, Message.Level type)` - /// - /// - /// - /// - public static void Send(object sender, string msg, Message.Level type) - { - _.send(sender, msg, type); - } - - /// - /// To send new message with default sender as typeof(T). - /// It useful for static methods etc. - /// - /// - /// - public static void Send(Message msg) where T : class - { - _.send(msg); - } - - /// - /// To send new message with default sender as typeof(T). - /// It useful for static methods etc. - /// - /// - /// - public static void Send(string msg) where T : class - { - _.send(msg); - } - - /// - /// To send new message with default sender as typeof(T). - /// It useful for static methods etc. - /// - /// - /// - /// - public static void Send(string msg, Message.Level type) where T : class - { - _.send(msg, type); - } - - /// - /// To send new message. - /// - /// - /// - public void send(object sender, Message msg) - { - if(sender == null) { - sender = this; - } - - Received(sender, msg); - } - - /// - /// To send new message. - /// - /// - /// - public void send(object sender, string msg) - { - send(sender, msg, Message.Level.Debug); - } - - /// - /// To send new message. - /// - /// - /// - /// - public void send(object sender, string msg, Message.Level type) - { - send(sender, new Message(msg, type)); - } - - /// - /// To send new message with default sender as typeof(T). - /// It useful for static methods etc. - /// - /// - /// - public void send(Message msg) where T : class - { - send(typeof(T), msg); - } - - /// - /// To send new message with default sender as typeof(T). - /// It useful for static methods etc. - /// - /// - /// - public void send(string msg) where T : class - { - send(typeof(T), msg); - } - - /// - /// To send new message with default sender as typeof(T). - /// It useful for static methods etc. - /// - /// - /// - /// - public void send(string msg, Message.Level type) where T : class - { - send(typeof(T), msg, type); - } - - /// - /// Thread-safe getting the instance of the Sender class - /// - public static ISender _ - { - get { return _lazy.Value; } - } - private static readonly Lazy _lazy = new Lazy(() => new LSender()); - - protected LSender() { } - } -} diff --git a/NSBin/NSBin.csproj b/NSBin/NSBin.csproj index 3975883..b03fceb 100644 --- a/NSBin/NSBin.csproj +++ b/NSBin/NSBin.csproj @@ -39,6 +39,10 @@ key.snk + + ..\packages\Conari.1.4.0\lib\net40\Conari.dll + + ..\packages\Mono.Cecil.0.11.1\lib\net40\Mono.Cecil.dll @@ -49,9 +53,6 @@ - - - diff --git a/NSBin/packages.config b/NSBin/packages.config index 1a58e0c..2eacdba 100644 --- a/NSBin/packages.config +++ b/NSBin/packages.config @@ -1,4 +1,5 @@  + \ No newline at end of file diff --git a/RGiesecke.DllExport.MSBuild/DllExportVersion.cs b/RGiesecke.DllExport.MSBuild/DllExportVersion.cs index 8b681c1..8b8a268 100644 --- a/RGiesecke.DllExport.MSBuild/DllExportVersion.cs +++ b/RGiesecke.DllExport.MSBuild/DllExportVersion.cs @@ -10,6 +10,6 @@ namespace RGiesecke.DllExport // but currently I don't want to change this, because it will be automatically changed if plugin exists (use .version) internal struct DllExportVersion { - internal const string Version = "1.6.6"; + internal const string Version = "1.7.0"; } } diff --git a/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/DllExportAppDomainIsolatedTask.cs b/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/DllExportAppDomainIsolatedTask.cs index 74e1322..2583ce3 100644 --- a/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/DllExportAppDomainIsolatedTask.cs +++ b/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/DllExportAppDomainIsolatedTask.cs @@ -341,6 +341,17 @@ public string MetaLib } } + public PatchesType Patches + { + get => _ExportTaskImplementation.Patches; + set => _ExportTaskImplementation.Patches = value; + } + + public long PatchesRaw + { + set => Patches = (PatchesType)value; + } + public PeCheckType PeCheck { get => _ExportTaskImplementation.PeCheck; diff --git a/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/DllExportTask.cs b/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/DllExportTask.cs index ec4c903..684400e 100644 --- a/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/DllExportTask.cs +++ b/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/DllExportTask.cs @@ -348,6 +348,17 @@ public string MetaLib } } + public PatchesType Patches + { + get => _ExportTaskImplementation.Patches; + set => _ExportTaskImplementation.Patches = value; + } + + public long PatchesRaw + { + set => Patches = (PatchesType)value; + } + public PeCheckType PeCheck { get => _ExportTaskImplementation.PeCheck; diff --git a/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/ExportTaskImplementation.cs b/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/ExportTaskImplementation.cs index 39925f4..a81600f 100644 --- a/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/ExportTaskImplementation.cs +++ b/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/ExportTaskImplementation.cs @@ -275,6 +275,12 @@ public string MetaLib } } + public PatchesType Patches + { + get => _Values.Patches; + set => _Values.Patches = value; + } + public PeCheckType PeCheck { get => _Values.PeCheck; diff --git a/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/IInputRawValues.cs b/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/IInputRawValues.cs index ce320ef..37ab027 100644 --- a/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/IInputRawValues.cs +++ b/RGiesecke.DllExport.MSBuild/RGiesecke.DllExport.MSBuild/IInputRawValues.cs @@ -1,8 +1,16 @@  +//# Author of original code ([Decompiled] MIT-License): Copyright (c) 2009-2015 Robert Giesecke +//# Use Readme & LICENSE files for details. + +//# Modifications: Copyright (c) 2016-2020 Denis Kuzmin < x-3F@outlook.com > GitHub/3F +//$ Distributed under the MIT License (MIT) + namespace RGiesecke.DllExport.MSBuild { public interface IInputRawValues: IInputValues { + long PatchesRaw { set; } + int PeCheckRaw { set; } } } diff --git a/RGiesecke.DllExport/DisabledAssemblyResolver.cs b/RGiesecke.DllExport/DisabledAssemblyResolver.cs index 4e38323..4e2cbf2 100644 --- a/RGiesecke.DllExport/DisabledAssemblyResolver.cs +++ b/RGiesecke.DllExport/DisabledAssemblyResolver.cs @@ -1,7 +1,7 @@ //# Author of original code ([Decompiled] MIT-License): Copyright (c) 2009-2015 Robert Giesecke //# Use Readme & LICENSE files for details. -//# Modifications: Copyright (c) 2016-2019 Denis Kuzmin < entry.reg@gmail.com > GitHub/3F +//# Modifications: Copyright (c) 2016-2020 Denis Kuzmin < x-3F@outlook.com > GitHub/3F //$ Distributed under the MIT License (MIT) using Mono.Cecil; @@ -13,12 +13,20 @@ namespace RGiesecke.DllExport /// Related issue: https://github.com/3F/DllExport/issues/127 /// /// For issue127 we can also use DefaultAssemblyResolver.AddSearchDirectory(), - /// But we don't actually need any assembly resolving in our case at all. + /// But we don't actually need resolving of any ref assemblies. Only ref types in our meta attr. /// internal sealed class DisabledAssemblyResolver: DefaultAssemblyResolver { - public override AssemblyDefinition Resolve(AssemblyNameReference name) + public override AssemblyDefinition Resolve(AssemblyNameReference aref) { + // https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.callingconvention + // Assemblies: System.Runtime.InteropServices.dll, mscorlib.dll, netstandard.dll + + if(aref.Name == "System.Runtime.InteropServices" || aref.Name == "mscorlib" || aref.Name == "netstandard") + { + return base.Resolve(aref); + } + return null; // It will be considered as `resolved = false` due to internal ResolutionException processing in cecil. } } diff --git a/RGiesecke.DllExport/DllExportVersion.cs b/RGiesecke.DllExport/DllExportVersion.cs index 8b681c1..8b8a268 100644 --- a/RGiesecke.DllExport/DllExportVersion.cs +++ b/RGiesecke.DllExport/DllExportVersion.cs @@ -10,6 +10,6 @@ namespace RGiesecke.DllExport // but currently I don't want to change this, because it will be automatically changed if plugin exists (use .version) internal struct DllExportVersion { - internal const string Version = "1.6.6"; + internal const string Version = "1.7.0"; } } diff --git a/RGiesecke.DllExport/IInputValues.cs b/RGiesecke.DllExport/IInputValues.cs index 969cb18..f261318 100644 --- a/RGiesecke.DllExport/IInputValues.cs +++ b/RGiesecke.DllExport/IInputValues.cs @@ -104,6 +104,12 @@ string MetaLib set; } + PatchesType Patches + { + get; + set; + } + PeCheckType PeCheck { get; diff --git a/RGiesecke.DllExport/InputValuesCore.cs b/RGiesecke.DllExport/InputValuesCore.cs index 9ce6fa0..93fe8a2 100644 --- a/RGiesecke.DllExport/InputValuesCore.cs +++ b/RGiesecke.DllExport/InputValuesCore.cs @@ -107,6 +107,12 @@ public string MetaLib set; } + public PatchesType Patches + { + get; + set; + } + public PeCheckType PeCheck { get; diff --git a/RGiesecke.DllExport/Parsing/Actions/ClassParserAction.cs b/RGiesecke.DllExport/Parsing/Actions/ClassParserAction.cs index 786bab2..c774d23 100644 --- a/RGiesecke.DllExport/Parsing/Actions/ClassParserAction.cs +++ b/RGiesecke.DllExport/Parsing/Actions/ClassParserAction.cs @@ -5,6 +5,8 @@ //$ Distributed under the MIT License (MIT) using System; +using System.Text; +using System.Text.RegularExpressions; namespace RGiesecke.DllExport.Parsing.Actions { @@ -31,6 +33,15 @@ public override void Execute(ParserStateValues state, string trimmedLine) state.AddLine = false; state.State = ParserState.MethodDeclaration; } + else if(trimmedLine.StartsWith(".field", StringComparison.Ordinal)) + { + if(TreatField(state, ref trimmedLine)) + { + state.AddLine = false; + state.Result.Add(trimmedLine); + } + return; + } else { if(!trimmedLine.StartsWith("} // end of class", StringComparison.Ordinal)) @@ -41,5 +52,67 @@ public override void Execute(ParserStateValues state, string trimmedLine) state.State = state.ClassNames.Count > 0 ? ParserState.Class : ParserState.Normal; } } + + /// + /// raw definition of the .field + /// true if processed + private bool TreatField(ParserStateValues state, ref string raw) + { + if((Parser.InputValues.Patches & PatchesType.InfToken) == PatchesType.InfToken) + { + // .field public static literal float32 'Infinity' = float32(inf) + // .field public static literal float32 'NegativeInfinity' = float32(-inf) + // .field public static literal float64 'Infinity' = float64(inf) + // .field public static literal float64 'NegativeInfinity' = float64(-inf) + + Match m = Regex.Match + ( + raw, + @"=\s* + float(?:(?'x64'64)|32) + \( + (?'sign'-?) + inf + \) + ", + RegexOptions.IgnorePatternWhitespace + ); + + if(m.Success) + { + raw = new string(' ', 2) + raw.Substring(0, m.Index) + GetFloatDef(m); + return true; + } + } + + return false; + } + + private static string GetFloatDef(Match fld) + { + var sb = new StringBuilder(4); + sb.Append("= float"); + + if(fld.Groups["x64"].Success) + { + sb.Append("64"); + sb.Append + ( + fld.Groups["sign"].Value.Length > 0 ? + "(0xFFF0000000000000)" : "(0x7FF0000000000000)" + ); + + return sb.ToString(); + } + + sb.Append("32"); + sb.Append + ( + fld.Groups["sign"].Value.Length > 0 ? + "(0xFF800000)" : "(0x7F800000)" + ); + + return sb.ToString(); + } } } diff --git a/RGiesecke.DllExport/Parsing/Actions/MethodParserAction.cs b/RGiesecke.DllExport/Parsing/Actions/MethodParserAction.cs index 60623a9..3d62fa5 100644 --- a/RGiesecke.DllExport/Parsing/Actions/MethodParserAction.cs +++ b/RGiesecke.DllExport/Parsing/Actions/MethodParserAction.cs @@ -5,6 +5,8 @@ //$ Distributed under the MIT License (MIT) using System; +using System.Text; +using System.Text.RegularExpressions; namespace RGiesecke.DllExport.Parsing.Actions { @@ -22,6 +24,74 @@ public override void Execute(ParserStateValues state, string trimmedLine) state.State = ParserState.Class; return; } + + if(trimmedLine.StartsWith("IL_", StringComparison.Ordinal)) + { + if(TreatIL(state, ref trimmedLine)) + { + state.AddLine = false; + state.Result.Add(trimmedLine); + } + return; + } + } + + private bool TreatIL(ParserStateValues state, ref string raw) + { + if((Parser.InputValues.Patches & PatchesType.InfToken) == PatchesType.InfToken) + { + // ldc.r8 inf + // ldc.r8 -inf + // ldc.r4 inf + // ldc.r4 -inf + + Match m = Regex.Match + ( + raw, + @" + ldc.r(?:(?'x64'8)|4) + \s* + (?'sign'-?) + inf + ", + RegexOptions.IgnorePatternWhitespace + ); + + if(m.Success) + { + raw = new string(' ', 4) + raw.Substring(0, m.Index) + GetFloatDef(m); + return true; + } + } + + return false; + } + + private static string GetFloatDef(Match fld) + { + var sb = new StringBuilder(4); + sb.Append("ldc.r"); + + if(fld.Groups["x64"].Success) + { + sb.Append("8 "); + sb.Append + ( + fld.Groups["sign"].Value.Length > 0 ? + "(00 00 00 00 00 00 F0 FF)" : "(00 00 00 00 00 00 F0 7F)" + ); + + return sb.ToString(); + } + + sb.Append("4 "); + sb.Append + ( + fld.Groups["sign"].Value.Length > 0 ? + "(00 00 80 FF)" : "(00 00 80 7F)" + ); + + return sb.ToString(); } } } diff --git a/RGiesecke.DllExport/PatchesType.cs b/RGiesecke.DllExport/PatchesType.cs new file mode 100644 index 0000000..175522b --- /dev/null +++ b/RGiesecke.DllExport/PatchesType.cs @@ -0,0 +1,24 @@ + +//# Author of original code ([Decompiled] MIT-License): Copyright (c) 2009-2015 Robert Giesecke +//# Use Readme & LICENSE files for details. + +//# Modifications: Copyright (c) 2016-2020 Denis Kuzmin < x-3F@outlook.com > GitHub/3F +//$ Distributed under the MIT License (MIT) + +namespace RGiesecke.DllExport +{ + public enum PatchesType: long + { + None, + + /// + /// Affects ldc.r8; ldc.r4; .field; + /// + /// inf/-inf to 0x7F800000/0xFF800000 + /// 0x7FF0000000000000/0xFFF0000000000000 + /// + /// https://github.com/3F/DllExport/issues/128 + /// + InfToken = 0x01, + } +} diff --git a/RGiesecke.DllExport/PeCheckType.cs b/RGiesecke.DllExport/PeCheckType.cs index 69054c4..462e916 100644 --- a/RGiesecke.DllExport/PeCheckType.cs +++ b/RGiesecke.DllExport/PeCheckType.cs @@ -1,4 +1,9 @@ - +//# Author of original code ([Decompiled] MIT-License): Copyright (c) 2009-2015 Robert Giesecke +//# Use Readme & LICENSE files for details. + +//# Modifications: Copyright (c) 2016-2020 Denis Kuzmin < x-3F@outlook.com > GitHub/3F +//$ Distributed under the MIT License (MIT) + namespace RGiesecke.DllExport { public enum PeCheckType: int diff --git a/RGiesecke.DllExport/RGiesecke.DllExport.csproj b/RGiesecke.DllExport/RGiesecke.DllExport.csproj index 046ed73..0b7d0e5 100644 --- a/RGiesecke.DllExport/RGiesecke.DllExport.csproj +++ b/RGiesecke.DllExport/RGiesecke.DllExport.csproj @@ -58,6 +58,7 @@ + diff --git a/Readme.md b/Readme.md index 1158a53..8fd74c5 100644 --- a/Readme.md +++ b/Readme.md @@ -7,16 +7,16 @@ Copyright (c) 2009-2015 Robert Giesecke Copyright (c) 2016-2020 Denis Kuzmin < x-3F@outlook.com > GitHub/3F ``` -[![Build status](https://ci.appveyor.com/api/projects/status/yh1pnuhaqk8h334h/branch/master?svg=true)](https://ci.appveyor.com/project/3Fs/dllexport/branch/master) +[![Build status](https://ci.appveyor.com/api/projects/status/hh2oxibqoi6wrdnc/branch/master?svg=true)](https://ci.appveyor.com/project/3Fs/dllexport-ix27o/branch/master) [![Latest-Release](https://img.shields.io/github/release/3F/DllExport.svg)](https://github.com/3F/DllExport/releases/latest) [![License](https://img.shields.io/badge/License-MIT-74A5C2.svg)](https://github.com/3F/DllExport/blob/master/LICENSE) -[![coreclr_ILAsm](https://img.shields.io/badge/coreclr_ILAsm-v4.5.1-C8597A.svg)](https://www.nuget.org/packages/ILAsm/) +[![coreclr_ILAsm](https://img.shields.io/badge/coreclr.ILAsm-4.700.1-C8597A.svg)](https://www.nuget.org/packages/ILAsm/) [![Cecil](https://img.shields.io/badge/Cecil-0.11.1-1182C3.svg)](https://github.com/jbevain/cecil) [![MvsSln](https://img.shields.io/badge/MvsSln-v2.5.0-865FC5.svg)](https://github.com/3F/MvsSln) [![GetNuTool core](https://img.shields.io/badge/GetNuTool-v1.8-93C10B.svg)](https://github.com/3F/GetNuTool) [![Conari](https://img.shields.io/badge/Conari-v1.4.0-8AA875.svg)](https://github.com/3F/Conari) -[![Build history](https://buildstats.info/appveyor/chart/3Fs/dllexport?buildCount=20&includeBuildsFromPullRequest=true&showStats=true)](https://ci.appveyor.com/project/3Fs/dllexport/history) +[![Build history](https://buildstats.info/appveyor/chart/3Fs/dllexport-ix27o?buildCount=20&includeBuildsFromPullRequest=true&showStats=true)](https://ci.appveyor.com/project/3Fs/dllexport-ix27o/history) [`DllExport`](https://3f.github.io/DllExport/releases/latest/manager/)` -action Configure` [[?](#how-to-get-dllexport)] @@ -131,6 +131,8 @@ Read also my explanations from here: [about mscoree](https://github.com/3F/DllEx ### How to get DllExport +[**`tl;dr`: put this inside solution folder, then click it there.**](https://3f.github.io/DllExport/releases/latest/manager/) + v1.6+ have no official support of NuGet clients. [[?](https://github.com/3F/DllExport/wiki/DllExport-Manager-Q-A)] * [New Wizard and embeddable manager](https://www.youtube.com/watch?v=sBWt-KdQtoc) @@ -152,17 +154,17 @@ Other way: * (deprecated) NuGet PM: `Install-Package DllExport` * (deprecated) NuGet Commandline: `nuget install DllExport` * GHR Stable: [/releases](https://github.com/3F/DllExport/releases) [ [latest stable](https://github.com/3F/DllExport/releases/latest) ] -* CI builds: [`/artifacts` page](https://ci.appveyor.com/project/3Fs/dllexport/history) or find as `Pre-release` with mark `🎲 Nightly build` on [GitHub Releases](https://github.com/3F/DllExport/releases) page. +* CI builds: [`/artifacts` page](https://ci.appveyor.com/project/3Fs/dllexport-ix27o/history) ( [old CI](https://ci.appveyor.com/project/3Fs/dllexport/history) ) or find `🎲 CI build` on [GitHub Releases](https://github.com/3F/Dllexport/releases) page. -### How to Build +### How to Build .NET DllExport Just use build.bat if you need final binaries (NuGet package as `DllExport..nupkg`, Manager, zip-archives, and others). -```bash -> build +```batch +.\build ``` -Part of this build scripts works via vssbe ([?](https://github.com/3F/DllExport/issues/31#issuecomment-294231378)) and for build via console (including CI etc.) uses [CIM](https://www.nuget.org/packages/vsSBE.CI.MSBuild/) version of this. So you do not need anything else, just type `build`. +Part of this build scripts works via vssbe ([?](https://github.com/3F/DllExport/issues/31#issuecomment-294231378)) and for build via console (including CI etc.) uses [CIM](https://www.nuget.org/packages/vsSolutionBuildEvent/) version of this. You do not need anything else, just type `build`. For Visual Studio use this [vsix version for IDE](https://visualstudiogallery.msdn.microsoft.com/0d1dbfd7-ed8a-40af-ae39-281bfeca2334/) @@ -206,13 +208,13 @@ use additional `Diagnostic` key to msbuild if you need more details: Now you can debug at runtime. -### coreclr - ILAsm / ILDasm +### coreclr ILAsm / ILDasm -We use **our custom versions on coreclr**, special for DllExport project - https://github.com/3F/coreclr +We're using **our custom versions on coreclr** specially for our .NET DllExport project - https://github.com/3F/coreclr This helps to avoid some problems ([like this](https://github.com/3F/DllExport/issues/17)) and more... -*To build minimal version (means that it does not include all components as for original coreclr repo):* +*To build minimal version (it will not include all components as for original coreclr repo):* * Restore git submodule or use repo: https://github.com/3F/coreclr.git @@ -223,27 +225,24 @@ git submodule update --init --recursive *Make sure that you have installed [CMake](https://cmake.org/download/), then build simply:* ```bash -build_s all x86 x64 Release -build_s x86 Release +build-s -all -x86 -x64 Release ``` or use ```bash -build_coreclr_x86.cmd -build_coreclr_x86_x64.cmd +build-coreclr-ilasm-x64.cmd +build-coreclr-ilasm-x86+x64.cmd ``` -*You can also use our binaries of coreclr separately if needed:* +*You can also use already compiled versions:* * [![NuGet package](https://img.shields.io/nuget/v/ILAsm.svg)](https://www.nuget.org/packages/ILAsm/) -* Look also [here](https://github.com/3F/coreclr/issues/1) - ### Donation -Please note again, the [UnmanagedExports](https://www.nuget.org/packages/UnmanagedExports) was created by Robert Giesecke. You should [visit his page](https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports) if you need. +Please note again, the [UnmanagedExports](https://www.nuget.org/packages/UnmanagedExports) was created by Robert Giesecke. You need [visit his page](https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports). -But this repository **does not related** to Robert and generally still being developed by [GitHub/3F](https://github.com/3F) developer (Follow: [ [GitHub](https://github.com/3F) ]; [ [twitter](https://twitter.com/GitHub3F) ]). +But this repository [**does not related**](https://github.com/3F/DllExport/issues/87#issuecomment-438576100) to Robert and generally still being developed by [GitHub/3F](https://github.com/3F) developer (Follow: [ [GitHub](https://github.com/3F) ]; [ [twitter](https://twitter.com/GitHub3F) ]). If something is helpful from *3F/DllExport,* donations are welcomed, and thanks ! diff --git a/Resources/vsico/CPP_ProjectSENode_16x_.png b/Resources/vsico/CPP_ProjectSENode_16x_.png new file mode 100644 index 0000000..d3ae42c Binary files /dev/null and b/Resources/vsico/CPP_ProjectSENode_16x_.png differ diff --git a/Resources/vsico/CS_ProjectSENode_16x.png b/Resources/vsico/CS_ProjectSENode_16x.png new file mode 100644 index 0000000..5b0f299 Binary files /dev/null and b/Resources/vsico/CS_ProjectSENode_16x.png differ diff --git a/Resources/vsico/FS_ProjectSENode_16x.png b/Resources/vsico/FS_ProjectSENode_16x.png new file mode 100644 index 0000000..19378b8 Binary files /dev/null and b/Resources/vsico/FS_ProjectSENode_16x.png differ diff --git a/Resources/vsico/VB_ProjectSENode_16x.png b/Resources/vsico/VB_ProjectSENode_16x.png new file mode 100644 index 0000000..5d5c6bc Binary files /dev/null and b/Resources/vsico/VB_ProjectSENode_16x.png differ diff --git a/Resources/vsico/Visual Studio 2017 Image Library EULA.RTF b/Resources/vsico/Visual Studio 2017 Image Library EULA.RTF new file mode 100644 index 0000000..5fa0578 --- /dev/null +++ b/Resources/vsico/Visual Studio 2017 Image Library EULA.RTF @@ -0,0 +1,769 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff42\deff0\stshfdbch11\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033\themelang1033\themelangfe2052\themelangcs1025{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};} +{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New{\*\falt Arial};}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol{\*\falt Bookshelf Symbol 3};} +{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings{\*\falt Symbol};}{\f11\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt ?l?r ??\'81\'66c};} +{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ???????????????????????????????};}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;} +{\f42\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma{\*\falt ?l?r ???};}{\f43\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Trebuchet MS{\*\falt Arial};} +{\f44\fbidi \fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}@MS Mincho{\*\falt @MS Gothic};}{\f45\fbidi \fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@SimSun{\*\falt @Arial Unicode MS};} +{\f46\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Segoe UI;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};} +{\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ???????????????????????????????};}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} +{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};} +{\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ???????????????????????????????};}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} +{\fbiminor\f31507\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f49\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\f50\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};} +{\f52\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\f53\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};}{\f54\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};} +{\f55\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};}{\f56\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\f57\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};} +{\f69\fbidi \fmodern\fcharset238\fprq1 Courier New CE{\*\falt Arial};}{\f70\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr{\*\falt Arial};}{\f72\fbidi \fmodern\fcharset161\fprq1 Courier New Greek{\*\falt Arial};} +{\f73\fbidi \fmodern\fcharset162\fprq1 Courier New Tur{\*\falt Arial};}{\f74\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew){\*\falt Arial};}{\f75\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic){\*\falt Arial};} +{\f76\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic{\*\falt Arial};}{\f77\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese){\*\falt Arial};}{\f161\fbidi \fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt ?l?r ??\'81\'66c};} +{\f159\fbidi \fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt ?l?r ??\'81\'66c};}{\f160\fbidi \fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt ?l?r ??\'81\'66c};}{\f162\fbidi \fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt ?l?r ??\'81\'66c};} +{\f163\fbidi \fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt ?l?r ??\'81\'66c};}{\f166\fbidi \fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt ?l?r ??\'81\'66c};} +{\f181\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ???????????????????????????????};}{\f469\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt ?l?r ???};}{\f470\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt ?l?r ???};} +{\f472\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt ?l?r ???};}{\f473\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt ?l?r ???};}{\f474\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew){\*\falt ?l?r ???};} +{\f475\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt ?l?r ???};}{\f476\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt ?l?r ???};}{\f477\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese){\*\falt ?l?r ???};} +{\f478\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt ?l?r ???};}{\f479\fbidi \fswiss\fcharset238\fprq2 Trebuchet MS CE{\*\falt Arial};}{\f480\fbidi \fswiss\fcharset204\fprq2 Trebuchet MS Cyr{\*\falt Arial};} +{\f482\fbidi \fswiss\fcharset161\fprq2 Trebuchet MS Greek{\*\falt Arial};}{\f483\fbidi \fswiss\fcharset162\fprq2 Trebuchet MS Tur{\*\falt Arial};}{\f486\fbidi \fswiss\fcharset186\fprq2 Trebuchet MS Baltic{\*\falt Arial};} +{\f491\fbidi \fmodern\fcharset0\fprq1 @MS Mincho Western{\*\falt @MS Gothic};}{\f489\fbidi \fmodern\fcharset238\fprq1 @MS Mincho CE{\*\falt @MS Gothic};}{\f490\fbidi \fmodern\fcharset204\fprq1 @MS Mincho Cyr{\*\falt @MS Gothic};} +{\f492\fbidi \fmodern\fcharset161\fprq1 @MS Mincho Greek{\*\falt @MS Gothic};}{\f493\fbidi \fmodern\fcharset162\fprq1 @MS Mincho Tur{\*\falt @MS Gothic};}{\f496\fbidi \fmodern\fcharset186\fprq1 @MS Mincho Baltic{\*\falt @MS Gothic};} +{\f501\fbidi \fnil\fcharset0\fprq2 @SimSun Western{\*\falt @Arial Unicode MS};}{\f509\fbidi \fswiss\fcharset238\fprq2 Segoe UI CE;}{\f510\fbidi \fswiss\fcharset204\fprq2 Segoe UI Cyr;}{\f512\fbidi \fswiss\fcharset161\fprq2 Segoe UI Greek;} +{\f513\fbidi \fswiss\fcharset162\fprq2 Segoe UI Tur;}{\f514\fbidi \fswiss\fcharset177\fprq2 Segoe UI (Hebrew);}{\f515\fbidi \fswiss\fcharset178\fprq2 Segoe UI (Arabic);}{\f516\fbidi \fswiss\fcharset186\fprq2 Segoe UI Baltic;} +{\f517\fbidi \fswiss\fcharset163\fprq2 Segoe UI (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};} +{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};} +{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};} +{\fdbmajor\f31520\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ???????????????????????????????};}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} +{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;} +{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};} +{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};} +{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};} +{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};} +{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};} +{\fdbminor\f31560\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ???????????????????????????????};}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31573\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);} +{\fhiminor\f31574\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);} +{\fbiminor\f31578\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\fbiminor\f31579\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;}{\fbiminor\f31581\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\fbiminor\f31582\fbidi \fswiss\fcharset162\fprq2 Arial Tur;} +{\fbiminor\f31583\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\fbiminor\f31584\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\fbiminor\f31585\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;} +{\fbiminor\f31586\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red43\green87\blue154;\red230\green230\blue230; +\cfollowedhyperlink\ctint255\cshade255\red128\green0\blue128;\red31\green78\blue121;\ctextone\ctint255\cshade255\red0\green0\blue0;}{\*\defchp \fs22\dbch\af11 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \sautoupd \sqformat \spriority0 Normal;}{\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls12\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext1 \slink15 \sqformat heading 1;}{\s2\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\jclisttab\tx813\wrapdefault\aspalpha\aspnum\faauto\ls12\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 +\ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext2 \slink16 \sqformat heading 2;}{\s3\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls12\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext3 \slink17 \sqformat heading 3;}{\s4\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls12\ilvl3\outlinelevel3\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext4 \slink18 \sqformat heading 4;}{\s5\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar +\tx1792\jclisttab\tx2155\wrapdefault\aspalpha\aspnum\faauto\ls12\ilvl4\outlinelevel4\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext5 \slink19 \sqformat heading 5;}{\s6\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls12\ilvl5\outlinelevel5\adjustright\rin0\lin2149\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext6 \slink20 \sqformat heading 6;}{\s7\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar +\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls12\ilvl6\outlinelevel6\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext7 \slink21 \sqformat heading 7;}{\s8\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls12\ilvl7\outlinelevel7\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext8 \slink22 \sqformat heading 8;}{\s9\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar +\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls12\ilvl8\outlinelevel8\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext9 \slink23 \sqformat heading 9;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f0\hich\af0\dbch\af11\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\* +\cs15 \additive \rtlch\fcs1 \ab\af42\afs19 \ltrch\fcs0 \b\f42\fs19 \sbasedon10 \slink1 \slocked Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af42\afs19 \ltrch\fcs0 \b\f42\fs19 \sbasedon10 \slink2 \slocked Heading 2 Char;}{\*\cs17 \additive +\rtlch\fcs1 \af42\afs19 \ltrch\fcs0 \f42\fs19 \sbasedon10 \slink3 \slocked Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 \af42\afs19 \ltrch\fcs0 \f42\fs19 \sbasedon10 \slink4 \slocked Heading 4 Char;}{\*\cs19 \additive \rtlch\fcs1 \af42\afs19 +\ltrch\fcs0 \f42\fs19 \sbasedon10 \slink5 \slocked Heading 5 Char;}{\*\cs20 \additive \rtlch\fcs1 \af42\afs19 \ltrch\fcs0 \f42\fs19 \sbasedon10 \slink6 \slocked Heading 6 Char;}{\*\cs21 \additive \rtlch\fcs1 \af42\afs19 \ltrch\fcs0 \f42\fs19 +\sbasedon10 \slink7 \slocked Heading 7 Char;}{\*\cs22 \additive \rtlch\fcs1 \af42\afs19 \ltrch\fcs0 \f42\fs19 \sbasedon10 \slink8 \slocked Heading 8 Char;}{\*\cs23 \additive \rtlch\fcs1 \af42\afs19 \ltrch\fcs0 \f42\fs19 \sbasedon10 \slink9 \slocked +Heading 9 Char;}{\s24\ql \li357\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext24 Body 1;}{\s25\ql \li720\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext25 Body 2;}{\s26\ql \li1077\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 +\af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext26 Body 3;}{ +\s27\ql \li1435\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext27 Body 4;}{\s28\ql \li1803\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1803\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext28 Body 5;}{\s29\ql \li2160\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin2160\itap0 \rtlch\fcs1 +\af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext29 Body 6;}{ +\s30\ql \li2506\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext30 Body 7;}{\s31\ql \li2863\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext31 Body 8;}{\s32\ql \li3221\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 +\af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext32 Body 9;}{\s33\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext33 Bullet 1;}{ +\s34\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext34 Bullet 2;}{\s35\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1077\itap0 +\rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext35 \slink87 Bullet 3;}{\s36\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext36 Bullet 4;}{ +\s37\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext37 Bullet 5;}{\s38\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin2149\itap0 +\rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext38 Bullet 6;}{\s39\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar +\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext39 Bullet 7;}{ +\s40\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext40 Bullet 8;}{\s41\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin3221\itap0 +\rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon32 \snext41 Bullet 9;}{ +\s42\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af42\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext0 Heading EULA;}{\s43\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af42\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 Heading Software Title;}{\s44\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext44 Preamble;}{\s45\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext1 Preamble Border;}{ +\s46\qc \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext46 Heading Warranty;}{\s47\ql \fi-360\li360\ri0\sb120\sa120\widctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls11\outlinelevel0\adjustright\rin0\lin360\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 Heading 1 Warranty;}{\s48\ql \fi-360\li720\ri0\sb120\sa120\widctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls11\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext0 Heading 2 Warranty;}{\s49\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls10\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon3 \snext49 \slink107 Heading 3 Bold;}{\s50\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\ul\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon36 \snext50 +Bullet 4 Underline;}{\s51\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon35 \snext51 Bullet 3 Underline;}{\s52\ql \li720\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0 \rtlch\fcs1 +\af42\afs19\alang1025 \ltrch\fcs0 \fs19\ul\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon25 \snext52 Body 2 Underline;}{ +\s53\ql \li1077\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\ul\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon26 \snext53 Body 3 Underline;}{\s54\ql \li0\ri0\sb120\sa120\sl480\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext54 \slink55 Body Text Indent;}{\*\cs55 \additive \rtlch\fcs1 \af42\afs19 \ltrch\fcs0 \f42\fs19 \sbasedon10 \slink54 \slocked \ssemihidden +Body Text Indent Char;}{\s56\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \ai\af42\afs19\alang1025 \ltrch\fcs0 +\i\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon36 \snext56 Bullet 4 Italics;}{\*\cs57 \additive \rtlch\fcs1 \af42 \ltrch\fcs0 \f42\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 Body 2 Char;}{\* +\cs58 \additive \rtlch\fcs1 \af42 \ltrch\fcs0 \f42\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 Body 3 Char;}{\*\cs59 \additive \rtlch\fcs1 \af42 \ltrch\fcs0 \f42\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 Body 4 Char;}{\*\cs60 +\additive \rtlch\fcs1 \af42 \ltrch\fcs0 \f42\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 Body 1 Char;}{\s61\ql \li0\ri0\sb120\sa120\widctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 +\rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon44 \snext61 Preamble Border Above;}{ +\s62\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext62 \slink63 \ssemihidden footnote text;}{\*\cs63 \additive \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \f42\fs20 \sbasedon10 \slink62 \slocked \ssemihidden Footnote Text Char;}{\*\cs64 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \super +\sbasedon10 \ssemihidden footnote reference;}{\s65\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext65 \slink66 \ssemihidden endnote text;}{\*\cs66 \additive \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \f42\fs20 \sbasedon10 \slink65 \slocked \ssemihidden +Endnote Text Char;}{\*\cs67 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \super \sbasedon10 \ssemihidden endnote reference;}{\s68\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 +\ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext68 \slink69 \ssemihidden annotation text;}{\*\cs69 \additive \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \f42\fs20 +\sbasedon10 \slink68 \slocked \ssemihidden Comment Text Char;}{\*\cs70 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden annotation reference;}{\s71\ql \li0\ri0\sa160\sl-240\slmult0 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext71 Char;}{ +\s72\ql \li0\ri0\sa160\sl-240\slmult0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext72 Char Char Char Char;}{\*\cs73 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 Hyperlink,Char Char7;}{\s74\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\af42\afs16\alang1025 \ltrch\fcs0 \fs16\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext74 \slink75 \ssemihidden Balloon Text;}{\*\cs75 \additive \rtlch\fcs1 \af42\afs16 \ltrch\fcs0 \f42\fs16 +\sbasedon10 \slink74 \slocked \ssemihidden Balloon Text Char;}{\*\cs76 \additive \rtlch\fcs1 \ab\af43 \ltrch\fcs0 \b\f43\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 Heading 2 Char1;}{\*\cs77 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \sbasedon10 +page number;}{\s78\ql \li0\ri0\sa160\sl-240\slmult0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext78 Char Char Char Char1;}{\s79\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af42\afs19\alang1025 +\ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \slink109 Body 0 Bold;}{\s80\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 +\ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 Body 0;}{\s81\ql \li0\ri0\sb120\sa120\widctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext81 \slink82 header;}{\*\cs82 \additive \rtlch\fcs1 \af42\afs19 \ltrch\fcs0 \f42\fs19 \sbasedon10 \slink81 \slocked +Header Char;}{\s83\ql \li0\ri0\sb120\sa120\widctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext83 \slink84 footer;}{\*\cs84 \additive \rtlch\fcs1 \af42\afs19 \ltrch\fcs0 \f42\fs19 \sbasedon10 \slink83 \slocked Footer Char;}{ +\s85\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af42\afs20\alang1025 \ltrch\fcs0 \b\fs20\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon68 \snext68 \slink86 \ssemihidden \sunhideused annotation subject;}{\*\cs86 \additive \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\f42\fs20 \sbasedon69 \slink85 \slocked \ssemihidden Comment Subject Char;}{\*\cs87 \additive \rtlch\fcs1 \af42\afs19 +\ltrch\fcs0 \f42\fs19 \sbasedon10 \slink35 \slocked Bullet 3 Char1;}{\s88\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon35 \snext88 Bullet 3 Underlined;}{\*\cs89 \additive \rtlch\fcs1 \af42\afs19 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\langnp1033\langfenp1033 \sbasedon10 Char Char;}{\s90\ql \li0\ri0\sl-240\slmult0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs20\alang1025 \ltrch\fcs0 +\fs18\lang1033\langfe1033\loch\f43\hich\af43\dbch\af11\cgrid\langnp1033\langfenp1033 \snext90 \spriority0 AdditionalSoftware;}{\*\cs91 \additive \rtlch\fcs1 \af42\afs24\alang1025 \ltrch\fcs0 \b\f43\fs24\lang1033\langfe1033\langnp1033\langfenp1033 +\sbasedon10 \spriority0 Char Char1;}{\s92\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon36 \snext92 \spriority0 Bullet 4 Underlined;}{\s93\ql \fi-360\li360\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls13\adjustright\rin0\lin360\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext93 \spriority0 +Heading French Warranty;}{\*\cs94 \additive \f42\lang1033\langfe0\langnp1033\langfenp0 \slocked Body 3 Char Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car;}{\*\cs95 \additive +\f2\cf15\lang1024\langfe1024\noproof tw4winExternal;}{\*\cs96 \additive \v\f2\fs24\cf12\sub tw4winMark;}{\*\cs97 \additive \b\f42 Preamble Char;}{\*\cs98 \additive \f2\fs40\cf4 tw4winError;}{\*\cs99 \additive \cf2 tw4winTerm;}{\*\cs100 \additive +\f2\cf11\lang1024\langfe1024\noproof tw4winPopup;}{\*\cs101 \additive \f2\cf10\lang1024\langfe1024\noproof tw4winJump;}{\*\cs102 \additive \f2\cf6\lang1024\langfe1024\noproof tw4winInternal;}{\*\cs103 \additive \f2\cf13\lang1024\langfe1024\noproof +DO_NOT_TRANSLATE;}{\s104\ql \li0\ri0\sb120\sa120\sl480\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext104 \slink105 Body Text 2;}{\*\cs105 \additive \rtlch\fcs1 \af42\afs19 \ltrch\fcs0 \f42\fs19 \sbasedon10 \slink104 \slocked Body Text 2 Char;}{ +\s106\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls10\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon49 \snext106 \slink108 Style Heading 3 Bold + (Asian) Times New Roman 9.5 pt;}{\*\cs107 \additive \rtlch\fcs1 \ab\af42\afs19 \ltrch\fcs0 \b\f42\fs19 +\sbasedon10 \slink49 \slocked Heading 3 Bold Char;}{\*\cs108 \additive \rtlch\fcs1 \ab0\af42\afs19 \ltrch\fcs0 \b0\f42\fs19 \sbasedon107 \slink106 \slocked Style Heading 3 Bold + (Asian) Times New Roman 9.5 pt Char;}{\*\cs109 \additive \rtlch\fcs1 +\ab\af42\afs19 \ltrch\fcs0 \b\f42\fs19 \sbasedon10 \slink79 \slocked Body 0 Bold Char;}{\s110\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af42\afs20\alang1025 \ltrch\fcs0 +\b\fs20\lang1026\langfe2052\super\loch\f42\hich\af42\dbch\af11\cgrid\langnp1026\langfenp2052 \sbasedon0 \snext110 \slink111 LIMPA_T4WINEXTERNAL;}{\*\cs111 \additive \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 +\b\f42\fs20\lang1026\langfe2052\super\langnp1026\langfenp2052 \sbasedon10 \slink110 \slocked LIMPA_T4WINEXTERNAL Char;}{\s112\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 +\ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 \snext112 \shidden \ssemihidden \styrsid16126089 Revision;}{ +\s113\ql \li720\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext113 \sqformat \spriority34 \styrsid10510522 List Paragraph;}{\s114\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe1033\loch\f0\hich\af0\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext114 \ssemihidden \sunhideused \styrsid1114668 Normal (Web);}{\*\cs115 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \cf17\chshdng0\chcfpat0\chcbpat18 +\sbasedon10 \ssemihidden \sunhideused \styrsid604295 Mention;}{\*\cs116 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf19 \sbasedon10 \ssemihidden \sunhideused \styrsid141583 FollowedHyperlink;}}{\*\listtable{\list\listtemplateid176468498\listhybrid +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid692200086\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s41\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid196815738}{\list\listtemplateid-1793664660{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af0 \ltrch\fcs0 \b\i0\fbias0\hres0\chhres0 \s47\fi-360\li360\jclisttab\tx360\lin360 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af0 \ltrch\fcs0 \b\i0\fbias0\hres0\chhres0 \s48\fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02);}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'03(\'03);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'03(\'04);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'03(\'05);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listname ;}\listid394402059}{\list\listtemplateid-355573436{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af43\afs20 \ltrch\fcs0 \b\i0\f43\fs20\fbias0\hres0\chhres0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 +\levelfollow0\levelstartat2\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af43\afs20 \ltrch\fcs0 \b\i0\f43\fs20\fbias0\hres0\chhres0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af0\afs20 \ltrch\fcs0 \b\i0\fs20\hres0\chhres0 \fi-357\li2247\jclisttab\tx2610\lin2247 }{\listlevel\levelnfc3\levelnfcn3\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\strike0\f43\fs20\ulnone\animtext0\striked0\fbias0\hres0\chhres0 \fi-358\li1435 +\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 +\b0\i0\strike0\f43\fs20\ulnone\animtext0\striked0\fbias0\hres0\chhres0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid398096909}{\list\listtemplateid1928476992{\listlevel +\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af43\afs20 \ltrch\fcs0 \b\i0\f43\fs20\fbias0\hres0\chhres0 \fi-357\li357\jclisttab\tx360\lin357 } +{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af43\afs20 \ltrch\fcs0 \b\i0\f43\fs20\fbias0\hres0\chhres0 \fi-363\li720 +\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af42\afs20 \ltrch\fcs0 \b\i0\f42\fs20\fbias0\hres0\chhres0 \s49 +\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 +\b0\i0\strike0\f43\fs20\ulnone\fbias0\hres0\chhres0 \fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 +\ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\strike0\f43\fs20\ulnone\fbias0\hres0\chhres0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid398796681} +{\list\listtemplateid789093748\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-317712510\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s34 +\fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160 +\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880 +\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 +}{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid477573462}{\list\listtemplateid-53848358 +{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af42\afs20 \ltrch\fcs0 \b\i0\f42\fs20\fbias0\hres0\chhres0 \s1\fi-357\li357 +\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af42\afs20 \ltrch\fcs0 \b\i0\f42\fs20\fbias0\hres0\chhres0 \s2 +\fi-363\li813\jclisttab\tx813\lin813 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af42\afs20 \ltrch\fcs0 +\b\i0\f42\fs20\fbias0\hres0\chhres0 \s3\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 +\ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\strike0\f43\fs20\ulnone\fbias0\hres0\chhres0 \s4\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\strike0\f43\fs20\ulnone\fbias0\hres0\chhres0 \s5\fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \s6\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \s7\fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \s8\fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255 +\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af43\afs20 \ltrch\fcs0 \b0\i0\f43\fs20\fbias0\hres0\chhres0 \s9\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname +;}\listid752163927}{\list\listtemplateid-296591990\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s40\fi-357\li2863 +\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760 +\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname +;}\listid810947713}{\list\listtemplateid-1813845996\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s39\fi-357\li2506 +\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760 +\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname +;}\listid1219436735}{\list\listtemplateid378150926\listhybrid{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid265747024\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0\afs20 +\ltrch\fcs0 \fs20\hres0\chhres0 \fi-360\li717\lin717 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 +\hres0\chhres0 \fi-360\li1437\lin1437 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 +\fi-180\li2157\lin2157 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698703\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 +\fi-360\li2877\lin2877 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 +\fi-360\li3597\lin3597 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 +\fi-180\li4317\lin4317 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698703\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 +\fi-360\li5037\lin5037 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 +\fi-360\li5757\lin5757 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 +\fi-180\li6477\lin6477 }{\listname ;}\listid1484349604}{\list\listtemplateid303218272\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid612407812 +\'01\u-3913 ?;}{\levelnumbers;}\f3\cf21\fbias0\hres0\chhres0 \s36\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;} +\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160 +\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;} +\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1559511898}{\list\listtemplateid-743794326\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid2033377338\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s35\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1567649130}{\list\listtemplateid1719716970\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext +\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers +;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;} +\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1778334231}{\list\listtemplateid-154908222\listhybrid{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid-596080174\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af0 \ltrch\fcs0 \b\i0\fbias0\hres0\chhres0 \s93\fi-360\li360\jclisttab\tx360\lin360 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698713\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698715\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698703\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698713\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698715\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698703\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698713\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698715\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-180\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1795057320}{\list\listtemplateid-961874242\listhybrid{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-1175557160\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s37\fi-357\li1792\jclisttab\tx1795\lin1792 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1848404271}{\list\listtemplateid-1802592190\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid1229593488\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s38\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1877695764}{\list\listtemplateid1186249844\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid1637229796\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s33\fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid2054619191}{\list\listtemplateid-1777316308{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \b\fbias0\hres0\chhres0 \fi-360\li717\lin717 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'01);}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li1077\lin1077 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02);}{\levelnumbers\'01;} +\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li1437\lin1437 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'03);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 +\hres0\chhres0 \fi-360\li1797\lin1797 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'04);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li2157\lin2157 } +{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'05);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li2517\lin2517 }{\listlevel\levelnfc0\levelnfcn0\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li2877\lin2877 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li3237\lin3237 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li3597\lin3597 }{\listname ;}\listid2106000387}}{\*\listoverridetable{\listoverride\listid2054619191\listoverridecount0\ls1}{\listoverride\listid477573462 +\listoverridecount0\ls2}{\listoverride\listid1567649130\listoverridecount0\ls3}{\listoverride\listid1559511898\listoverridecount0\ls4}{\listoverride\listid1848404271\listoverridecount0\ls5}{\listoverride\listid1877695764\listoverridecount0\ls6} +{\listoverride\listid1219436735\listoverridecount0\ls7}{\listoverride\listid810947713\listoverridecount0\ls8}{\listoverride\listid196815738\listoverridecount0\ls9}{\listoverride\listid398796681\listoverridecount0\ls10}{\listoverride\listid394402059 +\listoverridecount0\ls11}{\listoverride\listid752163927\listoverridecount0\ls12}{\listoverride\listid1795057320\listoverridecount0\ls13}{\listoverride\listid1778334231\listoverridecount0\ls14}{\listoverride\listid2106000387\listoverridecount0\ls15} +{\listoverride\listid1559511898\listoverridecount9{\lfolevel}{\lfolevel}{\lfolevel}{\lfolevel}{\lfolevel}{\lfolevel}{\lfolevel}{\lfolevel}{\lfolevel}\ls16}{\listoverride\listid398796681\listoverridecount9{\lfolevel\listoverridestartat\levelstartat1} +{\lfolevel\listoverridestartat\levelstartat3}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat +\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}\ls17}{\listoverride\listid1484349604\listoverridecount9{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1} +{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat +\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}\ls18}{\listoverride\listid398096909\listoverridecount9{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat2}{\lfolevel\listoverridestartat\levelstartat1} +{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat +\levelstartat1}\ls19}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0 +\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid24700\rsid132780\rsid141583\rsid407036\rsid556435\rsid604295\rsid671738\rsid935470\rsid1114668\rsid1256475\rsid1585582 +\rsid1779296\rsid2188784\rsid2191981\rsid2703239\rsid2760892\rsid2776600\rsid2839602\rsid2843069\rsid2894536\rsid2952202\rsid2966433\rsid4075613\rsid4665536\rsid4719898\rsid4751129\rsid4992240\rsid5180381\rsid5460004\rsid5511034\rsid5580574\rsid5703983 +\rsid5704214\rsid5789843\rsid5791644\rsid5863584\rsid6256253\rsid6258586\rsid6773493\rsid7364356\rsid7435018\rsid7762260\rsid7891370\rsid8002983\rsid8475760\rsid8793400\rsid8928998\rsid9321567\rsid9771098\rsid10510522\rsid10693558\rsid10843085 +\rsid10969395\rsid10973738\rsid11171691\rsid11229722\rsid11286843\rsid11681275\rsid11798191\rsid12476574\rsid12781581\rsid12805208\rsid12868782\rsid13062212\rsid13119978\rsid13135303\rsid13202321\rsid13702731\rsid14418600\rsid14622161\rsid14836578 +\rsid14942451\rsid14971392\rsid15035827\rsid15689479\rsid15818407\rsid16015881\rsid16126089\rsid16150897\rsid16393048\rsid16415067\rsid16591162\rsid16648972}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1 +\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\creatim\yr2017\mo11\dy2\hr13\min20}{\revtim\yr2017\mo11\dy2\hr13\min22}{\version1}{\edmins0}{\nofpages3}{\nofwords1736}{\nofchars9901}{\nofcharsws11614}{\vern45}}{\*\userprops {\propname MSIP_Label_f42aa342-8706 +-4288-bd11-ebb85995028c_Enabled}\proptype30{\staticval True}{\propname MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId}\proptype30{\staticval 72f988bf-86f1-41af-91ab-2d7cd011db47}{\propname MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Ref} +\proptype30{\staticval https://api.informationprotection.azure.com/api/72f988bf-86f1-41af-91ab-2d7cd011db47}{\propname MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetBy}\proptype30{\staticval kathan@microsoft.com}{\propname MSIP_Label_f42aa342-8706-42 +88-bd11-ebb85995028c_SetDate}\proptype30{\staticval 2017-06-14T14:08:29.2867265-07:00}{\propname MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name}\proptype30{\staticval General}{\propname MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Application} +\proptype30{\staticval Microsoft Azure Information Protection}{\propname MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Extended_MSFT_Method}\proptype30{\staticval Automatic}{\propname Sensitivity}\proptype30{\staticval General}}{\*\xmlnstbl {\xmlns1 htt +p://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl720\margr720\margt720\margb720\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace95\dgvspace180\dghorigin720\dgvorigin720\dghshow2\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\rempersonalinfo\allowfieldendsel +\wrppunct\asianbrkrule\rsidroot15818407\newtblstyruls\nogrowautofit\remdttm\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal +\nouicompat \fet0{\*\wgrffmtfilter 013f}\nofeaturethrottle1\ilfomacatclnup14{\*\ftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 +\ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7364356 \chftnsep +\par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7364356 \chftnsepc +\par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7364356 \chftnsep +\par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7364356 \chftnsepc +\par }}\ltrpar \sectd \ltrsect\psz1\linex0\headery0\footery0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\headerl \ltrpar \pard\plain \ltrpar\s81\ql \li0\ri0\sb120\sa120\widctlpar +\tqc\tx4320\tqr\tx8640\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid16015881 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42 +\ltrch\fcs0 \insrsid13135303\charrsid16015881 +\par }}{\headerr \ltrpar \pard\plain \ltrpar\s81\ql \li0\ri0\sb120\sa120\widctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid16015881 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid13135303\charrsid16015881 +\par }}{\footerl \ltrpar \pard\plain \ltrpar\s83\ql \li0\ri0\sb120\sa120\widctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid15818407 +\par }}{\footerr \ltrpar \pard\plain \ltrpar\s83\ql \li0\ri0\sb120\sa120\widctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid15818407 +\par }}{\headerf \ltrpar \pard\plain \ltrpar\s81\ql \li0\ri0\sb120\sa120\widctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid16015881 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid13135303\charrsid16015881 +\par }}{\footerf \ltrpar \pard\plain \ltrpar\s83\ql \li0\ri0\sb120\sa120\widctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid15818407 +\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}} +{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8 +\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\s42\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 +\rtlch\fcs1 \ab\af42\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 +MICROSOFT SOFTWARE LICENSE TERMS}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par }\pard\plain \ltrpar\s43\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrb\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af42\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 MICROSOFT VISUAL}{\rtlch\fcs1 \af42\afs20 +\ltrch\fcs0 \fs20\dbch\af13\insrsid5180381\charrsid12868782 \hich\af42\dbch\af13\loch\f42 STUDIO }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid132780 \hich\af42\dbch\af13\loch\f42 2017}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14418600 \hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid10843085 \hich\af42\dbch\af13\loch\f42 IMAGE LIBRARY}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid2703239 +\hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par }\pard\plain \ltrpar\s44\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 +These license terms are an agreement between Microsoft Corporation (or based on wh\hich\af42\dbch\af13\loch\f42 ere you live, one of its affiliates) and you. They apply to the software named above}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid5180381\charrsid12868782 .}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 The terms also apply to any Microsoft}{\rtlch\fcs1 \ab0\af42\afs20 +\ltrch\fcs0 \b0\fs20\dbch\af13\insrsid5180381\charrsid12868782 \hich\af42\dbch\af13\loch\f42 services or updates for the software, except to the extent those have }{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid16415067\charrsid12868782 \hich\af42\dbch\af13\loch\f42 different}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid5180381\charrsid12868782 \hich\af42\dbch\af13\loch\f42 terms.}{\rtlch\fcs1 \ab0\af42\afs20 +\ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par }\pard\plain \ltrpar\s61\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid14971392\charrsid141583 \hich\af42\dbch\af11\loch\f42 IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE}{ +\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid16415067\charrsid141583 \hich\af42\dbch\af11\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid14971392\charrsid141583 \hich\af42\dbch\af11\loch\f42 RIGHTS BELOW.}{\rtlch\fcs1 \af42\afs20 +\ltrch\fcs0 \fs20\dbch\af13\insrsid15818407\charrsid141583 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\loch\af42\hich\af42\dbch\af13\insrsid14971392\charrsid141583 \hich\af42\dbch\af13\loch\f42 1.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls12\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid141583 \hich\af42\dbch\af13\loch\f42 INSTALLATION AND USE RIGHTS. }{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid11798191\charrsid141583 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \cs57\b\fs20\loch\af42\hich\af42\dbch\af13\insrsid2703239\charrsid141583 \hich\af42\dbch\af13\loch\f42 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\jclisttab\tx813\tx5760\wrapdefault\aspalpha\aspnum\faauto\ls12\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid10843085 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \cs57\fs20\dbch\af13\insrsid2703239\charrsid141583 \hich\af42\dbch\af13\loch\f42 Use.}{\rtlch\fcs1 \ab0\af42\afs20 +\ltrch\fcs0 \cs57\b0\fs20\dbch\af13\insrsid2703239\charrsid141583 \hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \cs57\b0\fs20\dbch\af13\insrsid1585582 \hich\af42\dbch\af13\loch\f42 You}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 +\cs57\b0\fs20\dbch\af13\insrsid10843085\charrsid141583 \hich\af42\dbch\af13\loch\f42 may use copies of the software}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \cs57\b0\fs20\dbch\af13\insrsid1585582 \hich\af42\dbch\af13\loch\f42 images}{\rtlch\fcs1 +\ab0\af42\afs20 \ltrch\fcs0 \cs57\b0\fs20\dbch\af13\insrsid10843085\charrsid141583 \hich\af42\dbch\af13\loch\f42 to develop and test their applications.}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \cs57\fs20\dbch\af13\insrsid10843085\charrsid141583 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\f42\fs20\insrsid5863584\charrsid141583 \hich\af42\dbch\af11\loch\f42 2.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls12\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid5863584 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid5863584\charrsid141583 \hich\af42\dbch\af11\loch\f42 DISTRIBUTABLE CODE. }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\b0\fs20\insrsid5863584\charrsid141583 \hich\af42\dbch\af11\loch\f42 The software contains }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid1585582 \hich\af42\dbch\af11\loch\f42 images}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\b0\fs20\insrsid5863584\charrsid141583 \hich\af42\dbch\af11\loch\f42 \hich\f42 that you are permitted to distribute (\'93\loch\f42 \hich\f42 Distributable Code\'94\loch\f42 ) in \hich\af42\dbch\af11\loch\f42 \hich\f42 +applications you develop as described in this Section. (For this Section the term \'93\loch\f42 \hich\f42 distribution\'94\loch\f42 also means deployment of your applications for third parties to access over the Internet.)}{\rtlch\fcs1 \af42\afs20 +\ltrch\fcs0 \fs20\insrsid5863584\charrsid141583 +\par {\listtext\pard\plain\ltrpar \s49 \rtlch\fcs1 \ab\af0\afs20 \ltrch\fcs0 \b\fs20\loch\af42\hich\af42\dbch\af13\insrsid5863584\charrsid141583 \hich\af42\dbch\af13\loch\f42 a.\tab}}\pard\plain \ltrpar\s49\ql \fi-360\li717\ri0\sb120\sa120\nowidctlpar +\tx720\tx1077\wrapdefault\aspalpha\aspnum\faauto\ls18\outlinelevel2\adjustright\rin0\lin717\itap0\pararsid5863584 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid5863584\charrsid141583 \hich\af42\dbch\af13\loch\f42 Right to Use and Distribute.}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af0\insrsid5863584\charrsid141583 +\par {\listtext\pard\plain\ltrpar \s50 \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\cf21\loch\af3\hich\af3\dbch\af13\insrsid5863584\charrsid141583 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s50\ql \fi-360\li1080\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\jclisttab\tx1170\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls16\adjustright\rin0\lin1080\itap0\pararsid5863584 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid5863584\charrsid141583 \hich\af42\dbch\af13\loch\f42 Images}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\ulnone\dbch\af13\insrsid5863584\charrsid141583 \hich\af42\dbch\af13\loch\f42 . You may copy}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid15035827\charrsid141583 \hich\af42\dbch\af13\loch\f42 and}{\rtlch\fcs1 \af42\afs20 +\ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid5863584\charrsid141583 \hich\af42\dbch\af13\loch\f42 distribute\hich\af42\dbch\af13\loch\f42 \hich\af42\dbch\af13\loch\f42 images }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid671738 +\hich\af42\dbch\af13\loch\f42 from}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid5863584\charrsid141583 \hich\af42\dbch\af13\loch\f42 the Image Library}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid5704214 +\hich\af42\dbch\af13\loch\f42 in applications you develop with the Visual Studio family of products. Your use of the Images must be in accordance }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid5580574 \hich\af42\dbch\af13\loch\f42 +with }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid671738 \hich\af42\dbch\af13\loch\f42 the use descriptions associated with the }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid5704214 +\hich\af42\dbch\af13\loch\f42 I}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid671738 \hich\af42\dbch\af13\loch\f42 mages}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid15035827\charrsid141583 +\hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid5863584\charrsid141583 +\par {\listtext\pard\plain\ltrpar \s50 \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\cf21\loch\af3\hich\af3\dbch\af13\insrsid5863584\charrsid141583 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af42\dbch\af13\loch\f42 Third Party Distribution}{\rtlch\fcs1 +\af42\afs20 \ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid5863584\charrsid141583 \hich\af42\dbch\af13\loch\f42 . You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications.}{\rtlch\fcs1 +\af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid5863584\charrsid141583 +\par {\listtext\pard\plain\ltrpar \s49 \rtlch\fcs1 \ab\af43\afs20 \ltrch\fcs0 \b\fs20\loch\af43\hich\af43\dbch\af13\insrsid5863584\charrsid141583 \hich\af43\dbch\af13\loch\f43 b.\tab}}\pard\plain \ltrpar\s49\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\jclisttab\tx2610\wrapdefault\aspalpha\aspnum\faauto\ls19\ilvl1\outlinelevel2\adjustright\rin0\lin720\itap0\pararsid5863584 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid5863584\charrsid141583 \hich\af42\dbch\af13\loch\f42 Distribution Requirements.}{\rtlch\fcs1 \af42\afs20 +\ltrch\fcs0 \cs58\fs20\dbch\af13\insrsid5863584\charrsid141583 \hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \cs58\b0\fs20\dbch\af13\insrsid5863584\charrsid141583 \hich\af42\dbch\af13\loch\f42 For any \hich\af42\dbch\af13\loch\f42 +Distributable Code you distribute, you must}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid5863584\charrsid141583 +\par {\listtext\pard\plain\ltrpar \s36 \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\cf21\loch\af3\hich\af3\dbch\af13\insrsid5863584\charrsid671738 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s36\ql \fi-358\li1168\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1170\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls16\adjustright\rin0\lin1168\itap0\pararsid5863584 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid5863584\charrsid671738 \hich\af42\dbch\af13\loch\f42 add significant primary functionality to it in your applications; +\par {\listtext\pard\plain\ltrpar \s36 \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\cf21\loch\af3\hich\af3\dbch\af13\insrsid5863584\charrsid671738 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af42\dbch\af13\loch\f42 +require distributors and external end users to agree to terms that protect the Distributable Code at least as much as this agreement; and, +\par {\listtext\pard\plain\ltrpar \s36 \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\cf21\loch\af3\hich\af3\dbch\af13\insrsid5863584\charrsid14622161 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid5863584\charrsid14622161 \hich\af42\dbch\af13\loch\f42 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\hich\f42 \rquote \loch\f42 + fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the Distributable Code. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\loch\af42\hich\af42\dbch\af13\insrsid5863584\charrsid14622161 \hich\af42\dbch\af13\loch\f42 3.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls12\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid5863584 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid5863584\charrsid14622161 \hich\af42\dbch\af13\loch\f42 Distribution Restrictions.\hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid5863584\charrsid14622161 \hich\af42\dbch\af13\loch\f42 You may not use Microsoft\hich\f42 \rquote \loch\f42 s trademarks in your applications\hich\f42 \rquote \loch\f42 + names or branding in a way that suggests your applications come from or are endorsed by Microsoft; or modify or distribute the source code of any Distributable Code so that any part of it become\hich\af42\dbch\af13\loch\f42 +s subject to an Excluded License. An Excluded L}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid5863584\charrsid5704214 \hich\af42\dbch\af13\loch\f42 +icense is one that requires, as a condition of use, modification or distribution, that (i) the code be disclosed or distributed in source code form; or (ii) others have the right to modify it.}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid5863584\charrsid5704214 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\f42\fs20\insrsid5511034\charrsid5704214 \hich\af42\dbch\af11\loch\f42 4.\tab}}\pard \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls12\outlinelevel0\adjustright\rin0\lin357\itap0 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid5511034\charrsid5704214 \hich\af42\dbch\af11\loch\f42 TERMS FOR SPE\hich\af42\dbch\af11\loch\f42 +CIFIC COMPONENTS.}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \cs57\b0\fs20\dbch\af13\insrsid5511034\charrsid10973738 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\f42\fs20\insrsid1114668\charrsid12868782 \hich\af42\dbch\af11\loch\f42 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\widctlpar +\jclisttab\tx720\jclisttab\tx813\wrapdefault\aspalpha\aspnum\faauto\ls12\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid1114668 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid1114668\charrsid12868782 \hich\af42\dbch\af11\loch\f42 Third Party Components.\~ }{\rtlch\fcs1 \af42\afs20 +\ltrch\fcs0 \b0\fs20\insrsid1114668\charrsid12868782 \hich\af42\dbch\af11\loch\f42 The software may include third party components with separate legal notices or governe\hich\af42\dbch\af11\loch\f42 +d by other agreements, as may be described in the ThirdPartyNotices file}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid556435 \hich\af42\dbch\af11\loch\f42 (s) }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid1114668\charrsid12868782 +\hich\af42\dbch\af11\loch\f42 accompanying the software. Even if such components are governed by other agreements, the disclaimers and the limitations on and exclusions of damages below also apply.\~ }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\b0\fs20\insrsid1114668 +\par }\pard \ltrpar\s2\ql \li720\ri0\sb120\sa120\widctlpar\jclisttab\tx813\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid8793400 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid14418600\charrsid8793400 +\hich\af42\dbch\af11\loch\f42 The softwa\hich\af42\dbch\af11\loch\f42 +re may also include components licensed under open source licenses with source code availability obligations. Copies of those licenses, if applicable, are included in the ThirdPartyNotices file(s). You may obtain this source code from us, if and as requir +\hich\af42\dbch\af11\loch\f42 e\hich\af42\dbch\af11\loch\f42 d under the relevant open source licenses, as set forth in the ThirdPartyNotices file(s). You may also find a copy of the source code available at }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af42 +\ltrch\fcs0 \b0\insrsid14418600\charrsid8793400 \hich\af42\dbch\af11\loch\f42 HYPERLINK "https://thirdpartysource.microsoft.com" }{\rtlch\fcs1 \af42 \ltrch\fcs0 \b0\insrsid14418600\charrsid8793400 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b68000000680074007400700073003a002f002f00740068006900720064007000610072007400790073006f0075007200630065002e006d006900630072006f0073006f00660074002e0063006f006d002f0000007958 +81f43b1d7f48af2c825dc485276300000000a5ab0003001b00000bff446300ff00740000006100}}}{\fldrslt {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \cs73\b0\fs20\ul\cf2\insrsid14418600\charrsid8793400 \hich\af42\dbch\af11\loch\f42 https://thirdpartysource.microsoft.com}}} +\sectd \ltrsect\psz1\linex0\headery0\footery0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \cs73\b0\fs20\ul\cf2\insrsid14418600\charrsid8793400 \hich\af42\dbch\af11\loch\f42 /}{\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 +\cs73\b0\fs20\ul\cf2\insrsid14418600 .}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid14418600\charrsid14418600 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\f42\fs20\insrsid5511034\charrsid12868782 \hich\af42\dbch\af11\loch\f42 5.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls12\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af42\afs20 \ltrch\fcs0 \fs20\insrsid5511034\charrsid12868782 \hich\af42\dbch\af11\loch\f42 DATA. }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid5511034\charrsid12868782 \hich\af42\dbch\af11\loch\f42 +The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\b0\fs20\insrsid7762260 \hich\af42\dbch\af11\loch\f42 You}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid5511034\charrsid12868782 \hich\af42\dbch\af11\loch\f42 may opt-out of many of these scenarios}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\b0\fs20\insrsid2191981 ,}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid5511034\charrsid12868782 \hich\af42\dbch\af11\loch\f42 but not all,\hich\af42\dbch\af11\loch\f42 as described in the product documentation. }{\rtlch\fcs1 \af42\afs20 +\ltrch\fcs0 \b0\fs20\insrsid2191981\charrsid13702731 \hich\af42\dbch\af11\loch\f42 There are also s}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\cf1\insrsid2191981\charrsid13702731 \hich\af42\dbch\af11\loch\f42 +ome features in the software that may enable you }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\cf1\insrsid13702731 \hich\af42\dbch\af11\loch\f42 and Microsoft }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\cf1\insrsid2191981\charrsid13702731 +\hich\af42\dbch\af11\loch\f42 to collect data from users of your applications.}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid5511034\charrsid12868782 \hich\af42\dbch\af11\loch\f42 If you use these features}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\b0\fs20\insrsid13702731 ,}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid5511034\charrsid12868782 \hich\af42\dbch\af11\loch\f42 you must comply with applicable law, including providing\hich\af42\dbch\af11\loch\f42 + appropriate notices to users of your applications}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid13702731 \hich\af42\dbch\af11\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid13702731\charrsid13702731 \hich\af42\dbch\af11\loch\f42 +and you should }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\cf1\insrsid13702731\charrsid13702731 \hich\af42\dbch\af11\loch\f42 provide a copy of Microsoft\hich\f42 \rquote \loch\f42 +s privacy statement to your users. The Microsoft privacy statement is located here}{\rtlch\fcs1 \af42 \ltrch\fcs0 \b0\cf1\insrsid13702731 \hich\af42\dbch\af11\loch\f42 }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\b0\fs20\cf20\insrsid1779296\charrsid1779296 \hich\af42\dbch\af11\loch\f42 HYPERLINK "https://go.microsoft.com/fwlink/?LinkID=824704" }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\cf20\insrsid2894536\charrsid1779296 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b76000000680074007400700073003a002f002f0067006f002e006d006900630072006f0073006f00660074002e0063006f006d002f00660077006c0069006e006b002f003f004c0069006e006b00490044003d003800 +320034003700300034000000795881f43b1d7f48af2c825dc485276300000000a5ab0003000000}}}{\fldrslt {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \cs73\b0\fs20\ul\cf2\insrsid1779296\charrsid1779296 \hich\af42\dbch\af11\loch\f42 +https://go.microsoft.com/fwlink/?LinkID=824704}}}\sectd \ltrsect\psz1\linex0\headery0\footery0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid5511034\charrsid604295 .}{\rtlch\fcs1 \af42\afs20 +\ltrch\fcs0 \b0\fs20\insrsid5511034\charrsid12868782 \hich\af42\dbch\af11\loch\f42 You can learn more about data collection and use in the help documentation and }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid13702731 +\hich\af42\dbch\af11\loch\f42 our}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid5511034\charrsid12868782 \hich\af42\dbch\af11\loch\f42 privacy statement. Your use of the software operates as your consent to these practices. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\loch\af42\hich\af42\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 6.\tab}}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 SCOPE OF LICENSE.}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 + The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless ap\hich\af42\dbch\af13\loch\f42 +plicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. +\hich\af42\dbch\af13\loch\f42 Y\hich\af42\dbch\af13\loch\f42 ou may not}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid14971392\charrsid12868782 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s34\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 work around any technical limitations in the software;}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid14971392\charrsid6256253 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14971392\charrsid6256253 \hich\af42\dbch\af13\loch\f42 reverse engineer, decompile or disassemble the software, }{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid13062212\charrsid6256253 \hich\af42\dbch\af11\loch\f42 +or otherwise attempt to derive the source code for the software}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid13062212\charrsid6256253 \hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14971392\charrsid6256253 \hich\af42\dbch\af13\loch\f42 except}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid13062212\charrsid6256253 ,}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14971392\charrsid6256253 \hich\af42\dbch\af13\loch\f42 and only to the extent }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid13062212\charrsid6256253 \hich\af42\dbch\af13\loch\f42 +required by third party licensing terms governing the use of certain open source components that may be included in the software}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid6256253 \hich\af42\dbch\af13\loch\f42 ;}{ +\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15818407\charrsid6256253 +\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid16591162\charrsid12868782 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid16591162\charrsid12868782 \hich\af42\dbch\af13\loch\f42 remove, minimize, block or modify any notices of Microsoft or its suppli}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid935470\charrsid12868782 +\hich\af42\dbch\af13\loch\f42 ers in the soft}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid16591162\charrsid12868782 \hich\af42\dbch\af13\loch\f42 ware; +\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid935470\charrsid12868782 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid935470\charrsid12868782 \hich\af42\dbch\af13\loch\f42 use the software in any way \hich\af42\dbch\af13\loch\f42 that is against the law;}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid10843085 +\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid10843085 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af42\dbch\af13\loch\f42 transfer the software or this agreement to any third party;}{ +\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid16415067\charrsid12868782 \hich\af42\dbch\af13\loch\f42 or}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid935470\charrsid12868782 +\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid935470\charrsid12868782 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af42\dbch\af13\loch\f42 share, }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 publish}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid13062212 \hich\af42\dbch\af13\loch\f42 , rent}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid935470\charrsid12868782 \hich\af42\dbch\af13\loch\f42 or }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid13062212 \hich\af42\dbch\af13\loch\f42 lease}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid935470\charrsid12868782 \hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 the software}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid935470\charrsid12868782 \hich\af42\dbch\af13\loch\f42 , or provide}{\rtlch\fcs1 \af42\afs20 +\ltrch\fcs0 \fs20\dbch\af13\insrsid5791644\charrsid12868782 \hich\af42\dbch\af13\loch\f42 the software as a stand-alone }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid935470\charrsid12868782 \hich\af42\dbch\af13\loch\f42 hosted +\hich\af42\dbch\af13\loch\f42 solution}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 for others to }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid935470\charrsid12868782 +\hich\af42\dbch\af13\loch\f42 use}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid10843085 .}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\loch\af42\hich\af42\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 7.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls12\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 EXPORT RESTRICTIONS.}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 }{ +\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid5180381\charrsid12868782 \hich\af42\dbch\af13\loch\f42 You must comply with all }{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14942451 \hich\af42\dbch\af13\loch\f42 +domestic and}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid5180381\charrsid12868782 \hich\af42\dbch\af13\loch\f42 international }{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14942451 +\hich\af42\dbch\af13\loch\f42 export laws }{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid5180381\charrsid12868782 \hich\af42\dbch\af13\loch\f42 and }{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14942451 +\hich\af42\dbch\af13\loch\f42 regulations that apply to the software, which include restrictions on destinations, end users, and end use.}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14971392\charrsid12868782 +\hich\af42\dbch\af13\loch\f42 For }{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14942451 \hich\af42\dbch\af13\loch\f42 further}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14971392\charrsid12868782 +\hich\af42\dbch\af13\loch\f42 information}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14942451 \hich\af42\dbch\af13\loch\f42 on export restrictions}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 , }{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14942451 \hich\af42\dbch\af13\loch\f42 visit}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid8002983 \hich\af42\dbch\af11\loch\f42 HYPERLINK "http://www.microsoft.com/exporting" }{\rtlch\fcs1 +\af42 \ltrch\fcs0 \insrsid4075613 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5e00000068007400740070003a002f002f007700770077002e006d006900630072006f0073006f00660074002e0063006f006d002f006500780070006f007200740069006e0067000000795881f43b1d7f48af2c825d +c485276300000000a5ab00031561000011002e000000}}}{\fldrslt {\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \cs73\b0\fs20\ul\cf2\dbch\af13\insrsid5180381\charrsid12868782 \hich\af42\dbch\af13\loch\f42 www.microsoft.com/exporting}}}\sectd \ltrsect +\psz1\linex0\headery0\footery0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14971392\charrsid12868782 .}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid5180381\charrsid12868782 \hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \cs73\b0\fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\loch\af42\hich\af42\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 8.\tab}}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 SUPPORT SERVICES. }{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 \hich\f42 +Because this software is \'93\loch\f42 \hich\f42 as is,\'94\loch\f42 we may not provide support services for it.}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\loch\af42\hich\af42\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 9.\tab}}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 ENTIRE AGREEMENT.}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 + This agreement, and the terms for suppl\hich\af42\dbch\af13\loch\f42 ements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.}{\rtlch\fcs1 \ab0\af42\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\loch\af42\hich\af42\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 10.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls12\outlinelevel0\adjustright\rin0\lin360\itap0 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 APPLICABLE LAW.}{\rtlch\fcs1 +\af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid11798191\charrsid12868782 \hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid11798191\charrsid12868782 \hich\af42\dbch\af11\loch\f42 +If you acquired the software in the United States, Washington law applies to interpretation of a\hich\af42\dbch\af11\loch\f42 +nd claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply.}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\f42\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 11.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\widctlpar +\jclisttab\tx540\wrapdefault\aspalpha\aspnum\faauto\ls12\outlinelevel0\adjustright\rin0\lin360\itap0\pararsid14942451 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 +CONSUMER RIGHTS; REGIONAL VARIATIONS. }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 +This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from +\hich\af42\dbch\af11\loch\f42 \hich\af42\dbch\af11\loch\f42 +which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, the +\hich\af42\dbch\af11\loch\f42 n\hich\af42\dbch\af11\loch\f42 the following provisions apply to you: +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af0\afs20 \ltrch\fcs0 \b\f42\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-360\li717\ri0\sb120\sa120\widctlpar +\jclisttab\tx813\wrapdefault\aspalpha\aspnum\faauto\ls15\outlinelevel1\adjustright\rin0\lin717\itap0\pararsid14942451 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 +{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 Australia. }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 +You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af0\afs20 \ltrch\fcs0 \b\f42\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 b.\tab}}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid14942451\charrsid14942451 +\hich\af42\dbch\af11\loch\f42 Canada. }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 If you acquired this software in Canada, you may stop receivi\hich\af42\dbch\af11\loch\f42 +ng updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The prod +\hich\af42\dbch\af11\loch\f42 u\hich\af42\dbch\af11\loch\f42 ct documentation, if any, may also specify how to turn off updates for your specific device or software. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af0\afs20 \ltrch\fcs0 \b\f42\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 c.\tab}}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid14942451\charrsid14942451 +\hich\af42\dbch\af11\loch\f42 Germany and Austria}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid14942451\charrsid14942451 . +\par }\pard\plain \ltrpar\ql \li717\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin717\itap0\pararsid14942451 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 (i)}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\insrsid14942451\charrsid14942451 \tab }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 Warranty}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid14942451\charrsid14942451 +\hich\af42\dbch\af11\loch\f42 . The properly licensed software will perform substantially as described in any Microsoft materials that accompany \hich\af42\dbch\af11\loch\f42 +the software. However, Microsoft gives no contractual guarantee in relation to the licensed software. +\par }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 (ii)}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid14942451\charrsid14942451 \tab }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\b\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 Limitation of Liability}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 +. In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as, in case of death or\hich\af42\dbch\af11\loch\f42 personal or physical injury, Microsoft is liable according to the statutory law. +\par }\pard\plain \ltrpar\s1\ql \li717\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin717\itap0\pararsid14942451 \rtlch\fcs1 \ab\af42\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \b0\fs20\insrsid14942451\charrsid14942451 \hich\af42\dbch\af11\loch\f42 +Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment \hich\af42\dbch\af11\loch\f42 +of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligen +\hich\af42\dbch\af11\loch\f42 c\hich\af42\dbch\af11\loch\f42 e, Microsoft will not be liable for slight negligence. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\loch\af42\hich\af42\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 12.\tab}}\pard \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls12\outlinelevel0\adjustright\rin0\lin357\itap0 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 \hich\f42 +DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED \'93\loch\f42 \hich\f42 AS-IS.\'94\loch\f42 YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LA +\hich\af42\dbch\af13\loch\f42 WS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\loch\af42\hich\af42\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 13.\tab}}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 LIMITATION ON AND EXCLUSION OF DAMAGES}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\insrsid14971392\charrsid12868782 \hich\af42\dbch\af11\loch\f42 +. YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU \hich\af42\dbch\af11\loch\f42 CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.}{\rtlch\fcs1 +\af42\afs20 \ltrch\fcs0 \fs20\insrsid15818407\charrsid12868782 +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid7435018 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 This limitation applies to}{\rtlch\fcs1 \af42\afs20 +\ltrch\fcs0 \fs20\dbch\af13\insrsid13202321\charrsid12868782 \hich\af42\dbch\af13\loch\f42 (a) }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 +anything related to the software, services, content (including code) on third party Internet sites, or third pa\hich\af42\dbch\af13\loch\f42 rty }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid13202321\charrsid12868782 +\hich\af42\dbch\af13\loch\f42 applications}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 ; and}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid13202321\charrsid12868782 +\hich\af42\dbch\af13\loch\f42 (b)}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid7435018\charrsid12868782 \hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 +\hich\af42\dbch\af13\loch\f42 claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid15818407\charrsid12868782 +\par }\pard\plain \ltrpar\ql \li360\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0 \rtlch\fcs1 \af42\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af42\hich\af42\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14971392\charrsid12868782 \hich\af42\dbch\af13\loch\f42 +It also applies even if Microsoft knew or should have known about th\hich\af42\dbch\af13\loch\f42 +e possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid15818407 +\par }\pard \ltrpar\ql \li0\ri0\sb40\sa40\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid10843085 {\rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid10843085 \hich\af42\dbch\af13\loch\f42 +Please note: As this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. +\par \hich\af42\dbch\af13\loch\f42 \hich\f42 Remarque : Ce logiciel \'e9\loch\f42 \hich\f42 tant distribu\'e9\loch\f42 \hich\f42 au Qu\'e9\loch\f42 bec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en \hich\af42\dbch\af13\loch\f42 +\hich\f42 fran\'e7\loch\f42 ais. +\par \hich\af42\dbch\af13\loch\f42 \hich\f42 EXON\'c9\loch\f42 RATION DE GARANTIE.}{\rtlch\fcs1 \af46\afs20 \ltrch\fcs0 \f46\fs20\cf1\lang1036\langfe1033\langnp1036\insrsid10843085 \~}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid10843085 +\hich\af42\dbch\af13\loch\f42 \hich\f42 Le logiciel vis\'e9\loch\f42 \hich\f42 par une licence est offert \'ab\loch\f42 \hich\f42 tel quel \'bb\loch\f42 \hich\f42 . Toute utilisation de ce logiciel est \'e0\loch\f42 \hich\f42 votre seule risque et p +\'e9\loch\f42 ril. Microsoft n\hich\f42 \rquote \loch\f42 \hich\f42 accorde aucune autre garantie expresse. Vous pouvez b\'e9\loch\f42 \hich\f42 n\'e9\loch\f42 ficier de droits additionne\hich\af42\dbch\af13\loch\f42 \hich\f42 +ls en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\'e9\loch\f42 marchande, d\hich\f42 \rquote \loch\f42 \hich\f42 ad\'e9 +\loch\f42 \hich\f42 quation \'e0\loch\f42 un usage particulier et d\hich\f42 \rquote \loch\f42 \hich\f42 absence de contrefa\'e7\loch\f42 on \hich\af42\dbch\af13\loch\f42 s\hich\af42\dbch\af13\loch\f42 ont exclues. +\par }{\rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid10843085 \hich\af42\dbch\af13\loch\f42 \hich\f42 LIMITATION DES DOMMAGES-INT\'c9\loch\f42 \hich\f42 R\'ca\loch\f42 \hich\f42 TS ET EXCLUSION DE RESPONSABILIT\'c9\loch\f42 + POUR LES DOMMAGES.}{\rtlch\fcs1 \af46\afs20 \ltrch\fcs0 \f46\fs20\cf1\lang1036\langfe1033\langnp1036\insrsid10843085 \~}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid10843085 \hich\af42\dbch\af13\loch\f42 Vous pouvez}{\rtlch\fcs1 +\af46\afs20 \ltrch\fcs0 \f46\fs20\cf1\lang1036\langfe1033\langnp1036\insrsid10843085 \hich\af46\dbch\af11\loch\f46 }{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid10843085 \hich\af42\dbch\af13\loch\f42 \hich\f42 +obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \'e0\loch\f42 \hich\f42 hauteur de 5,00 $ US. Vous ne pouvez pr\'e9\hich\af42\dbch\af13\loch\f42 \hich\f42 tendre \'e0\loch\f42 \hich\f42 + aucune indemnisation pour les autres dommages, y compris les dommages sp\'e9\loch\f42 \hich\f42 ciaux, indirects ou accessoires et pertes de b\'e9\loch\f42 \hich\f42 n\'e9\loch\f42 fices. +\par \hich\af42\dbch\af13\loch\f42 Cette limitation concerne: +\par }\pard \ltrpar\ql \fi-363\li363\ri0\sb40\sa40\widctlpar\wrapdefault\faauto\adjustright\rin0\lin363\itap0\pararsid10843085 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid10843085 \loch\af42\dbch\af13\hich\f42 \'b7\~\~\~\~\tab \loch\f42 +\hich\f42 tout ce qui est reli\'e9\loch\f42 au logiciel, aux services ou au contenu (y compris le code) fig\hich\af42\dbch\af13\loch\f42 urant sur des sites Internet tiers ou dans des programmes tiers ; et +\par \loch\af42\dbch\af13\hich\f42 \'b7\~\~\~\~\~\loch\f42 \hich\f42 les r\'e9\loch\f42 \hich\f42 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\'e9\loch\f42 \hich\f42 stricte, de n\'e9\loch\f42 gligence ou d +\hich\f42 \rquote \loch\f42 \hich\f42 une autre faute dans la limite autoris\'e9\loch\f42 e par la loi en vi\hich\af42\dbch\af13\loch\f42 gueur. +\par }\pard \ltrpar\ql \li0\ri0\sb40\sa40\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid10843085 {\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid10843085 \hich\af42\dbch\af13\loch\f42 Elle s\hich\f42 \rquote \loch\f42 \hich\f42 +applique \'e9\loch\f42 \hich\f42 galement, m\'ea\loch\f42 \hich\f42 me si Microsoft connaissait ou devrait conna\'ee\loch\f42 tre l\hich\f42 \rquote \'e9\loch\f42 \hich\f42 ventualit\'e9\loch\f42 d\hich\f42 \rquote \loch\f42 +un tel dommage. Si votre pays n\hich\f42 \rquote \loch\f42 autorise pas l\hich\f42 \rquote \loch\f42 \hich\f42 exclusion ou la limitation de responsabilit\'e9\loch\f42 pour les dommages indirects, accessoires ou de quelque nature q +\hich\af42\dbch\af13\loch\f42 ue ce soit, il se peut que la limitation ou l\hich\f42 \rquote \loch\f42 exclusion ci-dessus ne s\hich\f42 \rquote \loch\f42 \hich\f42 appliquera pas \'e0\loch\f42 \hich\f42 votre \'e9\loch\f42 gard. +\par }\pard \ltrpar\ql \li360\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid10843085 {\rtlch\fcs1 \ab\af42\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid10843085 \hich\af42\dbch\af13\loch\f42 EFFET JURIDIQUE. +}{\rtlch\fcs1 \af46\afs20 \ltrch\fcs0 \f46\fs20\cf1\lang1036\langfe1033\langnp1036\insrsid10843085 \~}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid10843085 \hich\af42\dbch\af13\loch\f42 \hich\f42 Le pr\'e9\loch\f42 \hich\f42 sent contrat d +\'e9\loch\f42 crit certains droits juridiques. Vous pourriez avoir d\hich\f42 \rquote \loch\f42 \hich\f42 autres droits pr\'e9\loch\f42 \hich\f42 vus par les lois de votre pays. Le pr\'e9\loch\f42 sent co\hich\af42\dbch\af13\loch\f42 \hich\f42 +ntrat ne modifie pas les droits que vous conf\'e8\loch\f42 rent les lois de votre pays si celles-ci ne le permettent pas.}{\rtlch\fcs1 \af42\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid10843085\charrsid12868782 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb +44f95d843b5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a +6409fb44d08741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c +3d9058edf2c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db0256 +5e85f3b9660d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276 +b9f7dec44b7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8 +c33585b5fb9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e +51440ca2e0088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95 +b21be5ceaf8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff +6dce591a26ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec6 +9ffb9e65d028d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239 +b75a5bb1e6345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a449 +59d366ad93b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e8 +2db8df9f30254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468 +656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4 +350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d2624 +52282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe5141 +73d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c020000130000000000000000 +0000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000 +000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c0000000000000000000000000019 +0200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b00001600000000 +000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027 +00000000000000000000000000a00900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d0100009b0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax375\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1;\lsdqformat1 \lsdlocked0 heading 2; +\lsdqformat1 \lsdlocked0 heading 3;\lsdqformat1 \lsdlocked0 heading 4;\lsdqformat1 \lsdlocked0 heading 5;\lsdqformat1 \lsdlocked0 heading 6;\lsdqformat1 \lsdlocked0 heading 7;\lsdqformat1 \lsdlocked0 heading 8;\lsdqformat1 \lsdlocked0 heading 9; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong; +\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority59 \lsdlocked0 Table Grid; +\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid; +\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2; +\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1; +\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1; +\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; +\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2; +\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3; +\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; +\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; +\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; +\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; +\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; +\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; +\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; +\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; +\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Mention; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Smart Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hashtag;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Unresolved Mention;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e30000000000000000000000e0000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000001000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdffffff04000000feffffff05000000fefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff010000000c6ad98892f1d411a65f0040963251e5000000000000000000000000b043 +84501854d30103000000c0020000000000004d0073006f004400610074006100530074006f0072006500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000101ffffffffffffffff020000000000000000000000000000000000000000000000b04384501854d301 +b04384501854d30100000000000000000000000050004e00c500dd00d900de0047003000c1004500de0041004f0051003000dc00c4005200dd004500560041003d003d000000000000000000000000000000000032000101ffffffffffffffff030000000000000000000000000000000000000000000000b04384501854 +d301b04384501854d3010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff04000000ffffffff000000000000000000000000000000000000000000000000 +000000000000000000000000000000000e0100000000000001000000020000000300000004000000feffffff060000000700000008000000090000000a000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e3c623a536f75726365732053656c65637465645374796c653d225c4150412e58534c22205374796c +654e616d653d224150412220786d6c6e733a623d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f6772617068792220786d6c6e733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e +6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879223e3c2f623a536f75726365733e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f6469 +6e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b45373744443933432d394145312d344638342d383033392d3036424339313146343435347d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70 +656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573500072006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000 +0000000000000000000000000000000000000000000000000000000000000500000055010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000746f6d586d6c223e3c64733a736368656d61526566733e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f7267 +2f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879222f3e3c2f64733a736368656d61526566733e3c2f64733a6461746173746f72654974656d3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/Wizard/Caller.cs b/Wizard/Caller.cs new file mode 100644 index 0000000..4e6b392 --- /dev/null +++ b/Wizard/Caller.cs @@ -0,0 +1,96 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2020 Denis Kuzmin < x-3F@outlook.com > GitHub/3F + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. +*/ + +using System; +using System.Diagnostics; + +namespace net.r_eg.DllExport.Wizard +{ + internal class Caller + { + internal const int WAIT_INF = -1; + internal const int WAIT_NOT = 0; + + protected string workingDir; + + public int Shell(string cmd, int wait = WAIT_NOT, Action after = null, DataReceivedEventHandler stdout = null, DataReceivedEventHandler stderr = null) + { + return Run("cmd", $"/C \"{cmd}\"", wait, after, stdout, stderr); + } + + public int Run(string file, string args = "", int wait = WAIT_NOT, Action after = null, DataReceivedEventHandler stdout = null, DataReceivedEventHandler stderr = null) + { + Process p = Prepare(file, args, stdout != null || stderr != null); + + if(stdout != null) { + p.OutputDataReceived += stdout; + } + + if(stderr != null) { + p.ErrorDataReceived += stderr; + } + + p.Start(); + + if(p.StartInfo.RedirectStandardOutput) { + p.BeginOutputReadLine(); + } + + if(p.StartInfo.RedirectStandardError) { + p.BeginErrorReadLine(); + } + + p.WaitForExit(wait); + after?.Invoke(p); + + return p.HasExited ? p.ExitCode : -1; + } + + public Caller(string slnDir) + { + workingDir = slnDir ?? throw new ArgumentNullException(nameof(slnDir)); + } + + protected Process Prepare(string file, string args, bool hidden) + { + var p = new Process(); + + p.StartInfo.FileName = file; + p.StartInfo.Arguments = args; + p.StartInfo.WorkingDirectory = workingDir; + + if(!hidden) { + p.StartInfo.UseShellExecute = true; + return p; + } + + p.StartInfo.UseShellExecute = false; + p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; + p.StartInfo.CreateNoWindow = true; + p.StartInfo.RedirectStandardOutput = true; + p.StartInfo.RedirectStandardError = true; + return p; + } + } +} \ No newline at end of file diff --git a/Wizard/CfgBatWrapper.cs b/Wizard/CfgBatWrapper.cs deleted file mode 100644 index 4ea4537..0000000 --- a/Wizard/CfgBatWrapper.cs +++ /dev/null @@ -1,73 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2016-2019 Denis Kuzmin < entry.reg@gmail.com > GitHub/3F - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -*/ - -using System; -using System.IO; -using net.r_eg.DllExport.Wizard.Extensions; -using net.r_eg.MvsSln.Log; - -namespace net.r_eg.DllExport.Wizard -{ - //TODO: - internal sealed class CfgBatWrapper - { - private IWizardConfig config; - private ISender log; - - public CfgBatWrapper(IWizardConfig config, ISender log) - { - this.config = config ?? throw new ArgumentNullException(nameof(config)); - this.log = log ?? throw new ArgumentNullException(nameof(log)); - } - - public bool TryPrepare() - { - try { - CopyFromPkg(UserConfig.MGR_FILE); - return true; - } - catch(Exception ex) { - log.send(this, $"Installer: Copy failed `{ex.Message}`", Message.Level.Warn); - } - return false; - } - - private string CopyFromPkg(string fname) - { - var dxp = Path.Combine(config.PkgPath, fname); - var dest = Path.Combine(config.SlnDir, fname); - - if(!File.Exists(dest)) { - File.Copy(dxp, dest, false); - return dest; - } - - if(dest.SHA1HashFromFile() != dxp.SHA1HashFromFile()) { - dest = dest.AddFileNamePostfix($"_{Project.METALIB_PK_TOKEN}"); - } - File.Copy(dxp, dest, true); - return dest; - } - } -} diff --git a/Wizard/CompilerCfg.cs b/Wizard/CompilerCfg.cs index cf785c8..161777b 100644 --- a/Wizard/CompilerCfg.cs +++ b/Wizard/CompilerCfg.cs @@ -51,6 +51,12 @@ public struct CompilerCfg /// public string customILAsm; + /// + /// Rebase System Object: `netstandard` } `System.Runtime` } `mscorlib` + /// https://github.com/3F/DllExport/issues/125#issuecomment-561245575 + /// + public bool rSysObj; + /// /// Flag to keep intermediate Files (IL Code, Resources, ...). /// @@ -65,5 +71,10 @@ public struct CompilerCfg /// Type of checking PE32/PE32+ module. /// public PeCheckType peCheck; + + /// + /// Optional patches. + /// + public PatchesType patches; } } diff --git a/Wizard/DllExportCfgTask.cs b/Wizard/DllExportCfgTask.cs index 3182469..672ddab 100644 --- a/Wizard/DllExportCfgTask.cs +++ b/Wizard/DllExportCfgTask.cs @@ -24,6 +24,7 @@ using System; using System.Globalization; +using System.Reflection; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using net.r_eg.DllExport.Wizard.Extensions; @@ -40,7 +41,7 @@ public class DllExportCfgTask: Task, ITask, IWizardConfig, IDisposable /// /// Optional root path of user paths. - /// Affects on wSlnFile, wSlnDir, wPkgPath. + /// Affects on SlnFile, SlnDir, PkgPath. /// public string RootPath { @@ -125,6 +126,25 @@ public string MgrArgs } public string _mgrArgs; + /// + /// Version of the package that invokes target. + /// + public string PkgVer + { + get => _pkgVer; + set => _pkgVer = value.Trim(); + } + private string _pkgVer; + + /// + /// Proxy configuration if presented in `-proxy` key. + /// + public string Proxy + { + get; + set; + } + /// /// Path to external storage if used. /// @@ -293,12 +313,15 @@ protected virtual void ConWrite(string message, Message.Level level) private void PrintKeys(Message.Level level) { + LSender.Send(this, $"Instance: '{Assembly.GetEntryAssembly().Location}'", level); LSender.Send(this, $"SlnDir: '{SlnDir}'", level); LSender.Send(this, $"SlnFile: '{SlnFile}'", level); LSender.Send(this, $"PkgPath: '{PkgPath}'", level); LSender.Send(this, $"MetaLib: '{MetaLib}'", level); LSender.Send(this, $"MetaCor: '{MetaCor}'", level); LSender.Send(this, $"MgrArgs: '{MgrArgs}'", level); + LSender.Send(this, $"PkgVer: '{PkgVer}'", level); + LSender.Send(this, $"Proxy: '{Proxy}'", level); LSender.Send(this, $"DxpTarget: '{DxpTarget}'", level); LSender.Send(this, $"RootPath: '{RootPath}'", level); LSender.Send(this, $"Storage: '{CfgStorage}'", level); @@ -328,8 +351,6 @@ private void OnMsg(object sender, Message e) } #region IDisposable - - // To detect redundant calls private bool disposed = false; // To correctly implement the disposable pattern. @@ -338,7 +359,7 @@ public void Dispose() Dispose(true); } - protected virtual void Dispose(bool disposing) + protected virtual void Dispose(bool _) { if(disposed) { return; diff --git a/Wizard/DxpIsolatedEnv.cs b/Wizard/DxpIsolatedEnv.cs index 42e1a55..2b735c3 100644 --- a/Wizard/DxpIsolatedEnv.cs +++ b/Wizard/DxpIsolatedEnv.cs @@ -30,10 +30,15 @@ namespace net.r_eg.DllExport.Wizard { /// - /// https://github.com/3F/DllExport/issues/56 + /// Isolates problems like this: https://github.com/3F/DllExport/issues/56 /// TODO: MvsSln core + /// + /// About possible incorrect Sdk-based project types: + /// https://github.com/3F/DllExport/pull/123 + /// Planned to drop msbuild support in v3: + /// https://github.com/3F/MvsSln/issues/23 /// - public class DxpIsolatedEnv: IsolatedEnv, IEnvironment, IDisposable + public class DxpIsolatedEnv: IsolatedEnv, IEnvironment { public const string ERR_MSG = "DXPInternalErrorMsg"; @@ -58,10 +63,5 @@ protected override Microsoft.Build.Evaluation.Project Load(string path, IDiction return prj; } } - - protected override void Dispose(bool disposing) - { - base.Dispose(disposing); - } } } diff --git a/Wizard/Executor.cs b/Wizard/Executor.cs index 21b6961..d349e5f 100644 --- a/Wizard/Executor.cs +++ b/Wizard/Executor.cs @@ -165,8 +165,7 @@ public void Configure() break; } case ActionType.Info: { - (new CfgBatWrapper(Config, Log)).TryPrepare(); - UI.App.RunSTA(new UI.InfoForm(this)); + "https://github.com/3F/DllExport/wiki/Quick-start".OpenUrl(); break; } case ActionType.Default: { diff --git a/Wizard/Extensions/CollectionExtension.cs b/Wizard/Extensions/CollectionExtension.cs index 0eba546..f289e48 100644 --- a/Wizard/Extensions/CollectionExtension.cs +++ b/Wizard/Extensions/CollectionExtension.cs @@ -36,13 +36,25 @@ public static class CollectionExtension /// /// The action that should be executed for each item. public static void ForEach(this IEnumerable items, Action act) + { + items?.ForEach((x, i) => act(x)); + } + + /// + /// Foreach in Linq manner. + /// + /// + /// + /// The action that should be executed for each item. + public static void ForEach(this IEnumerable items, Action act) { if(items == null) { return; } + long n = 0; foreach(var item in items) { - act(item); + act(item, n++); } } diff --git a/Wizard/Extensions/StringExtension.cs b/Wizard/Extensions/StringExtension.cs index d36981a..43d414e 100644 --- a/Wizard/Extensions/StringExtension.cs +++ b/Wizard/Extensions/StringExtension.cs @@ -74,6 +74,20 @@ public static int ToInteger(this string value) return Int32.Parse(value); } + /// + /// To get long integer value from string. + /// + /// Any compatible value. + /// + public static long ToLongInteger(this string value) + { + if(String.IsNullOrWhiteSpace(value)) { + return 0; + } + + return Int64.Parse(value); + } + /// /// Open url through default application. /// diff --git a/Wizard/IWizardConfig.cs b/Wizard/IWizardConfig.cs index 4ca9751..7bef21e 100644 --- a/Wizard/IWizardConfig.cs +++ b/Wizard/IWizardConfig.cs @@ -26,6 +26,12 @@ namespace net.r_eg.DllExport.Wizard { public interface IWizardConfig { + /// + /// Optional root path of user paths. + /// Affects on SlnFile, SlnDir, PkgPath. + /// + string RootPath { get; } + /// /// Path to directory with .sln files to be processed. /// @@ -61,6 +67,16 @@ public interface IWizardConfig /// string MgrArgs { get; } + /// + /// Version of the package that invokes target. + /// + string PkgVer { get; } + + /// + /// Proxy configuration if presented in `-proxy` key. + /// + string Proxy { get; } + /// /// Path to external storage if used. /// @@ -75,5 +91,14 @@ public interface IWizardConfig /// The evaluated type of operation. /// ActionType Type { get; } + + /// + /// To show messages via GUI dlg for selected level (any positive number) and above. + /// Levels: 0 - 5 (see Message.Level) + /// '4' = means 4 (Error) + 5 (Fatal) levels. + /// Any negative number disables this. + /// It affects only for messages to GUI. + /// + int MsgGuiLevel { get; } } } diff --git a/Wizard/MSBuildProperties.cs b/Wizard/MSBuildProperties.cs index 0cc8d2a..b107a57 100644 --- a/Wizard/MSBuildProperties.cs +++ b/Wizard/MSBuildProperties.cs @@ -68,6 +68,11 @@ public struct MSBuildProperties /// public const string DXP_CUSTOM_ILASM = "DllExportILAsmCustomPath"; + /// + /// https://github.com/3F/DllExport/issues/125 + /// + public const string DXP_SYSOBJ_REBASE = "DllExportSysObjRebase"; + /// /// Flag to keep intermediate Files (IL Code, Resources, ...). /// @@ -83,6 +88,11 @@ public struct MSBuildProperties /// public const string DXP_PE_CHECK = "DllExportPeCheck"; + /// + /// Optional patches. + /// + public const string DXP_PATCHES = "DllExportPatches"; + /// /// Platform Target for binaries. /// diff --git a/Wizard/PackageInfo.cs b/Wizard/PackageInfo.cs new file mode 100644 index 0000000..d12ae7b --- /dev/null +++ b/Wizard/PackageInfo.cs @@ -0,0 +1,149 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2020 Denis Kuzmin < x-3F@outlook.com > GitHub/3F + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using net.r_eg.MvsSln.Log; + +namespace net.r_eg.DllExport.Wizard +{ + internal class PackageInfo + { + protected readonly IExecutor exec; + private readonly string proxy; + + public string Activated => exec.Config.PkgVer; + + public Task> GetFromGitHubAsync() + => GetFromRemoteAsync("https://3F.github.io/DllExport/data/pkgrel"); + + public Task> GetFromRemoteAsync(string url) + => RcvStringOrActivatedAsync(url) + .ContinueWith(r => Detect301(r.Result)) + .ContinueWith(r => Regex.Matches(r.Result, @"^\s*([^#\r\n].+)$", RegexOptions.Multiline) + .Cast() + .Select(x => x.Groups[1].Value)); + + public PackageInfo(IExecutor exec) + { + this.exec = exec ?? throw new ArgumentNullException(nameof(exec)); + proxy = exec.Config.Proxy?.Trim(); + } + + /// + /// Emulates an emergency 301 through special command due to unsupported servers like GitHub pages. + /// Format: `@301=url` EOF + /// + /// + /// + protected string Detect301(string input) + { + const string R301 = "@301="; + + if(input?.StartsWith(R301) == false) { + return input; + } + var url = input.Substring(R301.Length); + + LSender.Send(this, $"{R301}{url}", Message.Level.Debug); + return RcvStringOrActivatedAsync(url).Result; + } + + protected Task RcvStringOrActivatedAsync(string target) + => RcvStringAsync(target, (ex) => Activated); + + // while we're still using .netfx 4.0 + protected Task RcvStringAsync(string target, Func failed) + { + var tcs = new TaskCompletionSource(); + var url = new Uri(target); + + using(var wc = new WebClient()) + { + if(!string.IsNullOrEmpty(proxy)) { + wc.Proxy = GetProxy(proxy); + } + + wc.UseDefaultCredentials = true; + + if(wc.Proxy.Credentials == null) { + wc.Proxy.Credentials = CredentialCache.DefaultCredentials; + } + + long bytesReceived = 0; + wc.DownloadStringCompleted += (sender, e) => + { + if(e.Error != null) + { + //tcs.TrySetException(e.Error); + LSender.Send(this, $"Rcv failed: {e.Error.Message}", Message.Level.Debug); + tcs.TrySetResult(failed(e.Error)); + } + else if(e.Cancelled) + { + tcs.TrySetCanceled(); + } + else + { + tcs.TrySetResult(e.Result); + LSender.Send(this, $"Rcv Done: {bytesReceived} bytes.", Message.Level.Debug); + } + }; + + wc.DownloadProgressChanged += (sender, e) => bytesReceived = e.BytesReceived; + + LSender.Send(this, $"Get data: {url}", Message.Level.Debug); + wc.DownloadStringAsync(url); + return tcs.Task; + } + } + + private WebProxy GetProxy(string cfg) + { + LSender.Send(this, $"Configure proxy: {cfg}", Message.Level.Debug); + + var auth = cfg.Split('@'); + if(auth.Length <= 1) + { + LSender.Send(this, $"Use proxy: `{auth[0]}`", Message.Level.Debug); + return new WebProxy(auth[0], false); + } + + var login = auth[0].Split(':'); + LSender.Send(this, $"Use proxy: `{auth[1]}` /login: {login[0]}", Message.Level.Debug); + + return new WebProxy(auth[1], false) + { + Credentials = new NetworkCredential( + login[0], + (login.Length > 1) ? login[1] : null + ) + }; + } + } +} \ No newline at end of file diff --git a/Wizard/Project.cs b/Wizard/Project.cs index 4776fe4..3bb2b83 100644 --- a/Wizard/Project.cs +++ b/Wizard/Project.cs @@ -38,6 +38,8 @@ namespace net.r_eg.DllExport.Wizard { public class Project: IProject { + public const string DXP_INVALID = "EEE00000-0000-0000-0000-000000000000"; + /// /// PublicKeyToken of the meta library. /// @@ -59,6 +61,8 @@ public class Project: IProject /// protected const string DXP_TARGET_R_DYN = "DllExportRPkgDynamicImport"; + private const string WZ_ID = "Wz"; + /// /// Access to found project. /// @@ -278,11 +282,13 @@ public Project(IXProject xproject, IConfigInitializer init) MSBuildProperties.DXP_SKIP_ANYCPU, MSBuildProperties.DXP_DDNS_CECIL, MSBuildProperties.DXP_GEN_EXP_LIB, + MSBuildProperties.DXP_SYSOBJ_REBASE, MSBuildProperties.DXP_OUR_ILASM, MSBuildProperties.DXP_CUSTOM_ILASM, MSBuildProperties.DXP_INTERMEDIATE_FILES, MSBuildProperties.DXP_TIMEOUT, MSBuildProperties.DXP_PE_CHECK, + MSBuildProperties.DXP_PATCHES, MSBuildProperties.DXP_PLATFORM ); @@ -361,7 +367,8 @@ protected IUserConfig GetUserConfig(IXProject project, IConfigInitializer cfg) Compiler = new CompilerCfg() { ordinalsBase = 1, timeout = CompilerCfg.TIMEOUT_EXEC, - peCheck = PeCheckType.PeIl + peCheck = PeCheckType.PeIl, + patches = PatchesType.None, }, }; } @@ -450,21 +457,29 @@ protected void CfgCompiler() SetProperty(MSBuildProperties.DXP_OUR_ILASM, Config.Compiler.ourILAsm); Log.send(this, $"Use our IL Assembler: {Config.Compiler.ourILAsm}"); - if(Config.Compiler.customILAsm != null) { + if(Config.Compiler.customILAsm != null) + { SetProperty(MSBuildProperties.DXP_CUSTOM_ILASM, Config.Compiler.customILAsm); Log.send(this, $"Set path to custom ILAsm: {Config.Compiler.customILAsm}"); } + SetProperty(MSBuildProperties.DXP_SYSOBJ_REBASE, Config.Compiler.rSysObj); + Log.send(this, $"Rebase System Object: {Config.Compiler.rSysObj}"); + SetProperty(MSBuildProperties.DXP_INTERMEDIATE_FILES, Config.Compiler.intermediateFiles); Log.send(this, $"Flag to keep intermediate Files (IL Code, Resources, ...): {Config.Compiler.intermediateFiles}"); - if(Config.Compiler.timeout >= 0) { + if(Config.Compiler.timeout >= 0) + { SetProperty(MSBuildProperties.DXP_TIMEOUT, Config.Compiler.timeout); Log.send(this, $"Timeout of execution in milliseconds: {Config.Compiler.timeout}"); } SetProperty(MSBuildProperties.DXP_PE_CHECK, (int)Config.Compiler.peCheck); Log.send(this, $"Type of checking PE32/PE32+ module: {Config.Compiler.peCheck}"); + + SetProperty(MSBuildProperties.DXP_PATCHES, (long)Config.Compiler.patches); + Log.send(this, $"Applied Patches: {Config.Compiler.patches}"); } protected void CfgCommonData() @@ -523,6 +538,17 @@ protected void AddDllExportLib() false ); + if(!string.IsNullOrWhiteSpace(Config.Wizard.PkgVer) + && XProject.GetFirstPackageReference(UserConfig.PKG_ID).parentItem == null) + { + XProject.AddPackageReference + ( + UserConfig.PKG_ID, + Config.Wizard.PkgVer, + new Dictionary() {{ "Visible", "false" }, { WZ_ID, "1" }} // VS2010 etc + ); + } + AddRestoreDxp( DXP_TARGET_PKG_R, $"'$(DllExportModImported)' != 'true' Or !Exists('{dxpTarget}')", @@ -557,7 +583,7 @@ protected void AddRestoreDxp(string name, string condition, string manager) else { args = String.Empty; } - taskExec.SetParameter("Command", $"{manager} {args} -action Restore"); + taskExec.SetParameter("Command", $".\\{manager} {args} -action Restore"); taskExec.SetParameter("WorkingDirectory", "$(SolutionDir)"); } @@ -605,6 +631,14 @@ protected void RemoveDllExportLib() } } + Log.send(this, $"Trying to remove {WZ_ID} PackageReference records", Message.Level.Info); + foreach(var item in XProject.GetItems("PackageReference", UserConfig.PKG_ID).ToArray()) + { + if(item.meta?.ContainsKey(WZ_ID) == true && item.meta[WZ_ID].evaluated == "1") { + XProject.RemoveItem(item); + } + } + Log.send(this, $"Remove old Import elements:'{DXP_TARGET}'", Message.Level.Info); while(XProject.RemoveImport(XProject.GetImport(DXP_TARGET, null))) { } @@ -724,15 +758,11 @@ private void SetProperty(string name, string value) } } - private void SetProperty(string name, bool val) - { - SetProperty(name, val.ToString().ToLower()); - } + private void SetProperty(string name, bool val) => SetProperty(name, val.ToString().ToLower()); - private void SetProperty(string name, int val) - { - SetProperty(name, val.ToString()); - } + private void SetProperty(string name, int val) => SetProperty(name, val.ToString()); + + private void SetProperty(string name, long val) => SetProperty(name, val.ToString()); private string CopyLib(string src, string dest) { diff --git a/Wizard/UI/Components/DataGridViewExt.cs b/Wizard/UI/Components/DataGridViewExt.cs new file mode 100644 index 0000000..7d95561 --- /dev/null +++ b/Wizard/UI/Components/DataGridViewExt.cs @@ -0,0 +1,200 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2020 Denis Kuzmin < x-3F@outlook.com > GitHub/3F + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. +*/ + +/* + * Modified. Original from https://github.com/3F/vsSolutionBuildEvent + * Copyright (c) 2013-2016,2019 Denis Kuzmin < x-3F@outlook.com > GitHub/3F +*/ + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace net.r_eg.vsSBE.UI.WForms.Components +{ + internal class DataGridViewExt: DataGridView + { + /// + /// Support AlwaysSelected + /// + protected int lastSelectedRowIndex = 0; + + private readonly object _eLock = new object(); + + /// + /// Custom column: for work with numeric formats with standard TextBoxCell + /// + internal class NumericColumn: DataGridViewColumn + { + public bool Decimal { get; set; } + public bool Negative { get; set; } + + public NumericColumn() + : base(new DataGridViewTextBoxCell()) + { + + } + } + + /// + /// Shows total count of rows and current position for each row + /// + public bool NumberingForRowsHeader + { + get; + set; + } = false; + + /// + /// Always one row selected + /// + public bool AlwaysSelected + { + get; + set; + } = false; + + public DataGridViewExt() + { + CellPainting += onNumberingCellPainting; + SelectionChanged += onAlwaysSelected; + EditingControlShowing += (object sender, DataGridViewEditingControlShowingEventArgs e) => + { + if(e.Control == null) { + return; + } + + lock(_eLock) + { + e.Control.KeyPress -= onControlKeyPress; + e.Control.KeyPress += onControlKeyPress; + e.Control.PreviewKeyDown -= onControlPreviewKeyDown; + e.Control.PreviewKeyDown += onControlPreviewKeyDown; + } + }; + } + + protected void onControlKeyPress(object sender, KeyPressEventArgs e) + { + if(sender == null || sender.GetType() != typeof(DataGridViewTextBoxEditingControl)) { + return; + } + DataGridView dgv = ((DataGridViewTextBoxEditingControl)sender).EditingControlDataGridView; + + if(dgv.CurrentCell.OwningColumn.GetType() != typeof(NumericColumn)) { + return; + } + //(NumericColumn)dgv.CurrentCell.OwningColumn; + + if(!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)) { + e.Handled = true; + } + } + + protected virtual void numberingRowsHeader(DataGridViewCellPaintingEventArgs e) + { + if(e.ColumnIndex != -1) { + return; + } + + string str; + if(e.RowIndex >= 0) { + str = $" {(e.RowIndex + 1)}"; + } + else { + str = $"({Rows.Count})"; + } + + e.PaintBackground(e.CellBounds, true); + e.Graphics.DrawString(str, e.CellStyle.Font, new SolidBrush(Color.Black), e.CellBounds); + e.Handled = true; + } + + protected override bool ProcessDialogKey(Keys keyData) + { + if(keyData == Keys.Enter) + { + EndEdit(); + return true; + } + return base.ProcessDialogKey(keyData); + } + + private void onNumberingCellPainting(object sender, DataGridViewCellPaintingEventArgs e) + { + if(NumberingForRowsHeader) { + numberingRowsHeader(e); + } + } + + private void onAlwaysSelected(object sender, EventArgs e) + { + if(!AlwaysSelected || Rows.Count < 1) { + return; + } + + if(SelectedRows.Count < 1) + { + lastSelectedRowIndex = Math.Max(0, Math.Min(lastSelectedRowIndex, Rows.Count - 1)); + Rows[lastSelectedRowIndex].Selected = true; + return; + } + + lastSelectedRowIndex = SelectedRows[0].Index; + } + + /// + /// A trick with left/right keys in EditMode of text columns. + /// + /// + /// + private void onControlPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) + { + if(sender == null || sender.GetType() != typeof(DataGridViewTextBoxEditingControl)) { + return; + } + + var box = (DataGridViewTextBoxEditingControl)sender; + int pos = box.SelectionStart; + + if(box.Text.Length < 1) { + return; + } + + if(pos == 0 && e.KeyData == Keys.Left) + { + BeginEdit(false); + box.SelectionStart = Math.Min(1, box.Text.Length); // will decrease with std handler + return; + } + + if(pos == box.Text.Length && e.KeyData == Keys.Right) + { + BeginEdit(false); + box.SelectionStart = box.Text.Length - 1; // also will with std handler later + return; + } + } + } +} diff --git a/Wizard/UI/Components/TextBoxExt.cs b/Wizard/UI/Components/TextBoxExt.cs new file mode 100644 index 0000000..e2b3dbf --- /dev/null +++ b/Wizard/UI/Components/TextBoxExt.cs @@ -0,0 +1,62 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2020 Denis Kuzmin < x-3F@outlook.com > GitHub/3F + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. +*/ + +using System.Drawing; +using System.Windows.Forms; + +namespace net.r_eg.DllExport.Wizard.UI.Components +{ + internal class TextBoxExt: TextBox + { + private const int WM_PAINT = 0x000F; + + public string BackgroundCaption { get; set; } + + public int BackgroundCaptionAlpha { get; set; } = 60; + + protected void DrawString(string str, int alpha) + { + using(Graphics g = CreateGraphics()) + { + g.DrawString(str, Font, new SolidBrush(Color.FromArgb(alpha, ForeColor)), ClientRectangle, new StringFormat + { + Alignment = StringAlignment.Near + }); + } + } + + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + + if(m.Msg == WM_PAINT) + { + if(!string.IsNullOrEmpty(BackgroundCaption) && string.IsNullOrEmpty(Text)) + { + DrawString(BackgroundCaption, BackgroundCaptionAlpha); + } + } + } + } +} diff --git a/Wizard/UI/ConfiguratorForm.Designer.cs b/Wizard/UI/ConfiguratorForm.Designer.cs index fa0084b..ee1fffe 100644 --- a/Wizard/UI/ConfiguratorForm.Designer.cs +++ b/Wizard/UI/ConfiguratorForm.Designer.cs @@ -17,6 +17,7 @@ protected override void Dispose(bool disposing) components.Dispose(); } fdialog?.Dispose(); + icons?.Dispose(); base.Dispose(disposing); } @@ -29,75 +30,82 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); this.panelTop = new System.Windows.Forms.Panel(); this.progressLine = new net.r_eg.DllExport.Wizard.UI.Controls.ProgressLineControl(); - this.comboBoxStorage = new System.Windows.Forms.ComboBox(); - this.btnExt = new System.Windows.Forms.Button(); this.btnApply = new System.Windows.Forms.Button(); this.comboBoxSln = new System.Windows.Forms.ComboBox(); this.toolTipMain = new System.Windows.Forms.ToolTip(this.components); + this.btnUpdListOfPkg = new System.Windows.Forms.Button(); + this.btnToOnline = new System.Windows.Forms.Button(); + this.comboBoxStorage = new System.Windows.Forms.ComboBox(); + this.splitCon = new System.Windows.Forms.SplitContainer(); + this.panelPrjs = new System.Windows.Forms.Panel(); + this.dgvFilter = new net.r_eg.vsSBE.UI.WForms.Components.DataGridViewExt(); + this.gcInstalled = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.gcType = new System.Windows.Forms.DataGridViewImageColumn(); + this.gcPath = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panelFilter = new System.Windows.Forms.Panel(); + this.tabCtrl = new System.Windows.Forms.TabControl(); + this.tabCfgDxp = new System.Windows.Forms.TabPage(); this.projectItems = new net.r_eg.DllExport.Wizard.UI.Controls.ProjectItemsControl(); + this.tabData = new System.Windows.Forms.TabPage(); + this.labelStorage = new System.Windows.Forms.Label(); + this.txtCfgData = new System.Windows.Forms.TextBox(); + this.tabUpdating = new System.Windows.Forms.TabPage(); + this.txtLogUpd = new System.Windows.Forms.TextBox(); + this.panelUpdVerTop = new System.Windows.Forms.Panel(); + this.cbPackages = new System.Windows.Forms.ComboBox(); + this.btnUpdate = new System.Windows.Forms.Button(); + this.tabBuildInfo = new System.Windows.Forms.TabPage(); + this.labelSrcMit = new System.Windows.Forms.Label(); + this.linkIlasm = new System.Windows.Forms.LinkLabel(); + this.lnkSrc = new System.Windows.Forms.LinkLabel(); + this.lnk3F = new System.Windows.Forms.LinkLabel(); + this.labelSrc = new System.Windows.Forms.Label(); + this.txtBuildInfo = new System.Windows.Forms.TextBox(); this.panelTop.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitCon)).BeginInit(); + this.splitCon.Panel1.SuspendLayout(); + this.splitCon.Panel2.SuspendLayout(); + this.splitCon.SuspendLayout(); + this.panelPrjs.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvFilter)).BeginInit(); + this.tabCtrl.SuspendLayout(); + this.tabCfgDxp.SuspendLayout(); + this.tabData.SuspendLayout(); + this.tabUpdating.SuspendLayout(); + this.panelUpdVerTop.SuspendLayout(); + this.tabBuildInfo.SuspendLayout(); this.SuspendLayout(); // // panelTop // this.panelTop.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.panelTop.Controls.Add(this.progressLine); - this.panelTop.Controls.Add(this.comboBoxStorage); - this.panelTop.Controls.Add(this.btnExt); this.panelTop.Controls.Add(this.btnApply); this.panelTop.Controls.Add(this.comboBoxSln); this.panelTop.Dock = System.Windows.Forms.DockStyle.Top; this.panelTop.Location = new System.Drawing.Point(0, 0); this.panelTop.Name = "panelTop"; - this.panelTop.Size = new System.Drawing.Size(469, 29); + this.panelTop.Size = new System.Drawing.Size(446, 29); this.panelTop.TabIndex = 0; // // progressLine // this.progressLine.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.progressLine.BackColor = System.Drawing.Color.DeepSkyBlue; + this.progressLine.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.progressLine.Location = new System.Drawing.Point(0, 21); this.progressLine.Name = "progressLine"; this.progressLine.Size = new System.Drawing.Size(275, 5); this.progressLine.TabIndex = 8; // - // comboBoxStorage - // - this.comboBoxStorage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.comboBoxStorage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBoxStorage.DropDownWidth = 190; - this.comboBoxStorage.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.comboBoxStorage.FormattingEnabled = true; - this.comboBoxStorage.Location = new System.Drawing.Point(297, 2); - this.comboBoxStorage.Margin = new System.Windows.Forms.Padding(1); - this.comboBoxStorage.Name = "comboBoxStorage"; - this.comboBoxStorage.Size = new System.Drawing.Size(78, 21); - this.comboBoxStorage.TabIndex = 7; - this.toolTipMain.SetToolTip(this.comboBoxStorage, "Storage"); - // - // btnExt - // - this.btnExt.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnExt.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.btnExt.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnExt.Location = new System.Drawing.Point(439, 1); - this.btnExt.Margin = new System.Windows.Forms.Padding(0); - this.btnExt.Name = "btnExt"; - this.btnExt.Size = new System.Drawing.Size(26, 23); - this.btnExt.TabIndex = 2; - this.btnExt.Text = "+"; - this.btnExt.TextAlign = System.Drawing.ContentAlignment.TopCenter; - this.toolTipMain.SetToolTip(this.btnExt, "Features"); - this.btnExt.UseVisualStyleBackColor = true; - this.btnExt.Click += new System.EventHandler(this.btnExt_Click); - // // btnApply // this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnApply.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnApply.Location = new System.Drawing.Point(377, 1); + this.btnApply.Location = new System.Drawing.Point(381, 1); this.btnApply.Margin = new System.Windows.Forms.Padding(1); this.btnApply.Name = "btnApply"; this.btnApply.Size = new System.Drawing.Size(61, 23); @@ -113,45 +121,424 @@ private void InitializeComponent() | System.Windows.Forms.AnchorStyles.Right))); this.comboBoxSln.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxSln.DropDownWidth = 500; - this.comboBoxSln.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.comboBoxSln.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.comboBoxSln.FormattingEnabled = true; this.comboBoxSln.Location = new System.Drawing.Point(1, 2); this.comboBoxSln.Margin = new System.Windows.Forms.Padding(1); this.comboBoxSln.Name = "comboBoxSln"; - this.comboBoxSln.Size = new System.Drawing.Size(294, 21); + this.comboBoxSln.Size = new System.Drawing.Size(378, 21); this.comboBoxSln.TabIndex = 0; this.toolTipMain.SetToolTip(this.comboBoxSln, "Solution File"); this.comboBoxSln.SelectedIndexChanged += new System.EventHandler(this.comboBoxSln_SelectedIndexChanged); // + // btnUpdListOfPkg + // + this.btnUpdListOfPkg.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnUpdListOfPkg.Location = new System.Drawing.Point(287, 4); + this.btnUpdListOfPkg.Name = "btnUpdListOfPkg"; + this.btnUpdListOfPkg.Size = new System.Drawing.Size(38, 23); + this.btnUpdListOfPkg.TabIndex = 2; + this.btnUpdListOfPkg.Text = "( @ )"; + this.toolTipMain.SetToolTip(this.btnUpdListOfPkg, "<< Receive new list"); + this.btnUpdListOfPkg.UseVisualStyleBackColor = true; + this.btnUpdListOfPkg.Click += new System.EventHandler(this.BtnUpdListOfPkg_Click); + // + // btnToOnline + // + this.btnToOnline.Location = new System.Drawing.Point(6, 73); + this.btnToOnline.Name = "btnToOnline"; + this.btnToOnline.Size = new System.Drawing.Size(148, 23); + this.btnToOnline.TabIndex = 15; + this.btnToOnline.Text = "Convert to online version"; + this.toolTipMain.SetToolTip(this.btnToOnline, "It will try to convert to the normal online version"); + this.btnToOnline.UseVisualStyleBackColor = true; + this.btnToOnline.Visible = false; + this.btnToOnline.Click += new System.EventHandler(this.BtnToOnline_Click); + // + // comboBoxStorage + // + this.comboBoxStorage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.comboBoxStorage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxStorage.DropDownWidth = 190; + this.comboBoxStorage.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.comboBoxStorage.FormattingEnabled = true; + this.comboBoxStorage.Location = new System.Drawing.Point(251, 4); + this.comboBoxStorage.Margin = new System.Windows.Forms.Padding(1); + this.comboBoxStorage.Name = "comboBoxStorage"; + this.comboBoxStorage.Size = new System.Drawing.Size(170, 21); + this.comboBoxStorage.TabIndex = 14; + this.toolTipMain.SetToolTip(this.comboBoxStorage, "Storage"); + // + // splitCon + // + this.splitCon.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitCon.IsSplitterFixed = true; + this.splitCon.Location = new System.Drawing.Point(0, 29); + this.splitCon.Margin = new System.Windows.Forms.Padding(0); + this.splitCon.Name = "splitCon"; + this.splitCon.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitCon.Panel1 + // + this.splitCon.Panel1.Controls.Add(this.panelPrjs); + this.splitCon.Panel1.Controls.Add(this.panelFilter); + // + // splitCon.Panel2 + // + this.splitCon.Panel2.Controls.Add(this.tabCtrl); + this.splitCon.Size = new System.Drawing.Size(446, 341); + this.splitCon.SplitterDistance = 78; + this.splitCon.TabIndex = 2; + // + // panelPrjs + // + this.panelPrjs.Controls.Add(this.dgvFilter); + this.panelPrjs.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelPrjs.Location = new System.Drawing.Point(0, 26); + this.panelPrjs.Margin = new System.Windows.Forms.Padding(0); + this.panelPrjs.Name = "panelPrjs"; + this.panelPrjs.Size = new System.Drawing.Size(446, 52); + this.panelPrjs.TabIndex = 2; + // + // dgvFilter + // + this.dgvFilter.AllowUserToAddRows = false; + this.dgvFilter.AllowUserToDeleteRows = false; + this.dgvFilter.AllowUserToResizeRows = false; + this.dgvFilter.AlwaysSelected = true; + this.dgvFilter.BackgroundColor = System.Drawing.SystemColors.Control; + this.dgvFilter.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.dgvFilter.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; + this.dgvFilter.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvFilter.ColumnHeadersVisible = false; + this.dgvFilter.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.gcInstalled, + this.gcType, + this.gcPath}); + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(228)))), ((int)(((byte)(238)))), ((int)(((byte)(239))))); + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvFilter.DefaultCellStyle = dataGridViewCellStyle1; + this.dgvFilter.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvFilter.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.dgvFilter.Location = new System.Drawing.Point(0, 0); + this.dgvFilter.Margin = new System.Windows.Forms.Padding(0); + this.dgvFilter.MultiSelect = false; + this.dgvFilter.Name = "dgvFilter"; + this.dgvFilter.NumberingForRowsHeader = false; + this.dgvFilter.ReadOnly = true; + this.dgvFilter.RowHeadersVisible = false; + this.dgvFilter.RowHeadersWidth = 28; + this.dgvFilter.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; + this.dgvFilter.RowTemplate.Height = 17; + this.dgvFilter.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.dgvFilter.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dgvFilter.Size = new System.Drawing.Size(446, 52); + this.dgvFilter.TabIndex = 0; + this.dgvFilter.RowEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvFilter_RowEnter); + this.dgvFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dgvFilter_KeyDown); + // + // gcInstalled + // + this.gcInstalled.HeaderText = ""; + this.gcInstalled.MinimumWidth = 2; + this.gcInstalled.Name = "gcInstalled"; + this.gcInstalled.ReadOnly = true; + this.gcInstalled.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.gcInstalled.Width = 6; + // + // gcType + // + this.gcType.HeaderText = "Type"; + this.gcType.MinimumWidth = 16; + this.gcType.Name = "gcType"; + this.gcType.ReadOnly = true; + this.gcType.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.gcType.ToolTipText = "Project Type"; + this.gcType.Width = 32; + // + // gcPath + // + this.gcPath.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.gcPath.HeaderText = "Path"; + this.gcPath.MinimumWidth = 70; + this.gcPath.Name = "gcPath"; + this.gcPath.ReadOnly = true; + this.gcPath.ToolTipText = "Path to project file"; + // + // panelFilter + // + this.panelFilter.Dock = System.Windows.Forms.DockStyle.Top; + this.panelFilter.Location = new System.Drawing.Point(0, 0); + this.panelFilter.Margin = new System.Windows.Forms.Padding(0); + this.panelFilter.Name = "panelFilter"; + this.panelFilter.Size = new System.Drawing.Size(446, 26); + this.panelFilter.TabIndex = 1; + // + // tabCtrl + // + this.tabCtrl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabCtrl.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.tabCtrl.Controls.Add(this.tabCfgDxp); + this.tabCtrl.Controls.Add(this.tabData); + this.tabCtrl.Controls.Add(this.tabUpdating); + this.tabCtrl.Controls.Add(this.tabBuildInfo); + this.tabCtrl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.tabCtrl.Location = new System.Drawing.Point(-4, 0); + this.tabCtrl.Margin = new System.Windows.Forms.Padding(0); + this.tabCtrl.Name = "tabCtrl"; + this.tabCtrl.SelectedIndex = 0; + this.tabCtrl.Size = new System.Drawing.Size(450, 259); + this.tabCtrl.TabIndex = 0; + // + // tabCfgDxp + // + this.tabCfgDxp.Controls.Add(this.projectItems); + this.tabCfgDxp.Location = new System.Drawing.Point(4, 25); + this.tabCfgDxp.Name = "tabCfgDxp"; + this.tabCfgDxp.Padding = new System.Windows.Forms.Padding(3); + this.tabCfgDxp.Size = new System.Drawing.Size(442, 230); + this.tabCfgDxp.TabIndex = 0; + this.tabCfgDxp.Text = "Options"; + this.tabCfgDxp.UseVisualStyleBackColor = true; + // // projectItems // + this.projectItems.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.projectItems.BackColor = System.Drawing.SystemColors.Control; this.projectItems.Browse = null; - this.projectItems.Dock = System.Windows.Forms.DockStyle.Fill; - this.projectItems.Location = new System.Drawing.Point(0, 29); + this.projectItems.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.projectItems.Location = new System.Drawing.Point(0, 0); + this.projectItems.Margin = new System.Windows.Forms.Padding(0); this.projectItems.Name = "projectItems"; this.projectItems.NamespaceValidate = null; this.projectItems.OpenUrl = null; - this.projectItems.Size = new System.Drawing.Size(469, 421); - this.projectItems.TabIndex = 1; - this.projectItems.RenderedItemsSizeChanged += new System.EventHandler(this.projectItems_RenderedItemsSizeChanged); + this.projectItems.Size = new System.Drawing.Size(448, 247); + this.projectItems.TabIndex = 2; + // + // tabData + // + this.tabData.Controls.Add(this.labelStorage); + this.tabData.Controls.Add(this.comboBoxStorage); + this.tabData.Controls.Add(this.txtCfgData); + this.tabData.Location = new System.Drawing.Point(4, 25); + this.tabData.Name = "tabData"; + this.tabData.Size = new System.Drawing.Size(442, 230); + this.tabData.TabIndex = 3; + this.tabData.Text = "Data"; + this.tabData.UseVisualStyleBackColor = true; + // + // labelStorage + // + this.labelStorage.AutoSize = true; + this.labelStorage.Location = new System.Drawing.Point(180, 7); + this.labelStorage.Name = "labelStorage"; + this.labelStorage.Size = new System.Drawing.Size(67, 13); + this.labelStorage.TabIndex = 15; + this.labelStorage.Text = "Use storage:"; + // + // txtCfgData + // + this.txtCfgData.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtCfgData.BackColor = System.Drawing.SystemColors.Window; + this.txtCfgData.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtCfgData.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtCfgData.Location = new System.Drawing.Point(3, 29); + this.txtCfgData.Multiline = true; + this.txtCfgData.Name = "txtCfgData"; + this.txtCfgData.ReadOnly = true; + this.txtCfgData.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtCfgData.Size = new System.Drawing.Size(436, 198); + this.txtCfgData.TabIndex = 13; + // + // tabUpdating + // + this.tabUpdating.Controls.Add(this.btnToOnline); + this.tabUpdating.Controls.Add(this.txtLogUpd); + this.tabUpdating.Controls.Add(this.panelUpdVerTop); + this.tabUpdating.Location = new System.Drawing.Point(4, 25); + this.tabUpdating.Name = "tabUpdating"; + this.tabUpdating.Padding = new System.Windows.Forms.Padding(3); + this.tabUpdating.Size = new System.Drawing.Size(442, 230); + this.tabUpdating.TabIndex = 2; + this.tabUpdating.Text = "^ Updater"; + this.tabUpdating.UseVisualStyleBackColor = true; + // + // txtLogUpd + // + this.txtLogUpd.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtLogUpd.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(12)))), ((int)(((byte)(12)))), ((int)(((byte)(12))))); + this.txtLogUpd.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.txtLogUpd.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtLogUpd.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(203)))), ((int)(((byte)(203)))), ((int)(((byte)(203))))); + this.txtLogUpd.Location = new System.Drawing.Point(0, 33); + this.txtLogUpd.Multiline = true; + this.txtLogUpd.Name = "txtLogUpd"; + this.txtLogUpd.ReadOnly = true; + this.txtLogUpd.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtLogUpd.Size = new System.Drawing.Size(446, 201); + this.txtLogUpd.TabIndex = 13; + this.txtLogUpd.WordWrap = false; + // + // panelUpdVerTop + // + this.panelUpdVerTop.Controls.Add(this.btnUpdListOfPkg); + this.panelUpdVerTop.Controls.Add(this.cbPackages); + this.panelUpdVerTop.Controls.Add(this.btnUpdate); + this.panelUpdVerTop.Location = new System.Drawing.Point(39, 0); + this.panelUpdVerTop.Name = "panelUpdVerTop"; + this.panelUpdVerTop.Size = new System.Drawing.Size(342, 34); + this.panelUpdVerTop.TabIndex = 14; + // + // cbPackages + // + this.cbPackages.FormattingEnabled = true; + this.cbPackages.Location = new System.Drawing.Point(121, 6); + this.cbPackages.Name = "cbPackages"; + this.cbPackages.Size = new System.Drawing.Size(160, 21); + this.cbPackages.TabIndex = 1; + // + // btnUpdate + // + this.btnUpdate.Location = new System.Drawing.Point(11, 4); + this.btnUpdate.Name = "btnUpdate"; + this.btnUpdate.Size = new System.Drawing.Size(104, 23); + this.btnUpdate.TabIndex = 0; + this.btnUpdate.Text = "Update to"; + this.btnUpdate.UseVisualStyleBackColor = true; + this.btnUpdate.Click += new System.EventHandler(this.BtnUpdate_Click); + // + // tabBuildInfo + // + this.tabBuildInfo.BackColor = System.Drawing.SystemColors.Control; + this.tabBuildInfo.Controls.Add(this.labelSrcMit); + this.tabBuildInfo.Controls.Add(this.linkIlasm); + this.tabBuildInfo.Controls.Add(this.lnkSrc); + this.tabBuildInfo.Controls.Add(this.lnk3F); + this.tabBuildInfo.Controls.Add(this.labelSrc); + this.tabBuildInfo.Controls.Add(this.txtBuildInfo); + this.tabBuildInfo.Location = new System.Drawing.Point(4, 25); + this.tabBuildInfo.Name = "tabBuildInfo"; + this.tabBuildInfo.Padding = new System.Windows.Forms.Padding(3); + this.tabBuildInfo.Size = new System.Drawing.Size(442, 230); + this.tabBuildInfo.TabIndex = 1; + this.tabBuildInfo.Text = "Build info"; + // + // labelSrcMit + // + this.labelSrcMit.AutoSize = true; + this.labelSrcMit.Location = new System.Drawing.Point(41, 23); + this.labelSrcMit.Name = "labelSrcMit"; + this.labelSrcMit.Size = new System.Drawing.Size(38, 13); + this.labelSrcMit.TabIndex = 21; + this.labelSrcMit.Text = "( MIT )"; + // + // linkIlasm + // + this.linkIlasm.AutoSize = true; + this.linkIlasm.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkIlasm.Location = new System.Drawing.Point(108, 23); + this.linkIlasm.Name = "linkIlasm"; + this.linkIlasm.Size = new System.Drawing.Size(149, 13); + this.linkIlasm.TabIndex = 20; + this.linkIlasm.TabStop = true; + this.linkIlasm.Text = "https://github.com/3F/coreclr"; + this.linkIlasm.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkIlasm_LinkClicked); + // + // lnkSrc + // + this.lnkSrc.AutoSize = true; + this.lnkSrc.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lnkSrc.Location = new System.Drawing.Point(108, 3); + this.lnkSrc.Name = "lnkSrc"; + this.lnkSrc.Size = new System.Drawing.Size(159, 13); + this.lnkSrc.TabIndex = 16; + this.lnkSrc.TabStop = true; + this.lnkSrc.Text = "https://github.com/3F/DllExport"; + this.lnkSrc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkSrc_LinkClicked); + // + // lnk3F + // + this.lnk3F.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.lnk3F.AutoSize = true; + this.lnk3F.Location = new System.Drawing.Point(377, 23); + this.lnk3F.Name = "lnk3F"; + this.lnk3F.Size = new System.Drawing.Size(57, 13); + this.lnk3F.TabIndex = 14; + this.lnk3F.TabStop = true; + this.lnk3F.Text = "GitHub/3F"; + this.lnk3F.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk3F_LinkClicked); + // + // labelSrc + // + this.labelSrc.AutoSize = true; + this.labelSrc.Location = new System.Drawing.Point(21, 3); + this.labelSrc.Name = "labelSrc"; + this.labelSrc.Size = new System.Drawing.Size(68, 13); + this.labelSrc.TabIndex = 13; + this.labelSrc.Text = "Open source"; + // + // txtBuildInfo + // + this.txtBuildInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtBuildInfo.BackColor = System.Drawing.SystemColors.Control; + this.txtBuildInfo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtBuildInfo.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtBuildInfo.Location = new System.Drawing.Point(3, 41); + this.txtBuildInfo.Multiline = true; + this.txtBuildInfo.Name = "txtBuildInfo"; + this.txtBuildInfo.ReadOnly = true; + this.txtBuildInfo.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtBuildInfo.Size = new System.Drawing.Size(436, 184); + this.txtBuildInfo.TabIndex = 12; // // ConfiguratorForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(469, 450); - this.Controls.Add(this.projectItems); + this.ClientSize = new System.Drawing.Size(446, 370); + this.Controls.Add(this.splitCon); this.Controls.Add(this.panelTop); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; this.MaximizeBox = false; - this.MaximumSize = new System.Drawing.Size(495, 2000); this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(470, 39); this.Name = "ConfiguratorForm"; this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "DllExport"; this.TopMost = true; + this.Load += new System.EventHandler(this.ConfiguratorForm_Load); this.panelTop.ResumeLayout(false); + this.splitCon.Panel1.ResumeLayout(false); + this.splitCon.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitCon)).EndInit(); + this.splitCon.ResumeLayout(false); + this.panelPrjs.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvFilter)).EndInit(); + this.tabCtrl.ResumeLayout(false); + this.tabCfgDxp.ResumeLayout(false); + this.tabData.ResumeLayout(false); + this.tabData.PerformLayout(); + this.tabUpdating.ResumeLayout(false); + this.tabUpdating.PerformLayout(); + this.panelUpdVerTop.ResumeLayout(false); + this.tabBuildInfo.ResumeLayout(false); + this.tabBuildInfo.PerformLayout(); this.ResumeLayout(false); } @@ -161,10 +548,35 @@ private void InitializeComponent() private System.Windows.Forms.Panel panelTop; private System.Windows.Forms.Button btnApply; private System.Windows.Forms.ComboBox comboBoxSln; - private Controls.ProjectItemsControl projectItems; - private System.Windows.Forms.Button btnExt; private System.Windows.Forms.ToolTip toolTipMain; - private System.Windows.Forms.ComboBox comboBoxStorage; private Controls.ProgressLineControl progressLine; + private System.Windows.Forms.SplitContainer splitCon; + private System.Windows.Forms.TabControl tabCtrl; + private System.Windows.Forms.TabPage tabCfgDxp; + private Controls.ProjectItemsControl projectItems; + private System.Windows.Forms.TabPage tabBuildInfo; + private vsSBE.UI.WForms.Components.DataGridViewExt dgvFilter; + private System.Windows.Forms.Panel panelFilter; + private System.Windows.Forms.Panel panelPrjs; + private System.Windows.Forms.DataGridViewTextBoxColumn gcInstalled; + private System.Windows.Forms.DataGridViewImageColumn gcType; + private System.Windows.Forms.DataGridViewTextBoxColumn gcPath; + private System.Windows.Forms.TextBox txtBuildInfo; + private System.Windows.Forms.Label labelSrc; + private System.Windows.Forms.LinkLabel lnk3F; + private System.Windows.Forms.LinkLabel lnkSrc; + private System.Windows.Forms.LinkLabel linkIlasm; + private System.Windows.Forms.TabPage tabUpdating; + private System.Windows.Forms.ComboBox cbPackages; + private System.Windows.Forms.Button btnUpdate; + private System.Windows.Forms.TextBox txtLogUpd; + private System.Windows.Forms.Panel panelUpdVerTop; + private System.Windows.Forms.Button btnUpdListOfPkg; + private System.Windows.Forms.Button btnToOnline; + private System.Windows.Forms.TabPage tabData; + private System.Windows.Forms.Label labelStorage; + private System.Windows.Forms.ComboBox comboBoxStorage; + private System.Windows.Forms.TextBox txtCfgData; + private System.Windows.Forms.Label labelSrcMit; } } \ No newline at end of file diff --git a/Wizard/UI/ConfiguratorForm.cs b/Wizard/UI/ConfiguratorForm.cs index 9b6981e..d09e432 100644 --- a/Wizard/UI/ConfiguratorForm.cs +++ b/Wizard/UI/ConfiguratorForm.cs @@ -24,30 +24,44 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; +using System.IO; using System.Linq; +using System.Text; +using System.Text.RegularExpressions; using System.Threading; +using System.Threading.Tasks; using System.Windows.Forms; using net.r_eg.DllExport.NSBin; using net.r_eg.DllExport.Wizard.Extensions; using net.r_eg.DllExport.Wizard.UI.Extensions; +using net.r_eg.DllExport.Wizard.UI.Kit; using net.r_eg.MvsSln.Log; namespace net.r_eg.DllExport.Wizard.UI { internal sealed partial class ConfiguratorForm: Form, IRender { - public const int MAX_VIEW_ITEMS = 2; + private const string CL_TRUE = " "; + private const string CL_FALSE = ""; - private IExecutor exec; - private Lazy extcfg; + private readonly IExecutor exec; + private readonly Lazy extcfg; private CfgStorage storage; private FileDialog fdialog; + private readonly Icons icons = new Icons(); + private readonly Caller caller; + private readonly PackageInfo pkgVer; + private readonly IConfFormater confFormater; private int prevSlnItemIndex = 0; - private volatile bool _suspendPrjItems; + private volatile bool _suspendCbSln; private readonly object sync = new object(); + private string UpdToVersion => cbPackages.Text.Trim(); + private string CmdUpdate => $".\\{UserConfig.MGR_NAME} -action Upgrade -dxp-version "; + /// /// To apply filter for rendered projects. /// @@ -57,10 +71,6 @@ public void ApplyFilter(ProjectFilter filter) RenderProjects(exec.ActiveSlnFile, filter); } - /// - /// - /// - /// public void ShowProgressLine(bool enabled) { if(enabled) { @@ -73,47 +83,126 @@ public void ShowProgressLine(bool enabled) public ConfiguratorForm(IExecutor exec) { - this.exec = exec ?? throw new ArgumentNullException(nameof(exec)); + this.exec = exec ?? throw new ArgumentNullException(nameof(exec)); - extcfg = new Lazy(() => new Kit.FilterLineControl(this, exec)); + extcfg = new Lazy(() => new FilterLineControl(this, exec)); + caller = new Caller(exec.Config.SlnDir); + pkgVer = new PackageInfo(exec); + confFormater = new SimpleConfFormater(exec); InitializeComponent(); - Text = ".NET DllExport"; + Text = GetVersionInfo(); + + projectItems.Browse = + projectItems.OpenUrl = (string url) => url.OpenUrl(); + + projectItems.NamespaceValidate = (string ns) => DDNS.IsValidNS(ns?.Trim()); + + ShowFilterPanel(); + txtBuildInfo.Text = GetBuildInfo(); + + RenderSlnFiles(); + comboBoxSln.SelectedIndex = 0; + + storage = new CfgStorage(exec, comboBoxStorage); + storage.UpdateItem(); + + projectItems.Set(null); // TODO: this only when no projects in solution and only when initial start + } + + private void ConfiguratorForm_Load(object sender, EventArgs e) + { + TopMost = false; TopMost = true; + + if(!string.IsNullOrEmpty(pkgVer.Activated)) + { + UpdateListOfPackages(); + txtLogUpd.SetData($"{CmdUpdate} ..."); + } + else + { + panelUpdVerTop.Enabled = false; + btnToOnline.Visible = true; + txtLogUpd.SetData("You're using an offline version or such `-dxp-version actual`."); + } + } + + private void UpdateListOfPackages() + { + cbPackages.Items.Clear(); + + Task.Factory + .StartNew(() => pkgVer.GetFromGitHubAsync()) + .ContinueWith(t => + { + var rctask = t.Result; + var releases = rctask.Result.ToArray(); + + cbPackages.UIAction(x => x.Items.AddRange(releases)); + + int pos = cbPackages.FindString(pkgVer.Activated); + cbPackages.UIAction(x => + { + if(pos == -1) { + x.Text = pkgVer.Activated; + } + else { + x.SelectedIndex = pos; + } + }); + }); + } + + private string GetVersionInfo(bool urlinfo = true) + { + var sb = new StringBuilder(); + + sb.Append(".NET DllExport"); #if PUBLIC_RELEASE - Text += " - v" + WizardVersion.S_INFO; + sb.Append(" " + WizardVersion.S_INFO); #else - Text += $" - Based on v{WizardVersion.S_NUM} {WizardVersion.S_REL} [{WizardVersion.BRANCH_SHA1}]"; + sb.Append($" - Based on {WizardVersion.S_NUM}"); #endif + if(WizardVersion.S_REL.Length > 0) + { + sb.Append($" [{WizardVersion.S_REL}]"); + } #if DEBUG - Text += " [ Debug ]"; + sb.Append(" [Debug]"); #endif - Text += " github.com/3F/DllExport"; - - projectItems.Browse = - projectItems.OpenUrl = OpenUrl; - - projectItems.NamespaceValidate = (string ns) => { - return DDNS.IsValidNS(ns?.Trim()); - }; - - progressLine.StartTrainEffect(panelTop.Width); + if(urlinfo) { - RenderSlnFiles(); - comboBoxSln.SelectedIndex = 0; - - storage = new CfgStorage(exec, comboBoxStorage); - storage.UpdateItem(); + sb.Append(" //github.com/3F/DllExport"); } - progressLine.StopAll(); - Load += (object sender, EventArgs e) => { TopMost = false; TopMost = true; }; + return sb.ToString(); } - private void OpenUrl(string url) + private void ShowFilterPanel() { - url.OpenUrl(); + if(extcfg.IsValueCreated) { + ((FilterLineControl)extcfg.Value).Show(); + return; + } + + LSender.Send(this, $"Create {nameof(FilterLineControl)} panel"); + + var panel = (FilterLineControl)extcfg.Value; + + panel.Left = 0; + panel.Top = 0; + panel.Width = panelFilter.Width; + panel.Height = panelFilter.Height; + + panelFilter.Controls.Add(panel); + panel.Dock = DockStyle.Fill; + + panel.BringToFront(); + progressLine.BringToFront(); + + panel.Show(); } private void RenderSlnFiles() @@ -161,6 +250,7 @@ private void RenderProjects(ComboBox box) || !file.TrimEnd().EndsWith(".sln", StringComparison.InvariantCultureIgnoreCase)) { DoSilentAction(() => box.SelectedIndex = prevSlnItemIndex); + EnableTabsWhenNoSln(false); return; } @@ -180,7 +270,7 @@ private void RenderProjects(ComboBox box) private void RenderProjects(string sln) { - if(String.IsNullOrWhiteSpace(sln)) { + if(string.IsNullOrWhiteSpace(sln)) { return; } @@ -189,31 +279,40 @@ private void RenderProjects(string sln) toolTipMain.SetToolTip(comboBoxSln, sln); - RenderProjects(() => GetProjects(sln).ForEach(prj => projectItems.Add(prj))); + RenderListOfProjects(GetProjects(sln)); } private void RenderProjects(string sln, ProjectFilter filter) { - RenderProjects(() => - { - projectItems.Pause(); + projectItems.Pause(); + dgvFilter.Pause(); + + RenderListOfProjects( extcfg.Value.FilterProjects(filter, GetProjects(sln)) - .ForEach(prj => projectItems.Add(prj)); + ); - projectItems.Resume(); - }); + dgvFilter.Resume(); + projectItems.Resume(); } - private void RenderProjects(Action act) + private void RenderListOfProjects(IEnumerable projects) { - lock(sync) + dgvFilter.Rows.Clear(); + projects.ForEach(prj => { - _suspendPrjItems = true; - projectItems.Reset(false); + int n = dgvFilter.Rows.Add + ( + prj.Installed ? CL_TRUE : CL_FALSE, + icons.GetIcon(prj.XProject.ProjectItem.project.EpType), + prj.ProjectPath + ); + + dgvFilter.Rows[n].Cells[1].ToolTipText = prj.XProject.ProjectItem.project.EpType.ToString(); + dgvFilter.Rows[n].Cells[0].Style.BackColor = (prj.Installed)? Color.FromArgb(111, 145, 6) + : Color.FromArgb(168, 47, 17); + }); - act(); - _suspendPrjItems = false; - } + EnableTabsWhenNoSln(dgvFilter.Rows.Count > 0); } private IEnumerable GetProjects(string sln) @@ -223,39 +322,83 @@ private IEnumerable GetProjects(string sln) .OrderByDescending(p => p.InternalError == null); } - private void DoSilentAction(Action act, ComboBox box, EventHandler handler) + private void DoSilentAction(Action act) { lock(sync) { - box.SelectedIndexChanged -= handler; + _suspendCbSln = true; act(); - box.SelectedIndexChanged += handler; + _suspendCbSln = false; } } - private void DoSilentAction(Action act) + private void Execute(string cmd, Action success, Action failed) { - DoSilentAction(act, comboBoxSln, comboBoxSln_SelectedIndexChanged); + txtLogUpd.AppendData(">" + cmd); + + void std(object _, DataReceivedEventArgs _e) + { + if(!string.IsNullOrEmpty(_e.Data)) { + txtLogUpd.UIAction(x => x.AppendData(_e.Data)); + } + } + + Task.Factory.StartNew(() => caller.Shell + ( + cmd, + Caller.WAIT_INF, + (p) => + { + if(p.ExitCode != 0) + { + failed(p.ExitCode); + return; + } + + success(); + }, + std, std + )); } - private void ResizeHeight() + private void EnableTabsWhenNoSln(bool status) => ((Control)tabCfgDxp).Enabled = status; + + private string GetBuildInfo() { - int actual = Math.Max( - projectItems.MaxItemHeight, - Math.Min(projectItems.MaxItemsHeight, projectItems.GetMaxItemsHeight(MAX_VIEW_ITEMS)) - ); + var sb = new StringBuilder(); - ClientSize = new Size(ClientSize.Width, panelTop.Height + actual); + sb.AppendLine(GetVersionInfo(false)); + + var info = Path.Combine(exec.Config.PkgPath, "build_info.txt"); + if(!File.Exists(info)) + { + sb.Append("Detailed information about build was not found. :("); + } + else + { + File.ReadAllLines(info).ForEach(s => + { + sb.Append(Regex.Replace(s, @":(\s\s*)(?!generated)", (Match m) => $": {m.Groups[1].Value.Replace(' ', '.')} ")); + sb.AppendLine(); + }); + } + + return sb.ToString(); } private void comboBoxSln_SelectedIndexChanged(object sender, EventArgs e) { - if(sender is ComboBox) { + if(_suspendCbSln) { return; } + + ((FilterLineControl)extcfg.Value).FilterText = string.Empty; + + if(sender is ComboBox) + { + progressLine.StartTrainEffect(panelTop.Width); RenderProjects((ComboBox)sender); + progressLine.StopAll(); } prevSlnItemIndex = comboBoxSln.SelectedIndex; - - ResizeHeight(); } private void btnApply_Click(object sender, EventArgs e) @@ -275,35 +418,101 @@ private void btnApply_Click(object sender, EventArgs e) Close(); } - private void btnExt_Click(object sender, EventArgs e) + private void lnkSrc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => "https://github.com/3F/DllExport".OpenUrl(); + private void linkIlasm_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => "https://github.com/3F/coreclr".OpenUrl(); + private void lnk3F_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => "https://github.com/3F".OpenUrl(); + + private void dgvFilter_RowEnter(object sender, DataGridViewCellEventArgs e) { - if(extcfg.IsValueCreated) { - ((Kit.FilterLineControl)extcfg.Value).Show(); + if(e.RowIndex == -1 || e.RowIndex >= dgvFilter.RowCount) { return; } - LSender.Send(this, $"Create {nameof(Kit.FilterLineControl)} panel"); + string path = dgvFilter.Rows[e.RowIndex].Cells[gcPath.Name].Value.ToString(); + IProject prj = GetProjects(exec.ActiveSlnFile).FirstOrDefault(p => p.ProjectPath == path); - var panel = ((Kit.FilterLineControl)extcfg.Value); + projectItems.Pause(); + projectItems.Set(prj); + projectItems.Resume(); + + txtCfgData.Text = confFormater.Parse(prj); + } - panel.Left = 0; - panel.Top = 0; - panel.Width = panelTop.Width; - panel.Height = panelTop.Height/* - progressLine.Height*/; + private void dgvFilter_KeyDown(object sender, KeyEventArgs e) + { + switch(e.KeyCode) + { + case Keys.F2: + case Keys.Enter: + { + e.SuppressKeyPress = true; + e.Handled = true; + return; + } + } + } - panelTop.Controls.Add(panel); - panel.Dock = DockStyle.Fill; + private void BtnUpdate_Click(object sender, EventArgs e) + { + if(string.IsNullOrEmpty(UpdToVersion)) { + txtLogUpd.AppendData($"You need specify version for command."); + return; + } - panel.BringToFront(); - progressLine.BringToFront(); + if(pkgVer.Activated == UpdToVersion) { + txtLogUpd.AppendData($"You're already using {pkgVer.Activated}"); + return; + } - panel.Show(); + panelUpdVerTop.Enabled = false; + txtLogUpd.SetData($"Updating to {UpdToVersion} is starting ..."); + + Execute + ( + CmdUpdate + UpdToVersion, + () => + { + caller.Shell($".\\{UserConfig.MGR_NAME} -action Configure"); + Close(); + }, + (code) => + { + txtLogUpd.UIAction(x => x.AppendData("Failed Task.")); + panelUpdVerTop.UIAction(x => x.Enabled = true); + } + ); } - private void projectItems_RenderedItemsSizeChanged(object sender, EventArgs e) + private void BtnUpdListOfPkg_Click(object sender, EventArgs e) => UpdateListOfPackages(); + + private void BtnToOnline_Click(object sender, EventArgs e) { - if(_suspendPrjItems) { return; } - ResizeHeight(); + const string _FAILED = "Failed Task. You only need to try manually."; + + btnToOnline.Visible = false; + + var src = Path.Combine(exec.Config.PkgPath, UserConfig.MGR_FILE); + if(!File.Exists(src)) + { + txtLogUpd.AppendData($"{UserConfig.MGR_FILE} was not found in `{exec.Config.PkgPath}`."); + txtLogUpd.AppendData(_FAILED); + return; + } + File.Copy(src, Path.Combine(exec.Config.SlnDir, UserConfig.MGR_FILE), true); + + Execute + ( + $".\\{UserConfig.MGR_NAME} -action Update", + () => + { + caller.Shell($".\\{UserConfig.MGR_NAME} -action Configure"); + Close(); + }, + (code) => + { + txtLogUpd.UIAction(x => x.AppendData(_FAILED)); + } + ); } } } diff --git a/Wizard/UI/ConfiguratorForm.resx b/Wizard/UI/ConfiguratorForm.resx index 748c5cc..7a09da8 100644 --- a/Wizard/UI/ConfiguratorForm.resx +++ b/Wizard/UI/ConfiguratorForm.resx @@ -120,4 +120,13 @@ 17, 17 + + True + + + True + + + True + \ No newline at end of file diff --git a/Wizard/UI/Controls/ProgressLineControl.Designer.cs b/Wizard/UI/Controls/ProgressLineControl.Designer.cs index a0042b6..75a6129 100644 --- a/Wizard/UI/Controls/ProgressLineControl.Designer.cs +++ b/Wizard/UI/Controls/ProgressLineControl.Designer.cs @@ -22,6 +22,7 @@ private void InitializeComponent() this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.DeepSkyBlue; + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.Name = "ProgressLineControl"; this.Size = new System.Drawing.Size(195, 10); this.ResumeLayout(false); diff --git a/Wizard/UI/Controls/ProgressLineControl.cs b/Wizard/UI/Controls/ProgressLineControl.cs index 2fdd03b..905d8a7 100644 --- a/Wizard/UI/Controls/ProgressLineControl.cs +++ b/Wizard/UI/Controls/ProgressLineControl.cs @@ -40,16 +40,21 @@ public void StartTrainEffect(int lenLimit, int step = 40, int delay = 50) } stop = false; + int direction = 0; // for an complete processing per step void animate() { - if(Width >= lenLimit) { + if(Width >= lenLimit) + { + direction = -1; Left += step; if(Left >= lenLimit) { ResetTrainEffect(); } } - else { + else + { + direction = 1; Width += step; } }; @@ -60,7 +65,7 @@ void animate() { this.UIAction(animate); - if(stop) { + if(stop && direction < 0) { this.UIAction(ResetTrainEffect); return; } diff --git a/Wizard/UI/Controls/ProjectItemControl.Designer.cs b/Wizard/UI/Controls/ProjectItemControl.Designer.cs index 9a19181..dc045be 100644 --- a/Wizard/UI/Controls/ProjectItemControl.Designer.cs +++ b/Wizard/UI/Controls/ProjectItemControl.Designer.cs @@ -1,4 +1,6 @@ -namespace net.r_eg.DllExport.Wizard.UI.Controls +using net.r_eg.DllExport.Wizard.UI.Components; + +namespace net.r_eg.DllExport.Wizard.UI.Controls { partial class ProjectItemControl { @@ -26,9 +28,13 @@ private void InitializeComponent() this.rbPlatformAnyCPU = new System.Windows.Forms.RadioButton(); this.rbPlatformX64 = new System.Windows.Forms.RadioButton(); this.groupCompiler = new System.Windows.Forms.GroupBox(); - this.textBoxCustomILAsm = new System.Windows.Forms.TextBox(); + this.linkInfPatching = new System.Windows.Forms.LinkLabel(); + this.linkSysObjRebase = new System.Windows.Forms.LinkLabel(); + this.chkRebaseSysObj = new System.Windows.Forms.CheckBox(); + this.textBoxCustomILAsm = new net.r_eg.DllExport.Wizard.UI.Components.TextBoxExt(); this.chkIntermediateFiles = new System.Windows.Forms.CheckBox(); this.chkCustomILAsm = new System.Windows.Forms.CheckBox(); + this.chkInfPatching = new System.Windows.Forms.CheckBox(); this.rbPlatformX86 = new System.Windows.Forms.RadioButton(); this.groupPlatform = new System.Windows.Forms.GroupBox(); this.rbPlatformAuto = new System.Windows.Forms.RadioButton(); @@ -50,9 +56,9 @@ private void InitializeComponent() this.chkInstalled = new System.Windows.Forms.CheckBox(); this.menuForInstalled = new System.Windows.Forms.ContextMenuStrip(this.components); this.menuItemLimitPKT = new System.Windows.Forms.ToolStripMenuItem(); - this.panelBottomLine = new System.Windows.Forms.Panel(); this.panelStatus = new System.Windows.Forms.Panel(); this.groupTimeout = new System.Windows.Forms.GroupBox(); + this.linkPeCheck = new System.Windows.Forms.LinkLabel(); this.labelTimeout = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.numOrdinal)).BeginInit(); this.groupCompiler.SuspendLayout(); @@ -69,8 +75,8 @@ private void InitializeComponent() // this.linkOurILAsm.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.linkOurILAsm.AutoSize = true; - this.linkOurILAsm.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.linkOurILAsm.Location = new System.Drawing.Point(291, 55); + this.linkOurILAsm.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkOurILAsm.Location = new System.Drawing.Point(291, 45); this.linkOurILAsm.Name = "linkOurILAsm"; this.linkOurILAsm.Size = new System.Drawing.Size(13, 13); this.linkOurILAsm.TabIndex = 7; @@ -83,7 +89,7 @@ private void InitializeComponent() this.chkOurILAsm.AutoSize = true; this.chkOurILAsm.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.chkOurILAsm.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkOurILAsm.Location = new System.Drawing.Point(10, 59); + this.chkOurILAsm.Location = new System.Drawing.Point(10, 49); this.chkOurILAsm.Name = "chkOurILAsm"; this.chkOurILAsm.Size = new System.Drawing.Size(276, 17); this.chkOurILAsm.TabIndex = 6; @@ -96,7 +102,7 @@ private void InitializeComponent() this.linkExpLib.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.linkExpLib.AutoSize = true; this.linkExpLib.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.linkExpLib.Location = new System.Drawing.Point(247, 35); + this.linkExpLib.Location = new System.Drawing.Point(247, 25); this.linkExpLib.Name = "linkExpLib"; this.linkExpLib.Size = new System.Drawing.Size(13, 13); this.linkExpLib.TabIndex = 5; @@ -108,8 +114,8 @@ private void InitializeComponent() // this.linkOrdinals.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.linkOrdinals.AutoSize = true; - this.linkOrdinals.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.linkOrdinals.Location = new System.Drawing.Point(211, 15); + this.linkOrdinals.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkOrdinals.Location = new System.Drawing.Point(211, 9); this.linkOrdinals.Name = "linkOrdinals"; this.linkOrdinals.Size = new System.Drawing.Size(13, 13); this.linkOrdinals.TabIndex = 4; @@ -122,7 +128,7 @@ private void InitializeComponent() this.chkGenExpLib.AutoSize = true; this.chkGenExpLib.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.chkGenExpLib.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkGenExpLib.Location = new System.Drawing.Point(10, 39); + this.chkGenExpLib.Location = new System.Drawing.Point(10, 29); this.chkGenExpLib.Name = "chkGenExpLib"; this.chkGenExpLib.Size = new System.Drawing.Size(233, 17); this.chkGenExpLib.TabIndex = 3; @@ -132,7 +138,7 @@ private void InitializeComponent() // numOrdinal // this.numOrdinal.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.numOrdinal.Location = new System.Drawing.Point(10, 16); + this.numOrdinal.Location = new System.Drawing.Point(10, 8); this.numOrdinal.Maximum = new decimal(new int[] { 10000000, 0, @@ -147,7 +153,7 @@ private void InitializeComponent() // this.labelOrdinals.AutoSize = true; this.labelOrdinals.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelOrdinals.Location = new System.Drawing.Point(99, 19); + this.labelOrdinals.Location = new System.Drawing.Point(99, 11); this.labelOrdinals.Name = "labelOrdinals"; this.labelOrdinals.Size = new System.Drawing.Size(110, 13); this.labelOrdinals.TabIndex = 1; @@ -158,7 +164,7 @@ private void InitializeComponent() this.rbPlatformAnyCPU.AutoSize = true; this.rbPlatformAnyCPU.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.rbPlatformAnyCPU.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.rbPlatformAnyCPU.Location = new System.Drawing.Point(66, 25); + this.rbPlatformAnyCPU.Location = new System.Drawing.Point(66, 29); this.rbPlatformAnyCPU.Name = "rbPlatformAnyCPU"; this.rbPlatformAnyCPU.Size = new System.Drawing.Size(13, 12); this.rbPlatformAnyCPU.TabIndex = 2; @@ -170,7 +176,7 @@ private void InitializeComponent() this.rbPlatformX64.AutoSize = true; this.rbPlatformX64.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.rbPlatformX64.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.rbPlatformX64.Location = new System.Drawing.Point(34, 25); + this.rbPlatformX64.Location = new System.Drawing.Point(34, 29); this.rbPlatformX64.Name = "rbPlatformX64"; this.rbPlatformX64.Size = new System.Drawing.Size(13, 12); this.rbPlatformX64.TabIndex = 1; @@ -179,6 +185,9 @@ private void InitializeComponent() // // groupCompiler // + this.groupCompiler.Controls.Add(this.linkInfPatching); + this.groupCompiler.Controls.Add(this.linkSysObjRebase); + this.groupCompiler.Controls.Add(this.chkRebaseSysObj); this.groupCompiler.Controls.Add(this.textBoxCustomILAsm); this.groupCompiler.Controls.Add(this.chkIntermediateFiles); this.groupCompiler.Controls.Add(this.chkCustomILAsm); @@ -189,20 +198,58 @@ private void InitializeComponent() this.groupCompiler.Controls.Add(this.chkGenExpLib); this.groupCompiler.Controls.Add(this.numOrdinal); this.groupCompiler.Controls.Add(this.labelOrdinals); + this.groupCompiler.Controls.Add(this.chkInfPatching); this.groupCompiler.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.groupCompiler.Location = new System.Drawing.Point(130, 82); this.groupCompiler.Name = "groupCompiler"; - this.groupCompiler.Size = new System.Drawing.Size(313, 120); + this.groupCompiler.Size = new System.Drawing.Size(313, 149); this.groupCompiler.TabIndex = 9; this.groupCompiler.TabStop = false; - this.groupCompiler.Text = "Compiler settings"; + // + // linkInfPatching + // + this.linkInfPatching.AutoSize = true; + this.linkInfPatching.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkInfPatching.Location = new System.Drawing.Point(221, 130); + this.linkInfPatching.Name = "linkInfPatching"; + this.linkInfPatching.Size = new System.Drawing.Size(13, 13); + this.linkInfPatching.TabIndex = 15; + this.linkInfPatching.TabStop = true; + this.linkInfPatching.Text = "?"; + this.linkInfPatching.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkInfPatching_LinkClicked); + // + // linkSysObjRebase + // + this.linkSysObjRebase.AutoSize = true; + this.linkSysObjRebase.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkSysObjRebase.Location = new System.Drawing.Point(287, 107); + this.linkSysObjRebase.Name = "linkSysObjRebase"; + this.linkSysObjRebase.Size = new System.Drawing.Size(13, 13); + this.linkSysObjRebase.TabIndex = 13; + this.linkSysObjRebase.TabStop = true; + this.linkSysObjRebase.Text = "?"; + this.linkSysObjRebase.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkSysObjRebase_LinkClicked); + // + // chkRebaseSysObj + // + this.chkRebaseSysObj.AutoSize = true; + this.chkRebaseSysObj.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkRebaseSysObj.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.chkRebaseSysObj.Location = new System.Drawing.Point(10, 109); + this.chkRebaseSysObj.Name = "chkRebaseSysObj"; + this.chkRebaseSysObj.Size = new System.Drawing.Size(263, 17); + this.chkRebaseSysObj.TabIndex = 12; + this.chkRebaseSysObj.Text = "Rebase System Object: System.Runtime > mscorlib"; + this.chkRebaseSysObj.UseVisualStyleBackColor = true; // // textBoxCustomILAsm // + this.textBoxCustomILAsm.BackgroundCaption = null; + this.textBoxCustomILAsm.BackgroundCaptionAlpha = 60; this.textBoxCustomILAsm.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.textBoxCustomILAsm.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.textBoxCustomILAsm.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.textBoxCustomILAsm.ForeColor = System.Drawing.Color.DarkGray; - this.textBoxCustomILAsm.Location = new System.Drawing.Point(103, 77); + this.textBoxCustomILAsm.Location = new System.Drawing.Point(103, 67); this.textBoxCustomILAsm.Name = "textBoxCustomILAsm"; this.textBoxCustomILAsm.Size = new System.Drawing.Size(204, 20); this.textBoxCustomILAsm.TabIndex = 9; @@ -212,7 +259,7 @@ private void InitializeComponent() this.chkIntermediateFiles.AutoSize = true; this.chkIntermediateFiles.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.chkIntermediateFiles.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkIntermediateFiles.Location = new System.Drawing.Point(10, 99); + this.chkIntermediateFiles.Location = new System.Drawing.Point(10, 89); this.chkIntermediateFiles.Name = "chkIntermediateFiles"; this.chkIntermediateFiles.Size = new System.Drawing.Size(251, 17); this.chkIntermediateFiles.TabIndex = 11; @@ -224,7 +271,7 @@ private void InitializeComponent() this.chkCustomILAsm.AutoSize = true; this.chkCustomILAsm.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.chkCustomILAsm.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkCustomILAsm.Location = new System.Drawing.Point(10, 79); + this.chkCustomILAsm.Location = new System.Drawing.Point(10, 69); this.chkCustomILAsm.Name = "chkCustomILAsm"; this.chkCustomILAsm.Size = new System.Drawing.Size(93, 17); this.chkCustomILAsm.TabIndex = 8; @@ -232,12 +279,24 @@ private void InitializeComponent() this.chkCustomILAsm.UseVisualStyleBackColor = true; this.chkCustomILAsm.CheckedChanged += new System.EventHandler(this.chkCustomILAsm_CheckedChanged); // + // chkInfPatching + // + this.chkInfPatching.AutoSize = true; + this.chkInfPatching.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkInfPatching.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.chkInfPatching.Location = new System.Drawing.Point(10, 129); + this.chkInfPatching.Name = "chkInfPatching"; + this.chkInfPatching.Size = new System.Drawing.Size(207, 17); + this.chkInfPatching.TabIndex = 14; + this.chkInfPatching.Text = "Single + Double Inf/-Inf token patching"; + this.chkInfPatching.UseVisualStyleBackColor = true; + // // rbPlatformX86 // this.rbPlatformX86.AutoSize = true; this.rbPlatformX86.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.rbPlatformX86.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.rbPlatformX86.Location = new System.Drawing.Point(7, 25); + this.rbPlatformX86.Location = new System.Drawing.Point(7, 29); this.rbPlatformX86.Name = "rbPlatformX86"; this.rbPlatformX86.Size = new System.Drawing.Size(13, 12); this.rbPlatformX86.TabIndex = 0; @@ -253,7 +312,7 @@ private void InitializeComponent() this.groupPlatform.Controls.Add(this.labelPlatform); this.groupPlatform.Location = new System.Drawing.Point(5, 82); this.groupPlatform.Name = "groupPlatform"; - this.groupPlatform.Size = new System.Drawing.Size(122, 43); + this.groupPlatform.Size = new System.Drawing.Size(122, 49); this.groupPlatform.TabIndex = 8; this.groupPlatform.TabStop = false; // @@ -263,7 +322,7 @@ private void InitializeComponent() this.rbPlatformAuto.Checked = true; this.rbPlatformAuto.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.rbPlatformAuto.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.rbPlatformAuto.Location = new System.Drawing.Point(99, 25); + this.rbPlatformAuto.Location = new System.Drawing.Point(99, 29); this.rbPlatformAuto.Name = "rbPlatformAuto"; this.rbPlatformAuto.Size = new System.Drawing.Size(13, 12); this.rbPlatformAuto.TabIndex = 6; @@ -276,7 +335,7 @@ private void InitializeComponent() this.labelPlatform.AutoSize = true; this.labelPlatform.BackColor = System.Drawing.Color.Transparent; this.labelPlatform.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelPlatform.Location = new System.Drawing.Point(1, 9); + this.labelPlatform.Location = new System.Drawing.Point(1, 11); this.labelPlatform.Name = "labelPlatform"; this.labelPlatform.Size = new System.Drawing.Size(116, 12); this.labelPlatform.TabIndex = 3; @@ -364,14 +423,14 @@ private void InitializeComponent() 0, 0, 0}); - this.numTimeout.Location = new System.Drawing.Point(5, 13); + this.numTimeout.Location = new System.Drawing.Point(8, 76); this.numTimeout.Maximum = new decimal(new int[] { 10000000, 0, 0, 0}); this.numTimeout.Name = "numTimeout"; - this.numTimeout.Size = new System.Drawing.Size(64, 20); + this.numTimeout.Size = new System.Drawing.Size(76, 20); this.numTimeout.TabIndex = 10; this.numTimeout.ThousandsSeparator = true; this.toolTip.SetToolTip(this.numTimeout, "Timeout in Milliseconds"); @@ -386,7 +445,7 @@ private void InitializeComponent() this.chkPECheckIl.AutoSize = true; this.chkPECheckIl.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.chkPECheckIl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkPECheckIl.Location = new System.Drawing.Point(5, 61); + this.chkPECheckIl.Location = new System.Drawing.Point(5, 31); this.chkPECheckIl.Name = "chkPECheckIl"; this.chkPECheckIl.Size = new System.Drawing.Size(110, 17); this.chkPECheckIl.TabIndex = 13; @@ -400,7 +459,7 @@ private void InitializeComponent() this.chkPECheck1to1.AutoSize = true; this.chkPECheck1to1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.chkPECheck1to1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkPECheck1to1.Location = new System.Drawing.Point(5, 40); + this.chkPECheck1to1.Location = new System.Drawing.Point(5, 11); this.chkPECheck1to1.Name = "chkPECheck1to1"; this.chkPECheck1to1.Size = new System.Drawing.Size(89, 17); this.chkPECheck1to1.TabIndex = 12; @@ -447,7 +506,7 @@ private void InitializeComponent() // textBoxProjectPath // this.textBoxProjectPath.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBoxProjectPath.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.textBoxProjectPath.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.textBoxProjectPath.Location = new System.Drawing.Point(73, 21); this.textBoxProjectPath.Name = "textBoxProjectPath"; this.textBoxProjectPath.ReadOnly = true; @@ -485,60 +544,63 @@ private void InitializeComponent() this.menuItemLimitPKT.Text = "Limitations if not used PublicKeyToken"; this.menuItemLimitPKT.Click += new System.EventHandler(this.menuItemLimitPKT_Click); // - // panelBottomLine - // - this.panelBottomLine.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.panelBottomLine.BackColor = System.Drawing.Color.Gray; - this.panelBottomLine.Location = new System.Drawing.Point(6, 202); - this.panelBottomLine.Margin = new System.Windows.Forms.Padding(0); - this.panelBottomLine.Name = "panelBottomLine"; - this.panelBottomLine.Size = new System.Drawing.Size(438, 2); - this.panelBottomLine.TabIndex = 12; - // // panelStatus // this.panelStatus.BackColor = System.Drawing.Color.DarkRed; this.panelStatus.Location = new System.Drawing.Point(0, 2); this.panelStatus.Name = "panelStatus"; - this.panelStatus.Size = new System.Drawing.Size(4, 200); + this.panelStatus.Size = new System.Drawing.Size(4, 228); this.panelStatus.TabIndex = 0; // // groupTimeout // + this.groupTimeout.Controls.Add(this.linkPeCheck); this.groupTimeout.Controls.Add(this.chkPECheckIl); this.groupTimeout.Controls.Add(this.chkPECheck1to1); this.groupTimeout.Controls.Add(this.labelTimeout); this.groupTimeout.Controls.Add(this.numTimeout); - this.groupTimeout.Location = new System.Drawing.Point(5, 120); + this.groupTimeout.Location = new System.Drawing.Point(5, 126); this.groupTimeout.Name = "groupTimeout"; - this.groupTimeout.Size = new System.Drawing.Size(122, 82); + this.groupTimeout.Size = new System.Drawing.Size(122, 105); this.groupTimeout.TabIndex = 9; this.groupTimeout.TabStop = false; // + // linkPeCheck + // + this.linkPeCheck.AutoSize = true; + this.linkPeCheck.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkPeCheck.Location = new System.Drawing.Point(97, 16); + this.linkPeCheck.Name = "linkPeCheck"; + this.linkPeCheck.Size = new System.Drawing.Size(13, 13); + this.linkPeCheck.TabIndex = 16; + this.linkPeCheck.TabStop = true; + this.linkPeCheck.Text = "?"; + this.linkPeCheck.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkPeCheck_LinkClicked); + // // labelTimeout // this.labelTimeout.AutoSize = true; this.labelTimeout.BackColor = System.Drawing.Color.Transparent; this.labelTimeout.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelTimeout.Location = new System.Drawing.Point(71, 16); + this.labelTimeout.Location = new System.Drawing.Point(5, 56); this.labelTimeout.Name = "labelTimeout"; - this.labelTimeout.Size = new System.Drawing.Size(45, 13); + this.labelTimeout.Size = new System.Drawing.Size(105, 13); this.labelTimeout.TabIndex = 11; - this.labelTimeout.Text = "Timeout"; + this.labelTimeout.Text = "Processing Limit (ms)"; // // ProjectItemControl // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.panelBottomLine); this.Controls.Add(this.groupPlatform); this.Controls.Add(this.groupCompiler); this.Controls.Add(this.groupTimeout); this.Controls.Add(this.panelStatus); this.Controls.Add(this.gbProject); this.Controls.Add(this.groupNS); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.Name = "ProjectItemControl"; - this.Size = new System.Drawing.Size(444, 204); + this.Size = new System.Drawing.Size(444, 231); ((System.ComponentModel.ISupportInitialize)(this.numOrdinal)).EndInit(); this.groupCompiler.ResumeLayout(false); this.groupCompiler.PerformLayout(); @@ -579,12 +641,11 @@ private void InitializeComponent() private System.Windows.Forms.GroupBox gbProject; private System.Windows.Forms.Button btnBrowse; private System.Windows.Forms.CheckBox chkInstalled; - private System.Windows.Forms.Panel panelBottomLine; private System.Windows.Forms.TextBox textBoxIdent; private System.Windows.Forms.Panel panelStatus; private System.Windows.Forms.CheckBox chkIntermediateFiles; private System.Windows.Forms.NumericUpDown numTimeout; - private System.Windows.Forms.TextBox textBoxCustomILAsm; + private TextBoxExt textBoxCustomILAsm; private System.Windows.Forms.CheckBox chkCustomILAsm; private System.Windows.Forms.GroupBox groupTimeout; private System.Windows.Forms.Label labelBackgroundNS; @@ -596,5 +657,10 @@ private void InitializeComponent() private System.Windows.Forms.ContextMenuStrip menuForInstalled; private System.Windows.Forms.ToolStripMenuItem menuItemLimitPKT; private System.Windows.Forms.RadioButton rbPlatformAuto; + private System.Windows.Forms.LinkLabel linkSysObjRebase; + private System.Windows.Forms.CheckBox chkRebaseSysObj; + private System.Windows.Forms.CheckBox chkInfPatching; + private System.Windows.Forms.LinkLabel linkInfPatching; + private System.Windows.Forms.LinkLabel linkPeCheck; } } diff --git a/Wizard/UI/Controls/ProjectItemControl.cs b/Wizard/UI/Controls/ProjectItemControl.cs index cc42757..b961a7a 100644 --- a/Wizard/UI/Controls/ProjectItemControl.cs +++ b/Wizard/UI/Controls/ProjectItemControl.cs @@ -34,8 +34,6 @@ namespace net.r_eg.DllExport.Wizard.UI.Controls { internal sealed partial class ProjectItemControl: UserControl, IDisposable { - private readonly int EX_HEIGHT; - public IProject Project { get; @@ -116,15 +114,18 @@ public CompilerCfg Compiler genExpLib = chkGenExpLib.Checked, ourILAsm = chkOurILAsm.Checked, customILAsm = chkCustomILAsm.Checked ? textBoxCustomILAsm.Text : null, + rSysObj = chkRebaseSysObj.Checked, intermediateFiles = chkIntermediateFiles.Checked, timeout = (int)numTimeout.Value, - peCheck = GetPeCheckType() + peCheck = GetPeCheckType(), + patches = GetPatchesType(), }; set { numOrdinal.Value = value.ordinalsBase; chkGenExpLib.Checked = value.genExpLib; chkOurILAsm.Checked = value.ourILAsm; + chkRebaseSysObj.Checked = value.rSysObj; numTimeout.Value = value.timeout; if(String.IsNullOrWhiteSpace(value.customILAsm)) { @@ -138,6 +139,7 @@ public CompilerCfg Compiler chkIntermediateFiles.Checked = value.intermediateFiles; SetPeCheckType(value.peCheck); + SetPatchesType(value.patches); } } @@ -184,12 +186,12 @@ public ProjectItemControl(IProject project) Project = project ?? throw new ArgumentNullException(nameof(project)); InitializeComponent(); - EX_HEIGHT = Height; textBoxIdent.BackColor = SystemColors.Control; textBoxIdent.ForeColor = Color.DimGray; InstalledStatus(false); + UpdateRebaseChk(); } private Platform GetPlatform() @@ -258,18 +260,34 @@ private void SetPeCheckType(PeCheckType type) chkPECheckIl.Checked = (type & PeCheckType.PeIl) == PeCheckType.PeIl; } + private PatchesType GetPatchesType() + { + PatchesType patches = PatchesType.None; + + if(chkInfPatching.Checked) { + patches |= PatchesType.InfToken; + } + + return patches; + } + + private void SetPatchesType(PatchesType type) + { + chkInfPatching.Checked = (type & PatchesType.InfToken) == PatchesType.InfToken; + } + private void InstalledStatus(bool status) { if(status) { panelStatus.BackColor = Color.FromArgb(111, 145, 6); - Height = EX_HEIGHT; } else { panelStatus.BackColor = Color.FromArgb(168, 47, 17); - Height = gbProject.Location.Y + gbProject.Height; } } + private void UpdateRebaseChk() => chkRebaseSysObj.Enabled = chkOurILAsm.Checked || chkCustomILAsm.Checked; + private void btnBrowse_Click(object sender, EventArgs e) { var path = Project.XProject?.ProjectItem.project.fullPath; @@ -300,20 +318,17 @@ private void numOrdinal_KeyDown(object sender, KeyEventArgs e) e.Handled = true; } - private void linkOrdinals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - OpenUrl?.Invoke("https://github.com/3F/DllExport/issues/11#issuecomment-250907940"); - } + private void linkOrdinals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => OpenUrl?.Invoke("https://github.com/3F/DllExport/issues/11#issuecomment-250907940"); - private void linkExpLib_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - OpenUrl?.Invoke("https://github.com/3F/DllExport/issues/9#issuecomment-246189220"); - } + private void linkExpLib_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => OpenUrl?.Invoke("https://github.com/3F/DllExport/issues/9#issuecomment-246189220"); - private void linkOurILAsm_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - OpenUrl?.Invoke("https://github.com/3F/DllExport/issues/17"); - } + private void linkOurILAsm_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => OpenUrl?.Invoke("https://github.com/3F/DllExport/issues/17"); + + private void linkSysObjRebase_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => OpenUrl?.Invoke("https://github.com/3F/DllExport/issues/125#issuecomment-561245575"); + + private void LinkInfPatching_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => OpenUrl?.Invoke("https://github.com/3F/DllExport/issues/128"); + + private void LinkPeCheck_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => OpenUrl?.Invoke("https://github.com/3F/DllExport/issues/55"); private void comboNS_TextUpdate(object sender, EventArgs e) { @@ -343,6 +358,8 @@ private void chkCustomILAsm_CheckedChanged(object sender, EventArgs e) else { textBoxCustomILAsm.ForeColor = Color.DarkGray; } + + UpdateRebaseChk(); } private void chkOurILAsm_CheckedChanged(object sender, EventArgs e) @@ -350,6 +367,8 @@ private void chkOurILAsm_CheckedChanged(object sender, EventArgs e) if(chkOurILAsm.Checked) { chkCustomILAsm.Checked = false; } + + UpdateRebaseChk(); } private void menuItemLimitPKT_Click(object sender, EventArgs e) @@ -363,7 +382,6 @@ private void menuItemLimitPKT_Click(object sender, EventArgs e) #region disposing - /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { diff --git a/Wizard/UI/Controls/ProjectItemsControl.Designer.cs b/Wizard/UI/Controls/ProjectItemsControl.Designer.cs index d74ef6b..e7c5efb 100644 --- a/Wizard/UI/Controls/ProjectItemsControl.Designer.cs +++ b/Wizard/UI/Controls/ProjectItemsControl.Designer.cs @@ -20,7 +20,6 @@ private void InitializeComponent() // // panelMain // - this.panelMain.AutoScroll = true; this.panelMain.Dock = System.Windows.Forms.DockStyle.Fill; this.panelMain.Location = new System.Drawing.Point(0, 0); this.panelMain.Margin = new System.Windows.Forms.Padding(0); @@ -33,6 +32,7 @@ private void InitializeComponent() this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.panelMain); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.Name = "ProjectItemsControl"; this.Size = new System.Drawing.Size(73, 43); this.ResumeLayout(false); diff --git a/Wizard/UI/Controls/ProjectItemsControl.cs b/Wizard/UI/Controls/ProjectItemsControl.cs index 05b2fde..a06bb69 100644 --- a/Wizard/UI/Controls/ProjectItemsControl.cs +++ b/Wizard/UI/Controls/ProjectItemsControl.cs @@ -27,17 +27,15 @@ using System.ComponentModel; using System.Linq; using System.Windows.Forms; +using net.r_eg.MvsSln.Core; namespace net.r_eg.DllExport.Wizard.UI.Controls { internal sealed partial class ProjectItemsControl: UserControl, IDisposable { - private List items = new List(); + private readonly List items = new List(); - /// - /// When the size of rendered items has been changed. - /// - public event EventHandler RenderedItemsSizeChanged = delegate(object sender, EventArgs e) { }; + private readonly Lazy empty; private sealed class UProject { @@ -55,61 +53,77 @@ private sealed class UProject /// Includes non-rendered items. /// public IEnumerable Data - { - get => items.Select(i => ConfigureProject(i.project, i.control)); - } + => items.Select(i => ConfigureProject(i.project, i.control)); /// /// Count of rendered items. /// - public int CountRendered - { - get => RenderedItems.Count(); - } - - public int MaxItemHeight - { - get => GetMaxItemsHeight(1); - } - - public int MaxItemsHeight - { - get => GetMaxItemsHeight(CountRendered); - } + public int CountRendered => RenderedItems.Count(); /// /// Function of the browse button. /// [Browsable(false)] - public Action Browse - { - get; - set; - } + public Action Browse { get; set; } /// /// Function to validate namespace after update, or null if not used. /// [Browsable(false)] - public Func NamespaceValidate - { - get; - set; - } + public Func NamespaceValidate { get; set; } /// /// Function to open url. /// [Browsable(false)] - public Action OpenUrl + public Action OpenUrl { get; set; } + + private IEnumerable RenderedItems => items.Where(i => i.rendered); + + /// + /// Sets a single IProject for panel. + /// + /// + public void Set(IProject project) { - get; - set; + Reset(false); + if(project == null) + { + UseStub(); + } + else + { + Add(project); + } + } + + /// + /// Reset items. + /// + /// true value allows the real disposing for each control; false only avoids gui rendering. + public void Reset(bool disposing) + { + panelMain.Controls.Clear(); + + if(!disposing) { + items.ForEach(i => i.rendered = false); + return; + } + + items.ForEach(i => i.control.Dispose()); + items.Clear(); } - private IEnumerable RenderedItems + public ProjectItemsControl() { - get => items.Where(i => i.rendered); + InitializeComponent(); + + empty = new Lazy(() => + { + var item = new ProjectItemControl(new Project(new XProject())); + ConfigureControl(item, item.Project); + return item; + }); } /// @@ -117,22 +131,19 @@ private IEnumerable RenderedItems /// Will also add an item into collection if it's still not presented there. /// /// - public void Add(IProject project) + private void Add(IProject project) { if(project == null) { throw new ArgumentNullException(nameof(project)); } - var prj = items.Where(i => i.control.Project.DxpIdent == project.DxpIdent) - .FirstOrDefault(); + var prj = items.FirstOrDefault(i => i.control.Project.DxpIdent == project.DxpIdent); var control = prj?.control ?? new ProjectItemControl(project); control.Order = CountRendered; - control.Top = MaxItemsHeight; if(prj?.control == null) { - control.SizeChanged += ControlSizeChanged; ConfigureControl(control, project); items.Add(new UProject() { @@ -147,39 +158,17 @@ public void Add(IProject project) panelMain.Controls.Add(control); } - /// - /// Reset items. - /// - /// true value allows the real disposing for each control; false only avoids gui rendering. - public void Reset(bool disposing) - { - panelMain.Controls.Clear(); + private void UseStub() => panelMain.Controls.Add(empty.Value); - if(!disposing) { - items.ForEach(i => i.rendered = false); + private void ConfigureControl(ProjectItemControl control, IProject project) + { + if(project?.ProjectPath == null || project.Config == null) + { + control.Identifier = Project.DXP_INVALID; + control.ProjectPath = "<<<>>>"; return; } - items.ForEach(i => i.control.Dispose()); - items.Clear(); - } - - public int GetMaxItemsHeight(int count) - { - return (CountRendered < 1) ? - 0 : RenderedItems - .OrderByDescending(i => i.control.Height) - .Take(count) - .Sum(i => i.control.Height); - } - - public ProjectItemsControl() - { - InitializeComponent(); - } - - private void ConfigureControl(ProjectItemControl control, IProject project) - { control.Installed = project.Installed; control.ProjectPath = project.ProjectPath; control.Identifier = project.DxpIdent; @@ -217,22 +206,8 @@ private IProject ConfigureProject(IProject project, ProjectItemControl control) return project; } - private void ControlSizeChanged(object sender, EventArgs e) - { - if(sender is ProjectItemControl control) - { - int xprev = control.Top + control.Height; - foreach(var item in RenderedItems.Skip(control.Order + 1)) { - item.control.Top = xprev; - xprev += item.control.Height; - } - } - RenderedItemsSizeChanged(this, EventArgs.Empty); - } - #region disposing - /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { @@ -240,6 +215,8 @@ protected override void Dispose(bool disposing) } Reset(true); + empty.Value?.Dispose(); + base.Dispose(disposing); } diff --git a/Wizard/UI/Extensions/ControlExtension.cs b/Wizard/UI/Extensions/ControlExtension.cs index 5dfdd3d..ee5f5de 100644 --- a/Wizard/UI/Extensions/ControlExtension.cs +++ b/Wizard/UI/Extensions/ControlExtension.cs @@ -23,29 +23,27 @@ */ using System; -using System.Runtime.InteropServices; using System.Windows.Forms; +using net.r_eg.Conari.Accessors.WinAPI; namespace net.r_eg.DllExport.Wizard.UI.Extensions { public static class ControlExtension { - internal static class NativeMethods - { - public const uint WM_SETREDRAW = 0x000B; - - [DllImport("user32.dll")] - public static extern IntPtr SendMessage(IntPtr hWnd, uint wMsg, IntPtr wParam, IntPtr lParam); - } + internal const uint WM_SETREDRAW = 0x000B; public static void SuspendDraw(this Control ctrl) { - NativeMethods.SendMessage(ctrl.Handle, NativeMethods.WM_SETREDRAW, new IntPtr(0), new IntPtr(0)); + using(dynamic l = new User32()) { + l.SendMessageW(ctrl.Handle, WM_SETREDRAW, 0, 0); + } } public static void ResumeDraw(this Control ctrl) { - NativeMethods.SendMessage(ctrl.Handle, NativeMethods.WM_SETREDRAW, new IntPtr(1), new IntPtr(0)); + using(dynamic l = new User32()) { + l.SendMessageW(ctrl.Handle, WM_SETREDRAW, 1, 0); + } ctrl.Refresh(); } @@ -80,13 +78,51 @@ public static void Dispose(this Control.ControlCollection controls) /// /// public static void UIAction(this Control control, Action method) + => UIAction(control, (x) => method()); + + /// + /// Executes an Action through BeginInvoke if it's required. + /// + /// + /// + public static void UIAction(this Control control, Action method) + => UIAction(control, (x) => method(x)); + + /// + /// Executes an Action through BeginInvoke if it's required. + /// + /// + /// + /// + public static void UIAction(this T ctrl, Action method) where T: Control { - if(control.InvokeRequired) { - control.BeginInvoke((MethodInvoker)delegate { method(); }); + if(ctrl.InvokeRequired) { + ctrl.BeginInvoke((MethodInvoker)delegate { method(ctrl); }); } else { - method(); + method(ctrl); + } + } + + internal static void SetData(this TextBox control, string text, bool newline = true) + { + if(newline) { + text += Environment.NewLine; } + + control.SelectionStart = 0; + control.Text = text; + } + + internal static void AppendData(this TextBox control, string text, bool newline = true) + { + if(newline) { + text += Environment.NewLine; + } + control.AppendText(text); + + control.SelectionStart = control.Text.Length; + control.ScrollToCaret(); } } } diff --git a/NSBin/Log/Message.cs b/Wizard/UI/IConfFormater.cs similarity index 57% rename from NSBin/Log/Message.cs rename to Wizard/UI/IConfFormater.cs index 92d0a33..5b511fc 100644 --- a/NSBin/Log/Message.cs +++ b/Wizard/UI/IConfFormater.cs @@ -22,50 +22,10 @@ * THE SOFTWARE. */ -using System; - -namespace net.r_eg.Conari.Log +namespace net.r_eg.DllExport.Wizard.UI { - [Serializable] - public class Message: EventArgs + internal interface IConfFormater { - public DateTime stamp; - - public string content; - - public Exception exception; - - public object data; - - public Level type; - - public enum Level - { - Trace, - Debug, - Info, - Warn, - Error, - Fatal - } - - public Message(string msg, Level type = Level.Debug) - { - content = msg; - this.type = type; - stamp = DateTime.Now; - } - - public Message(string msg, Exception ex, Level type = Level.Error) - : this(msg, type) - { - exception = ex; - } - - public Message(string msg, object data, Level type = Level.Debug) - : this(msg, type) - { - this.data = data; - } + string Parse(IProject project); } } diff --git a/Wizard/UI/IconResources.Designer.cs b/Wizard/UI/IconResources.Designer.cs new file mode 100644 index 0000000..e19f959 --- /dev/null +++ b/Wizard/UI/IconResources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace net.r_eg.DllExport.Wizard.UI { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class IconResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal IconResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("net.r_eg.DllExport.Wizard.UI.IconResources", typeof(IconResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CPP_ProjectSENode_16x_ { + get { + object obj = ResourceManager.GetObject("CPP_ProjectSENode_16x_", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CS_ProjectSENode_16x { + get { + object obj = ResourceManager.GetObject("CS_ProjectSENode_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap FS_ProjectSENode_16x { + get { + object obj = ResourceManager.GetObject("FS_ProjectSENode_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap VB_ProjectSENode_16x { + get { + object obj = ResourceManager.GetObject("VB_ProjectSENode_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Wizard/UI/IconResources.resx b/Wizard/UI/IconResources.resx new file mode 100644 index 0000000..e814ea4 --- /dev/null +++ b/Wizard/UI/IconResources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\Resources\vsico\CPP_ProjectSENode_16x_.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\vsico\CS_ProjectSENode_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\vsico\FS_ProjectSENode_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\vsico\VB_ProjectSENode_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Wizard/UI/Icons.cs b/Wizard/UI/Icons.cs new file mode 100644 index 0000000..94054af --- /dev/null +++ b/Wizard/UI/Icons.cs @@ -0,0 +1,105 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2020 Denis Kuzmin < x-3F@outlook.com > GitHub/3F + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. +*/ + +using System; +using System.Collections.Concurrent; +using System.Drawing; +using net.r_eg.MvsSln.Core; +using net.r_eg.MvsSln.Extensions; + +namespace net.r_eg.DllExport.Wizard.UI +{ + internal sealed class Icons: IDisposable + { + private readonly Font txtFont = new Font("Microsoft Sans Serif", 6.5F, FontStyle.Regular, GraphicsUnit.Point, 0); + private readonly SolidBrush txtBrush = new SolidBrush(Color.FromArgb(255, Color.Black)); + + private readonly ConcurrentDictionary raw = new ConcurrentDictionary(); + + public Bitmap GetIcon(ProjectType type) + { + switch(type) + { + case ProjectType.Cs: + case ProjectType.CsSdk: return IconResources.CS_ProjectSENode_16x; + + case ProjectType.Vc: return IconResources.CPP_ProjectSENode_16x_; + + case ProjectType.Vb: + case ProjectType.VbSdk: return IconResources.VB_ProjectSENode_16x; + + case ProjectType.Fs: + case ProjectType.FsSdk: return IconResources.FS_ProjectSENode_16x; + } + + return GetTextIcon(type); + } + + public Bitmap GetTextIcon(ProjectType type) + { + if(!raw.ContainsKey(type)) + { + raw[type] = DrawString( + (type == ProjectType.Unknown) ? "" : type.ToString(), + new Bitmap(32, 16) + ); + } + return raw[type]; + } + + private Bitmap DrawString(string str, Bitmap bmp) + { + using(var g = Graphics.FromImage(bmp ?? throw new ArgumentNullException(nameof(bmp)))) + { + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; + g.DrawString(str, txtFont, txtBrush, 0, 0); + } + return bmp; + } + + #region IDisposable + + private bool disposed = false; + + void Dispose(bool _) + { + if(!disposed) + { + raw?.ForEach(b => b.Value?.Dispose()); + + txtFont?.Dispose(); + txtBrush?.Dispose(); + + disposed = true; + } + } + + public void Dispose() + { + Dispose(true); + } + + #endregion + } +} diff --git a/Wizard/UI/InfoForm.Designer.cs b/Wizard/UI/InfoForm.Designer.cs deleted file mode 100644 index 64992b7..0000000 --- a/Wizard/UI/InfoForm.Designer.cs +++ /dev/null @@ -1,197 +0,0 @@ -namespace net.r_eg.DllExport.Wizard.UI -{ - partial class InfoForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if(disposing && (components != null)) { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InfoForm)); - this.linkLocalDxp = new System.Windows.Forms.LinkLabel(); - this.linkRemoteDxp = new System.Windows.Forms.LinkLabel(); - this.panelInfo = new System.Windows.Forms.Panel(); - this.textBoxInfo = new System.Windows.Forms.TextBox(); - this.picVideo = new System.Windows.Forms.PictureBox(); - this.panelWarn = new System.Windows.Forms.Panel(); - this.labelWarn = new System.Windows.Forms.Label(); - this.linkManagerWiki = new System.Windows.Forms.LinkLabel(); - this.linkQuickStart = new System.Windows.Forms.LinkLabel(); - this.panelInfo.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picVideo)).BeginInit(); - this.panelWarn.SuspendLayout(); - this.SuspendLayout(); - // - // linkLocalDxp - // - this.linkLocalDxp.AutoSize = true; - this.linkLocalDxp.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.linkLocalDxp.LinkColor = System.Drawing.Color.Purple; - this.linkLocalDxp.Location = new System.Drawing.Point(41, 200); - this.linkLocalDxp.Name = "linkLocalDxp"; - this.linkLocalDxp.Size = new System.Drawing.Size(157, 13); - this.linkLocalDxp.TabIndex = 2; - this.linkLocalDxp.TabStop = true; - this.linkLocalDxp.Text = "Local version from this package"; - this.linkLocalDxp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLocalDxp_LinkClicked); - // - // linkRemoteDxp - // - this.linkRemoteDxp.AutoSize = true; - this.linkRemoteDxp.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.linkRemoteDxp.Location = new System.Drawing.Point(41, 224); - this.linkRemoteDxp.Name = "linkRemoteDxp"; - this.linkRemoteDxp.Size = new System.Drawing.Size(174, 13); - this.linkRemoteDxp.TabIndex = 3; - this.linkRemoteDxp.TabStop = true; - this.linkRemoteDxp.Text = "Latest version from GitHub releases"; - this.linkRemoteDxp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkRemoteDxp_LinkClicked); - // - // panelInfo - // - this.panelInfo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(229)))), ((int)(((byte)(195)))), ((int)(((byte)(101))))); - this.panelInfo.Controls.Add(this.textBoxInfo); - this.panelInfo.Location = new System.Drawing.Point(2, 44); - this.panelInfo.Name = "panelInfo"; - this.panelInfo.Padding = new System.Windows.Forms.Padding(1); - this.panelInfo.Size = new System.Drawing.Size(449, 73); - this.panelInfo.TabIndex = 5; - // - // textBoxInfo - // - this.textBoxInfo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(253)))), ((int)(((byte)(244)))), ((int)(((byte)(191))))); - this.textBoxInfo.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBoxInfo.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBoxInfo.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBoxInfo.Location = new System.Drawing.Point(1, 1); - this.textBoxInfo.Multiline = true; - this.textBoxInfo.Name = "textBoxInfo"; - this.textBoxInfo.ReadOnly = true; - this.textBoxInfo.Size = new System.Drawing.Size(447, 71); - this.textBoxInfo.TabIndex = 1; - this.textBoxInfo.Text = "\r\n Just one step via DllExport manager:\r\n - Find it inside this solution director" + - "y. OR receive latest version from other place.\r\n \r\n [!] You need to UNINSTALL th" + - "is package before continue."; - // - // picVideo - // - this.picVideo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.picVideo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.picVideo.Cursor = System.Windows.Forms.Cursors.Hand; - this.picVideo.Image = ((System.Drawing.Image)(resources.GetObject("picVideo.Image"))); - this.picVideo.Location = new System.Drawing.Point(223, 138); - this.picVideo.Name = "picVideo"; - this.picVideo.Size = new System.Drawing.Size(228, 129); - this.picVideo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.picVideo.TabIndex = 6; - this.picVideo.TabStop = false; - this.picVideo.Click += new System.EventHandler(this.picVideo_Click); - // - // panelWarn - // - this.panelWarn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(9)))), ((int)(((byte)(9))))); - this.panelWarn.Controls.Add(this.labelWarn); - this.panelWarn.Location = new System.Drawing.Point(2, 15); - this.panelWarn.Name = "panelWarn"; - this.panelWarn.Padding = new System.Windows.Forms.Padding(1); - this.panelWarn.Size = new System.Drawing.Size(449, 17); - this.panelWarn.TabIndex = 7; - // - // labelWarn - // - this.labelWarn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(228)))), ((int)(((byte)(173)))), ((int)(((byte)(173))))); - this.labelWarn.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelWarn.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelWarn.ForeColor = System.Drawing.Color.White; - this.labelWarn.Location = new System.Drawing.Point(1, 1); - this.labelWarn.Name = "labelWarn"; - this.labelWarn.Size = new System.Drawing.Size(447, 15); - this.labelWarn.TabIndex = 0; - this.labelWarn.Text = "Please do NOT Install this! DEPRECATED and valid only for old clients!"; - this.labelWarn.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // linkManagerWiki - // - this.linkManagerWiki.AutoSize = true; - this.linkManagerWiki.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.linkManagerWiki.Location = new System.Drawing.Point(3, 175); - this.linkManagerWiki.Name = "linkManagerWiki"; - this.linkManagerWiki.Size = new System.Drawing.Size(120, 13); - this.linkManagerWiki.TabIndex = 8; - this.linkManagerWiki.TabStop = true; - this.linkManagerWiki.Text = "DllExport.bat ( ~ 20 Kb )"; - this.linkManagerWiki.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkManagerWiki_LinkClicked); - // - // linkQuickStart - // - this.linkQuickStart.AutoSize = true; - this.linkQuickStart.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.linkQuickStart.Location = new System.Drawing.Point(3, 127); - this.linkQuickStart.Name = "linkQuickStart"; - this.linkQuickStart.Size = new System.Drawing.Size(58, 13); - this.linkQuickStart.TabIndex = 9; - this.linkQuickStart.TabStop = true; - this.linkQuickStart.Text = "Quick start"; - this.linkQuickStart.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkQuickStart_LinkClicked); - // - // InfoForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(453, 268); - this.Controls.Add(this.linkQuickStart); - this.Controls.Add(this.linkManagerWiki); - this.Controls.Add(this.panelWarn); - this.Controls.Add(this.picVideo); - this.Controls.Add(this.panelInfo); - this.Controls.Add(this.linkRemoteDxp); - this.Controls.Add(this.linkLocalDxp); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "InfoForm"; - this.ShowIcon = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "[!] .NET DllExport doesn\'t support NuGet clients anymore [!]"; - this.TopMost = true; - this.panelInfo.ResumeLayout(false); - this.panelInfo.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picVideo)).EndInit(); - this.panelWarn.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private System.Windows.Forms.LinkLabel linkLocalDxp; - private System.Windows.Forms.LinkLabel linkRemoteDxp; - private System.Windows.Forms.Panel panelInfo; - private System.Windows.Forms.TextBox textBoxInfo; - private System.Windows.Forms.PictureBox picVideo; - private System.Windows.Forms.Panel panelWarn; - private System.Windows.Forms.Label labelWarn; - private System.Windows.Forms.LinkLabel linkManagerWiki; - private System.Windows.Forms.LinkLabel linkQuickStart; - } -} \ No newline at end of file diff --git a/Wizard/UI/InfoForm.cs b/Wizard/UI/InfoForm.cs deleted file mode 100644 index 9fc3830..0000000 --- a/Wizard/UI/InfoForm.cs +++ /dev/null @@ -1,68 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2016-2019 Denis Kuzmin < entry.reg@gmail.com > GitHub/3F - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -*/ - -using System; -using System.Windows.Forms; -using net.r_eg.DllExport.Wizard.Extensions; - -namespace net.r_eg.DllExport.Wizard.UI -{ - internal partial class InfoForm: Form - { - private IExecutor exec; - - public InfoForm(IExecutor exec) - { - this.exec = exec; - InitializeComponent(); - - Load += (object sender, EventArgs e) => { TopMost = false; TopMost = true; }; - } - - private void linkLocalDxp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - exec.Config.SlnDir.OpenUrl(); - } - - private void linkRemoteDxp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - "https://3F.github.io/DllExport/releases/latest/manager/".OpenUrl(); - } - - private void picVideo_Click(object sender, System.EventArgs e) - { - "https://www.youtube.com/watch?v=9bYgywZ9pPE".OpenUrl(); - } - - private void linkManagerWiki_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - "https://github.com/3F/DllExport/wiki/DllExport-Manager".OpenUrl(); - } - - private void linkQuickStart_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - "https://github.com/3F/DllExport/wiki/Quick-start".OpenUrl(); - } - } -} diff --git a/Wizard/UI/InfoForm.resx b/Wizard/UI/InfoForm.resx deleted file mode 100644 index 9d8f2c4..0000000 --- a/Wizard/UI/InfoForm.resx +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - /9j/4AAQSkZJRgABAQEAXwBfAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4pLSwz - Oko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZPNS01T09PT09PT09PT09P - T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0//wAARCAChAR8DAREAAhEBAxEB/8QA - GwAAAgMBAQEAAAAAAAAAAAAAAAECAwQFBwb/xABMEAABAwIEAQcFCg0CBwEBAAABAgMRAAQFEiExEwYU - IkFRYZFScZKh0RUWMjZCVXSBscEjJDNTVGJyc5Oy0uHwNLNDRGOClKLxJuL/xAAaAQEBAQEBAQEAAAAA - AAAAAAAAAQMCBAUG/8QAMxEBAAECAwYEBAYCAwAAAAAAAAECEQMSMQQTFCFBUQVhofBCUrHBIjJDcYHR - BpEj4fH/2gAMAwEAAhEDEQA/AOCWVFwQoQNxXSANEkgKSfqoANEjQg+YUBwiRotPhQBaIOqkigfCIMKK - fNQMtDfSgOGInSO2gOEO7SgXDETpFA+EO6gA0D2aUC4Y7R40DLYG5AoDhTQHB7qA4PdQHB7qA4PdQHB7 - qA4NAcGgODQHBoDg0BwaA4PdQBZmgXAOfNOkbRQT4f8AkCpYLJA1+wUsphGx3pYPKPIpYQU1MxoT6qWR - HhBWWF9c6ddUHDHEjNrG0UGxYSlaSgNqkwTnAgdtWIS7ZhzFm46+bkpS2lkqK0KEoOZICtN4maTHJY1a - RhrNuhXFZt+Mm2Us8R0oQVcbKDII0y7dR0qdPfmtuXvyZWxazeKVh1q5wGeIhSHlEE50py/D75n106Xc - 9bI26Lc2dxcXFvbuLQWwElxWVMkzqCD1ddJ5W99JI5y2uWNolLktoXAeUkrMkDgJWkHzFVSbxf31h1H9 - fSVd3aWbdwm2Sm1abUpCcyXStYkA6oKu09lW03smkXI4ZbsKcbuLkNqbdbZWEtBQC1Akj4Q0Eb9fUKRz - 0J5aoHDW2gptTqE3HDW5wwkZSlJUD0p36Kjt9dS/X9vX/wBJi02TfsLJhu9Ql8rXbupbnIlKSSVAyJPZ - S+h7+ikWDAthdcRHDygyAB082XLM7xrPqqzyIRvW7dtTamUJbStlLkKcCjJ76RE3mPekF+V/estN3hts - lxTbK7aWVht1a15TnIJ1KujGioj170jnV5HQxh9u1jbVm4pl1vnARlzpVIzRBA2PdSJvBPJWixtihC27 - glktqUTw0gphWXrVlA7yR40hZWOYWEKcAfQoNKWhRA2UCkJG/wArOnza7xRPfoqvrJq0H+paWoLUhSZS - CCOsQo6b7wdNqRNyeS5zDGUvONougoMuKQ6S3GXKkqJHSM6JPZUv9/Qjny/b1UiyQ5cWzbLyVJuQC2pQ - yn4RSZAJ2IOxNdfuLrW2s4NzxOMxwXVJzNgdJAG4zaiFA71zN4j33sRr77Lbiwt3HMjCm2kNFIUrJ0iC - 0Vkk5tdEnTTfspPK8z5+iRN4j+PVmatGHm5YfS4lTraJ4fTTIVIgEj5Pf1ajWqqTtkwzZuuZ0LCktrbW - SmUgqUCNCR8ntNSZ+v2k6++8Exh7T7bKkXIJcWlKsqQoIzKywSDIPXqAD1GuutkvyuTdiyq2VcOXIShK - VqOVAUeipKfKHlVzm5RP7Orc7LBhbOdtCrsBTzobZhvRUpSpJPS0nOO2Ks30/f0SOaDWHNuKQ0LgB4pb - WpOQQlKykCDOpGdPUPPVjURdtrNFotxt9S1Jf4UqSlIOknrNTsttWSGvzjfpCrZDyt/nG/SFLD6zCbFm - z5P+6DLLb1y4MwUpGeE5oIA80muRDlRY4e5YIxK0LIlYSVtkZXAfNpNIHy2Vr8436Qrqw+gwjku5cBu5 - vMqbcieHrmUCND3dtSZHIxPDmcOxBy2S8yvKZBBEieo9hpAy5GpnO3P7Qq2GS0wbi2jLhSyczYVqojQj - zV3dzZpTh7rTSmkqYSktlJA3KCQSCcsnUA9vZUvC84Wi2xKE5LphSEMBlKVoDgDebMBCkmRIkeal4lOc - RZnVht0OMrnFqkXCQhwIbCQoSCBATA1SNo2pyOaTGHXti24Gn7VKHCnOFtJWCRtopJ7TVmYlLJps8QUX - U87aWpRcLhVJJUtOVRJI6wIrn8NrLz9+/Na1b4k9iZSXLTitNocS5zdAUDJSCFBMyIpMwsXbmbC/btih - DlsXM7ZCykKgNpUANUnUZhB3ERUmqPr9v6LSo9xsQ5sbfjs8MgpMiVQTJGaM0E6kTBJNM0FpVqwO/Wbk - rubZXO1535R8MzIO2hknURvTNBab3Vjk3ecy5mX2CwHeLk1jPETt2aVc0FpQXybvXIm5tSA1wRmRmhA6 - tR69++pmgyzCV1yexa7aS0/iDKkJIIHDgkgQCogSogaSZpmi9zLNrKkcl8TRepvU37XOUucQOKSVHNMy - ZGuvbTNFrFplaxyexe3QG2r+3yBJTkUyFpIKsxBBBB1AOu3VTNBaSe5PYw+LgO4k0oXTiXXhkjOpMwdB - 3namaC0lecm8UviDdXtssglUhkJJJ3JIAzHTcyaRVEFpmLJjAcaD63xiTIcW7xlKDe64InbsJEba7UvT - 27+upafp6aK3eTWKu3Ldyq/ZDrWUNqQjJw41GUJAAg9gpFUQTEysdwDGHSSvELcS2prKhkISEq+EAkAA - T1mJqXp7Lz1MYFjQc4gxJkKzpXIb+UlJQOrySRGxnWauaPr66uYpt6emh+4mNhaVJxJhJSpKkhLQSlJS - CBAAgDpK02MmZpePf+ltKNxyfxi5aLT1/bFspSjIlkIGVJKgAEpEQVHbtpeC0hOAYylhDKcRZShASEkN - woBJzJGaM0AwQJjQUzRe5abWamsMxcN3AeurRwuMqbbHN0JSgqWlSiUhMKnL1jrqTMdF53L3LxgWmRN8 - yLhT63lvFsE9JKU9GU9EgJ3TG/dSZiUiJj09GdGBY02000jEmAlooKTwhm6JlIKokgGCASRoNKuaL3LT - oo96+I82dYN7blp1wOLBb+X2gxIOvVFM0cvItJp5M4ilAbF1ZwE5QDbpJiCN8s7KOvmO4EJqiS0qByMu - v0lj0TVzwZZfT8mhieC2vM3VMXNskktgFSVIncTB0muZmJWIlm5R2WIY2lDDZtbW0QsucJIJKlndSjAk - 6nq66RMQTEuG1yPuUOpXx7VeRQJSpKiDB2NdZoS0tpwfHV4knEF4shy6QSUrUCQgkEaDYb9VTNBaWFXI - 68WsqXdsqUoySoKJJ7TVzwZXJuLIWjz1svIVtvZZA36PVNdRzcy+7wlhv3KsAoNhTlugpClQT0eoddZz - PN1Ecm73PBVmDCSYidZjs2qXl1YCy0ENJy9xMd9LyWBsQAEqaSE9YM0vIs5g1EqaVO50peUsiuwQEqLT - XTPWZj66XkZra3y8oH0xH4o3/Ouk6Earl2LBdUDcqCiScvQ08RVzOcjUxbpS0EoVnCdJ0+6uZdRFkPc6 - 3/MCirUWqW05UIKR2CgrVhzCjKmZJ1oJt2iGk5W28o7BQSU0EglQgDUk9VBFSW0kZlASQkSdz2UAEtlR - SFCRoRQSyN+UnxoANoOykn66CXA7qA4HdQHA7qA4HdQHA7qA4HdQHA7qA4HdQHA7qDMrDrdKpMpzKn4c - ST/hoF7nWpQBOg1BC6CK8NthqVKAB1Gft/uaA5jaKVnE9IzovQ7nt7z40Amwt0rzSs9kqmKAVZWyjmJV - 9S/roFzG2JPwpiPhfVQWs2rDbykNqBdAkpmSAY9n+TQef48oN41eoObS5nQfqxW1OkM51fb4Rb3Bwawe - Ib4abVASSrtA3G1Z1WvLuL2N5l1m64SU2IcQhK1BUgpBMA7HrqKjw3VL6Rw0lWhIc6vN6qch0E4e8jNl - abGbfbWnJEfcxZJJZbk+aryObRwb39X1U5HNjtG3RykuA8JVzNvaNs66TodXTVaNL+GylR7wDXKpJYSk - QlGUdg0oHwu5XjQHC7leNAcLuV40Bwu5XjQBZBEFJIPUTQRXatrjO0FZTInWDQsOatmZaBzGTIB1oI8y - Y/R2/RH+ddAxZspUFJt0BQ1BCRNBZwz5JoDhnyTQHDPkmgOGfJNAcM+SaA4Z8k0EXAG0FawQBvQLo5Ao - iATAkgd1C6QTOyT6qJclspcELazDsIBoqHMmAonmyJIg9Ea0D5m1BAYSAdwABNBAWFukEC3AB3EDWgRw - 62UnKbVMdkCgDh1sd7ZJ0jYf51CgmmzaRORnLPZpQNTLbZU8WgFR0lQJIFB5rjwBxm+IG93rrv0NK3p0 - hnOr0XAW1L5MYeELyKNq3ComDlGsVjVq7jRdeNrYKnkOvDiKCQ222lUqJSAdtdo1OxPYKiq1cRtRQXbj - SQCLUEeeYoN7JDrYUErHctJSfA0FmSgMlByMpHKi5ymDzJqPTcrro5lXh+Lc8fKC3w2ySlDpVotQgKTG - 8ia0xcKKIib82OFjTXNphMXeJiSvC1lImMjySTWL0NDb90o/hLNxsSAPwiSeuTp2QPHuoGl+4ME2rwB7 - VJ2jz0Bxrg/Bt1/WtIoEH7n5Vo6D3LSR9tAlXF0HQlNmsozQV8RIgTvHm1oJce40/FXpPVnR7aCxC3VJ - BW2tCutMpMeugnDvkOeqgId8hz1UBDvkOeqgId8lfqoCHfJX6qAh3yV+qgg4bhK0hDC1JMycwEdlEVld - 71Wp3/OCipXKHVsKSlDknbUD76CS7dVxhzjKFcNS0KSFROU6iatM2mJlzVTmiYZMMwUWlmpl5QUVKClZ - CYKognXaewbVpi4mebs8HCjDizT7msgjK46kDqC6ybL2LZDAIQSZMkqM0FuUUBlFAZRQEDuoCB3UFN0P - xV2DrlO1B5VjyFnGr0hwgc40TE65Br4V6KdIZVPTOT2YcmcNKE5jzZvSY6hWFWrSNGm7Txwu3KZBTplf - KFGdDtBG/b2VFVIZU4sKW2+gKVqBc6Dt2NBpaYbQ5KXFkx8EuEjXuoNEUBFBxyknlRchO/MWo0n5bldf - CnVaLJYeDhbtgQrMSlkgnv31PnrmbzqmWOyfMGfzSvSV7aOiGHsRHDX58yp+2glzFkoUjhHKrcSddvYK - BKsGFGSyZGxBII/yaCbVslokttkTvuft81BZkPknwoKrlZYa4mQqhW22+lSZtDqinNNnOLtsUZDh7eWZ - jMfZXGdtuI7pIfZQSU2SQTMnOTvvTObiO5IVazAsGk+dZ9lM5ODEdU81vnzc1azTM8VXn7KudN1HdoGI - qGnCb/if2pnTdR3P3QWf+G1/E/tTMbuO4GIrP/Da/if2pmN1HdE4msGOAk94X/apnWMGJ6l7qL/Rx6X9 - qZ13Ed0V4jxAM9qDlIUJUdCOvamc3Ed2xtPGsUy4tkq1zJMEaz11pDCYtNiRYqS5n59dKgiUlaY06tqI - FMpWSeM8AepJI+6gtCkIQASDA1JFBIKB2TP1Ggcjyf8A1NASPJ/9TQUOJSpR1An9U6UGbmgIgXj2vYf7 - VRa6hIYdgj8meo1B5hjy3BjV8hCJTzkK+FEnIOr769NPRlU9M5N/FrDPorf8orz1atI0bV2lu4VlxlCs - 8ZpE5ojfwFRUfc+zCwvmzWYbHKKCSLO2bWFtsNoUNQUpg7RQX0BQchCQrlVcg7GwaBg/9RyuuidVeDIx - UXbqsQUsN9JKWzBSIIykGZ1E+atMWcO0RS8+DTiRVM1SEpdR0fdS7KSdQpiSB19KPX9e9YvSmUOpkqxG - 8T0yfyM9umx06Q360jsigS23lpKTil3oZlNvlOx7AB/8qohkuUEIOJ3ikhI1FqJ27SN/7/UHSLD5Gl0o - a6dAVFBt3yCOdLBI3CBpr/goKrhDrDaVrfU4E9RQNTB7Nf8A5WeL+WVp1YjePhhLgLR6UEcJz6gNJmvL - ZpdNF26pOqWwomEgIcInv6PbSwiq+dSRmaSEkTJQvTffT/7SwDevBfwW8h2/Buz3/J8KWE2bi6eKglpl - JCQZOeDI03ApIuPPOpFv8LrUrbw3qXC/HiNU2oPZmV7PNVuF+PaQi1mNekrfw7Kl4GkDTWpdTil5A202 - 9ZBDyAtBmUkSDr2V7qdIZSTVnZsuBxq2QhY2UluD2dldIXMbQrKywkqO6i3r9lAIsbRucjCU5hBhuJHh - QXIQlCQlGYAdQT/agl/3L9H+1Ao/WX6P9qCAZbAATnAGgATt6qCn3Oss2bgDNMzk1nwoJ3CEptnSCqch - 3FB5djk+7F79K12/N16aejKp6Rya+LWGfRW/5RXnq1aRo6lRRQFAUBQclJCeVNyo7CwaJ/iOVeidW9q5 - t3lqQ082tafhJSoEjzjqpNMxF5SK6Zm0SBdWxOj7RP7YqOgbq2SnMbhoCJkrG1Ac7tcmfnLWWJnOIigs - DjZAIWmDsZ3oDiI0GdOvfQBcQASVpAG8mgzXTrbjILbyNFfCBBjTes8X8srTq4WPY1c4NboPEYfed0Qk - IIiNyelXirqs+p4dsPF1zEzaI1fNucssXV8EsI/Zbn7Sayzy+7T4Ls0a3n+VR5W431XSR5mkeymeppHh - GyfL6z/ZjlbjQ3uUHztJ9lM8pPg+yfL6ysTyxxcEEqYV529/CrvJcVeC7NOl4/l9VguJv4tYC5S6y2oK - KXEZDoRGxn11pTMTF353bdlnZcXJM3jo7AUmPhJ+o1XluMyZjMJ7JoALQYIUnXvpYOgbKSqyASrKTMH6 - 691OkMpVqYvJTw70JSBqC2Fa10jQwHENgPOhxflBOX1UFkigJFASKAkUBIoCRQU3hHNHv2DQeU484kYx - eoJAPOs2+scMV6KejKp6Tya+LeGfRW/5RWFWrSNHUqKKAoCgKDlN/Gu5+gtf7jldfCnUsLwZGH3DjwdL - qlZgFKTCspIMEzqBAA2rvExpri3Rlh4NNE3hB+2ZbJS9Z2Bzj8yVTrrOlZNUCxZh5S1WlgNcqpaM/Z3H - 1VVBRaJckW2H5ykEy2Z+yiLc7QQMjFplCRpkVAjTs01qKXEbBKTb2aUDUdBRB9WlBILZCTDVplIy6IVr - 3ba6xQHNwtpJQxatoWo6tJ11BE6jurmuJmm0LHKXxXLRnm99bNZkq/A5tG0p6z2eavn41M0zES/VeAxG - 6rq8/t/2+crB959FgPJtON4S+82+Wrht3KnMJSoQDB6x5/VXowsHeUzPV8jbvEp2TGppmL0zH86uViWF - XuFvcO9YUifgq3SrzGsq8OqibS92z7XhbRTmw5v9WKuHofTclMRsbNi5TeMKcUVJUkpazkCDPmr0YNFV - UTZ+a8ei1dE+U/b+3dGN4HGQWa48nmorbdVvgZoMY7goIAtHBl1EW21N1WZoHuzgkRzJyPotN1WZoXjl - Fh7bacrF2luOjFuQIHZ3Cm5rMzrsKccw9tdvkzKEp4gMRPX9VeqmLRZmioYhIyt2ffKleyqNTSVcNPGS - gL68uooJ5U+SPCgMqfJHhQGVPkjwoDKnyR4UBlT5I8KAyp8keFBW+lJZWIEEQaDx3lQI5S4gBsHfuFem - nRjVq9T5NfFvDPorf8orz1atY0dSoooCgKAoOSjTlVc/QWv9xyrP5U6tFliLd4840lpxCmx0ioaT2T66 - 5VD3SfA1wy7J20CY9ZFUaDdkac2fKpiAke2gfOjE83uPR/vQHOVdds9uRoAaCK7taUBSbS4VPUEiR66B - 86P6Ncb+SPbQCneK2lRbWjpxCxB2NB57y0E4kyuXjLUS6I2J27ta8W2fmifJ+q/x+f8Ahrjz+0PnK8b7 - 76rkxygtMFwe4DwU4+t6UNJ6xlGpOwFerBxqcOmbvh+JeH4u149M08oiNf5czGeUN/jBKHlhtiZDKNE/ - X21liY1Veuj27H4dg7Lzpi895cisnvYsQcDakfhMhGvwomvdskcpfl/8gn8eHHlP2YFOpJniie0rmvW/ - PL7Rm6dvLbIh5YU4jVCFaiRrPWKXh1lm13uBwu2UTGutHJ+5NuQARIGgoNNiAmybGwA++gku4yLKeE6o - ATmSmQdKCPOxlzcC4I/d60CN5Anm1z/DoJC6kA8B8b/I2oEbwJBJYuNP+mTQHPBp+AuNf+maB86ME83f - 0ExkoLGnC42FFtSCfkq3FA3vySqDxzlT8ZsQ/ffcK9NOjGrV6lya+LeGfRW/5RXnq1axo6lRRQFAUBQc - pv413P0Fr/ccq/CnV0glKSVAAE6kgb1FYE2twgDKnUCB+MrjXfqqg5tcxokDTYXCx91QMWtyAT0sxPXc - rIA8N/bQMWz6dkAykzNws6nq276AFs8lORLaQkKmeOqT3zG+1AubXGhCTJ0VNyvTTq089Ayw60+kyVNl - R1U6SRoerbqoOJywwpWIWTb7Skhy3J0UYzA9/bpWGPgziRGXV9bwnb6NlrmMT8sviFYXfBM82WRMaQa8 - k7Nix8L9HT4psc/qQj7m32kWjxnaEHWpw+L8stI8Q2Sf1Kf9wBh16f8AlXfRNOHxfllJ8Q2SP1I/3C+3 - wTE7lUM2iiQAdSBofOavD4vZxV4pscfHD63D+QmFLskHGbVNxdnVRDq0hI8nokA+evbg4eSm0vy3iW2R - tWNmp0jlDT7weS/zWP47v9Vavnqbbkoi0vG3GVq4LDpW20GxMdQzTMQKx3X4r3e+dtvh5LdLPorZspXJ - bKNOytngaeugotUJcskJWJBG310FCsPTnJabYCOxSSfvoLgi6SAELYAA8hW8eegCm81hxju6B7fP2UAE - 3mXVxiZ/NmI8aAy3mcdNgp6xkM/bQGW9zHpsROgyHafP2UDKbsn8oyB3IPtoIhF6D+VYI70HT10FygoM - HOQVRqQIFB49yp+M2IfvvuFemnRjVq9S5NfFvDPozf8AKK89WrWNHUqKKAoCgKDlN/Gq5+gtf7jlXonV - TgrWKs3lyMReW4hXSRI6Ik9R83V1VZtbkREgquEohWNo3mTbifN4ff5hOQ0m6UkBs39uVwNSjXbUxNRU - hcqJCeeNSo6Hgnu03319dBE3Xyhft9scKYGn17/bQBuFKbOTEGdFgFXCnedN/X3UD50YV+PMiDHSaMj1 - 91AG6SES7ctr6UjKkpgAa7nvFAxdMkSFSB1xVCTc26gVJUkgCSaXDTcMrCighQAkx2UAq5YS7w1HKvsI - iggu8txIzdIESI76C04kwJ6LhjeAD99QIYmwSBldkmNU9fjQaOMr8w94D20BxlfmHvAe2gDcFIksO+A9 - tAWYItW5EGPvoIOsWynSpzMFGCYWobDsBoDg2riolRJ/XV/nbQPmdtBHD0UIIk60A3Y27akqSlUp2lZM - bdp7hQaaAoCgKCD35JVB45yp+M2IfvvuFemnRjVq9S5NfFvDPorf8orz1atY0dSoooCgKAoODc4hZ4fy - oeVe3LbCV2TYSVmJIW5XVrw5vaWj3x4H8523p1MsreB75ME+c7b06ZZLwPfJgnznbenS0l4P3yYJ8523 - p0tJeB75ME+c7b06WkvA98mCfOdt6dLSXge+TBPnO29OlpLwXvjwP5ztvTpaS8H75ME+c7b06WkvBe+P - A/nO29OlpLwPfHgfzlbelS0l4P3x4J8523p0tJeCHKPAxtidt6dLSXg/fJgnznbenS0l4HvkwT5ztvTp - aS8D3yYJ8523p0tJeB75ME+c7b06uWTNCt/lFgxaIRiVsVdQzxNMsmaAzyiwVLSUnE7aR+vTLPYzQpdx - 3B1PFacUY+q4KR4AUyz2LwrVjOEK+FijW/VdK9lMtXYvCSMcwltQWMTYJGsG5JBO22WmWrsXhf75sL/T - 7P8AjH+mmWexmgvfNhf6fZz++P8ATTLPYvB++XC/0+z/AI3/APNMtXYzQPfLhf6fZ/xj/TTLV2LwPfLh - f6fZ/wAY/wBNMtXYzQk7yiwYtKCcStiY0GfemWexmh5byhebuMfvnmVpW2t2UqSZB0Fb06Mpercmvi3h - n0Vv+UV56tWsaOpUUUBQFAUHzuILDfKN9RU4n8Ta1b3/ACjnnmua8OcSnUiq0rGrxtlJUt99wHTpgmPV - 31jOyT3dbzyW+6LfY56KvZU4Or5jeR2XJuApYRKgokJiFdffERXPC1fMsV+TTwne1PpH2U4We65/IcJ3 - tT4n2U4We6Z/IcJ3tT6R9lOFnuZ/IuE72p9I+ynCz3M/kOE72p9I+ynCz3M/kFNuJEkj6iT91OFnuZ/J - k51rEHx76vBz8xvPIc7/AFVbxvV4OfmTeR2VDEUl5bIQsrQkKOu87RU4SfmXeR2WNXnFRnCFgHqVINI2 - SfmN55J84PYfGrwdXzJvI7AvyCIUJEaKg04OfmN5HZW450VmV66xn02iPNVjZZib5icTlo+JwuxL9n8F - Q4bCXCVsEhUpmAcwn1V7prtyY5bula4HzhnihxtIIzD8XOu+xz6j7opvDIHOTylKdb4qEkAnMLZQHVsc - 0f4abwyKVcmFpcDZu3CTEKFuSNe+au8kyBfJhaEybxZEkdFgq646jTez2Mho5MLXBTerEqy9Jgp6p6zT - e+RkRRyZcWFnnbicvlsET5ulTez2MgXybUhakG7eOXrTaqIPmINN7PYyJN8mFOAFN8oAqKekwU6/Wab2 - exkJvkypawkXbqSfKtlAeMxTez2MhL5NltKVKvHSFJB6NuVR4Gm9kyLW+TayElN0IJmF2xHwdNidj66m - 9Mj43FWTb4pcMkqJQqJUnKdh1dVaRN+bnR65ya+LeGfRW/5RXmq1axo6lRRQFAUBQcJ9OblNcJkibFrU - bjpuV3H5XPVrDYHyifqHsrm8rZBVvKyoPOCeoRH2UvJYG3k/lnQIiBHZHZ9dLgDHRILrhMzOk+bQUCTb - wZLziu4xH2UAbaSSHnBPUI9lAc23/DObz1eygZYlIHEWIO4iT6qKjzUyfxh2CNB0dO/alxJNvln8KsyI - gxp6qXRFNsQR+MOka6EJ7I7PrpeQzbBSAkuuaGZ0B+ylxZwk9WnmA9lLyWMISOoH6qXkseVPkjwpeRVc - QlowNzGgFWJJfDWPJ124sLZ4NMfhGkqGZ5KZnuInatpqphnlmVrnJW8Kugi1Hcp5JM+HnpnpMkgcjsUI - BDNsQdiFj2Uz0mWUXOSOItplbVsB+2PZSK6TLKpHJu7WCUi0IScpOcaHwqRi0Ss4dUape9e+0hu1OYwI - Wk6/UKu8pTLIPJi9ABKbMBQkS6kSKkYtE84MlQHJe+IkItCJjRwH7KsV0yZZhUOT75SFBdllOk8Qeyu5 - tE2lzT+KLwmOTV0TANkSdgHB7KmaFyySeTl0pwoSLQrTEjOJE7aRUz03suSdVyeTF0N2LY6j/idXX8ml - 4LS+YxK3Va4i/brACm1QQNthVhHr3Jr4t4Z9Fb/lFearVrGjqVFFAUBQFBxHPjTcfQWv9xyuvhc9Wyoo - oCiiiCgKAoooCiCgKAoCiigKCm7/ACQ/aFWEY8EZCsBw4llKwbVvU/sjupVPMjRtDDKyTwG1bid9j5qi - tLYSlCUkuIO2VJMDzaUDW224nKsuqB6jNBUi1tkAhCVgKMmBufDuFS0QszM6nze3OkOGDsB1+FJi8WlD - 5uxlCfwmVIgCNAPCpTTFMWiCZuXNbeZhyfN/auoRHmdmlMcLKOyI+6uprmdUimKeUAWNmlWYMkKHWE6/ - ZUzStkua28g5XNNBv/nWal51LIuMIBRw0nLPTKp27u+rmks8o5UD/wDS4h++P2CtqdGc6vU+TXxawz6K - 3/KKwq1aRo6lRRQFAUBQcRz41XH0Fr/ccrr4U6tlQFFFAUBQFEFFFAUQUUUBQFAUBQU3X5H/ALhVhByd - QDycwwyf9K1/KKlWskaNztqy8IdQFjvqKz3qWUIaQsMlA2S4qNuzSgyt80W5q3aSSBIekkeaKo6Db1u8 - rK0+laomARUAuyt3F51tpKpmY1NBalpKUhKZCQIA7BQPIO00EXLdt1OVwZk9hoGlpKUhKZCQIAHUKB8M - dpoK7huWFgHdJGuooPH+UwjlJfjTR3q8wr006MqtXqfJr4tYZ9Gb/lFeerVpGjqVFIkdZFAsw7R40BmT - 5Q8aAzJ8oeNBxVmeVVxGv4i1t+8crr4U6tu29RRp2jxpYGnaPGlgado8aWBp2jxpYGnaPGlgado8aWBp - 2jxpYGnaPGlgado8aWBp2jxpYGnaPGlgado8aWBp2jxpYGnaPGlhB3VtcKiAfrqwivAlLTyVw9TSM6xZ - tlKSYk5BpNc1aytNuV2tp27Uw2pduAsjpJzxBpTzjmV8p/Cru1KLKOJmaWZ0S+E+s71UZ1KXBKnlzrtc - pGvZt/kVFWsLWX0hLinAFERzhJHhEnr07qDUpy4CyE2+ZPUrOBQNtx9SwHGMg6znBoL6Ct5TiUgtN5z2 - ZooItrdUoBbOUduYGKC6grfMMrJ2A7KDxzlOZ5S4gf8ArfcK9NOjKdXeseUd9b2dvaN2GfhMpR0LoiQk - JEwBodv8mu52aZm92MbVHZoPKfEyqfctyU7xdK10nXTvrnhfNeKjs5OL43cXtw2X7JtCmklJS64XJkzu - RWlOzTHVxVtVMuebxRQU81ttdiBqPNXW4qc8TSBerCUjmtqSI6RTrpV3FS8TSHLxS0lPNLVMiJSnUU3F - RxNK7AMUdwRb6m2Eu8YJGjhRlgnXQd9cVbNVV1WNqphvxDlPcX1qGFWiYCwqXHlODSdII76U7LVTN7k7 - XTLmc/VEcztdOvKa63FScTSSb1aVqXza2Mx0SnQeYVdxUcTSRu1nL+LsDL2Dfz03FRxNKYv1g6Wtrt5F - NxUnE0lz5cgi1tdP1KbipeJpRXeLWgp5tbJ70pg03FRxNJi+cH/LWx0jVFNxUcTSS7xa0lPNrdPelJBF - NxUcTSlz9z9Fte/ob03FRxNKJvFlzNza3GkQE6U3FRxNKXP3NfxW01/UpuKjiaQL5Y/5W1OsiU03FRxN - KKbxaVKVze36XURoPNTcVHE0pc+X+i2s9uSm4qOJpYrhBfeU5kbRPyRsKbio4ml9Lacrbq2smLZNokhl - tKArjqEwANo7qznZJnq64ulZ79Lv9DH/AJCv6acJPc4ukDlhdOGOYoMAnW4OkDX5NSdlmOpG10z0C+V1 - yhakrw9AIMEcc/01Y2We5xdMdCHLC4BkWKAe0Pn+mnCT3OLpS9+d3+hj/wAhX9NOEnucXSPfpd/oY/8A - IV/TThJ7nF0j353f6GP/ACFf004Se5xdPZNnlnelZyWCFnKTBuDsNSdu6pOyzHVY2uJ6LxywxMthYwhB - SdQeMrXSezsqcN5rxUdgeWGJjX3IRHbxVR4xThvM4qOxe/DEkEOnCUZUgzLyojt2pwvmcVHZ8nirj1/i - tzduNhpx1ZUpsEnKdo9VaRgTEM52mmZ0Svt2v3YrSGLP1CqJGrDmSqgoCgKAoCgKAoCgKAoCgKAoCgKA - oCgKAoCgKDXhv+va+v7DXFWjunVVdf6t/wDbV9tdU6QlWqmq5FAUBQk+rx+ypJCI3NAHrqg+Wa4JSZ+D - /wBorqNB/9k= - - - \ No newline at end of file diff --git a/Wizard/UI/Kit/FilterLineControl.Designer.cs b/Wizard/UI/Kit/FilterLineControl.Designer.cs index b2cf585..613949f 100644 --- a/Wizard/UI/Kit/FilterLineControl.Designer.cs +++ b/Wizard/UI/Kit/FilterLineControl.Designer.cs @@ -1,4 +1,6 @@ -namespace net.r_eg.DllExport.Wizard.UI.Kit +using net.r_eg.DllExport.Wizard.UI.Components; + +namespace net.r_eg.DllExport.Wizard.UI.Kit { partial class FilterLineControl { @@ -16,97 +18,47 @@ partial class FilterLineControl private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - this.textBoxFilter = new System.Windows.Forms.TextBox(); - this.btnClose = new System.Windows.Forms.Button(); - this.btnInfo = new System.Windows.Forms.Button(); + this.textBoxFilter = new TextBoxExt(); this.panelFBorder = new System.Windows.Forms.Panel(); - this.btnBug = new System.Windows.Forms.Button(); this.toolTip = new System.Windows.Forms.ToolTip(this.components); this.panelFBorder.SuspendLayout(); this.SuspendLayout(); // // textBoxFilter // + this.textBoxFilter.BackgroundCaption = "Filter by project path ..."; + this.textBoxFilter.BackgroundCaptionAlpha = 70; this.textBoxFilter.BorderStyle = System.Windows.Forms.BorderStyle.None; this.textBoxFilter.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBoxFilter.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F); + this.textBoxFilter.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.textBoxFilter.Location = new System.Drawing.Point(1, 1); this.textBoxFilter.Margin = new System.Windows.Forms.Padding(0); this.textBoxFilter.Name = "textBoxFilter"; - this.textBoxFilter.Size = new System.Drawing.Size(390, 16); + this.textBoxFilter.Size = new System.Drawing.Size(464, 16); this.textBoxFilter.TabIndex = 0; - this.toolTip.SetToolTip(this.textBoxFilter, "Filter by project path"); this.textBoxFilter.TextChanged += new System.EventHandler(this.textBoxFilter_TextChanged); // - // btnClose - // - this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnClose.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.btnClose.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); - this.btnClose.Location = new System.Drawing.Point(443, 0); - this.btnClose.Margin = new System.Windows.Forms.Padding(0); - this.btnClose.Name = "btnClose"; - this.btnClose.Size = new System.Drawing.Size(26, 23); - this.btnClose.TabIndex = 4; - this.btnClose.Text = "x"; - this.btnClose.TextAlign = System.Drawing.ContentAlignment.TopCenter; - this.toolTip.SetToolTip(this.btnClose, "Close panel"); - this.btnClose.UseVisualStyleBackColor = true; - this.btnClose.Click += new System.EventHandler(this.btnClose_Click); - // - // btnInfo - // - this.btnInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnInfo.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.btnInfo.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); - this.btnInfo.Location = new System.Drawing.Point(398, 0); - this.btnInfo.Margin = new System.Windows.Forms.Padding(0); - this.btnInfo.Name = "btnInfo"; - this.btnInfo.Size = new System.Drawing.Size(18, 23); - this.btnInfo.TabIndex = 6; - this.btnInfo.Text = "!"; - this.toolTip.SetToolTip(this.btnInfo, "Information"); - this.btnInfo.UseVisualStyleBackColor = true; - this.btnInfo.Click += new System.EventHandler(this.btnInfo_Click); - // // panelFBorder // this.panelFBorder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.panelFBorder.BackColor = System.Drawing.Color.DeepSkyBlue; this.panelFBorder.Controls.Add(this.textBoxFilter); - this.panelFBorder.Location = new System.Drawing.Point(2, 3); + this.panelFBorder.Location = new System.Drawing.Point(1, 0); this.panelFBorder.Margin = new System.Windows.Forms.Padding(0); this.panelFBorder.Name = "panelFBorder"; this.panelFBorder.Padding = new System.Windows.Forms.Padding(1); - this.panelFBorder.Size = new System.Drawing.Size(392, 18); + this.panelFBorder.Size = new System.Drawing.Size(466, 18); this.panelFBorder.TabIndex = 7; // - // btnBug - // - this.btnBug.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnBug.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.btnBug.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); - this.btnBug.Location = new System.Drawing.Point(418, 0); - this.btnBug.Margin = new System.Windows.Forms.Padding(0); - this.btnBug.Name = "btnBug"; - this.btnBug.Size = new System.Drawing.Size(18, 23); - this.btnBug.TabIndex = 8; - this.btnBug.Text = "#"; - this.toolTip.SetToolTip(this.btnBug, "Bugs ?"); - this.btnBug.UseVisualStyleBackColor = true; - this.btnBug.Click += new System.EventHandler(this.btnBug_Click); - // // FilterLineControl // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.btnBug); - this.Controls.Add(this.btnInfo); - this.Controls.Add(this.btnClose); this.Controls.Add(this.panelFBorder); + this.Margin = new System.Windows.Forms.Padding(0); this.Name = "FilterLineControl"; - this.Size = new System.Drawing.Size(469, 24); + this.Size = new System.Drawing.Size(467, 18); this.panelFBorder.ResumeLayout(false); this.panelFBorder.PerformLayout(); this.ResumeLayout(false); @@ -114,12 +66,8 @@ private void InitializeComponent() } #endregion - - private System.Windows.Forms.TextBox textBoxFilter; - private System.Windows.Forms.Button btnClose; - private System.Windows.Forms.Button btnInfo; private System.Windows.Forms.Panel panelFBorder; - private System.Windows.Forms.Button btnBug; private System.Windows.Forms.ToolTip toolTip; + private TextBoxExt textBoxFilter; } } diff --git a/Wizard/UI/Kit/FilterLineControl.cs b/Wizard/UI/Kit/FilterLineControl.cs index 110b564..87aab8c 100644 --- a/Wizard/UI/Kit/FilterLineControl.cs +++ b/Wizard/UI/Kit/FilterLineControl.cs @@ -24,14 +24,10 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; -using System.Text; -using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; -using net.r_eg.DllExport.Wizard.Extensions; using net.r_eg.DllExport.Wizard.UI.Extensions; using net.r_eg.MvsSln.Log; @@ -45,6 +41,12 @@ internal partial class FilterLineControl: UserControl, IExtCfg private DateTime prevPress; private bool block = false; + public string FilterText + { + get => textBoxFilter.Text; + set => textBoxFilter.Text = value; + } + /// /// To get new project list after applying filter. /// TODO: ProjectFilter @@ -134,53 +136,9 @@ protected override void Dispose(bool disposing) base.Dispose(disposing); } - private void btnClose_Click(object sender, EventArgs e) - { - Hide(); - } - private void textBoxFilter_TextChanged(object sender, EventArgs e) { - ApplyDelayedFilter(); - } - - private void btnInfo_Click(object sender, EventArgs e) - { - var sb = new StringBuilder(); - -#if !PUBLIC_RELEASE - sb.Append($"The base: "); -#endif - sb.Append($"{WizardVersion.S_NUM_REV} {WizardVersion.S_REL} [{WizardVersion.BRANCH_SHA1}]"); -#if DEBUG - sb.Append("[ Debug ] "); -#else - sb.Append("[ Release ] "); -#endif - sb.AppendLine(); - sb.AppendLine(); - - sb.Append("https://github.com/3F/DllExport"); - sb.AppendLine(); - - var info = Path.Combine(exec.Config.PkgPath, "build_info.txt"); - if(!File.Exists(info)) { - sb.Append("Detailed information about build was not found. :("); - } - else { - File.ReadAllLines(info).ForEach(s => - { - sb.Append(Regex.Replace(s, @":(\s\s*)(?!generated)", (Match m) => $": {m.Groups[1].Value.Replace(' ', '_')} ")); - sb.AppendLine(); - }); - } - - MessageBox.Show(sb.ToString(), ".NET DllExport"); - } - - private void btnBug_Click(object sender, EventArgs e) - { - "https://github.com/3F/DllExport/issues".OpenUrl(); + ApplyDelayedFilter(550); } } } diff --git a/Wizard/UI/Kit/FilterLineControl.resx b/Wizard/UI/Kit/FilterLineControl.resx index 4909af1..8766f29 100644 --- a/Wizard/UI/Kit/FilterLineControl.resx +++ b/Wizard/UI/Kit/FilterLineControl.resx @@ -120,7 +120,4 @@ 17, 17 - - 17, 17 - \ No newline at end of file diff --git a/Wizard/UI/MsgForm.Designer.cs b/Wizard/UI/MsgForm.Designer.cs index c070080..a604b82 100644 --- a/Wizard/UI/MsgForm.Designer.cs +++ b/Wizard/UI/MsgForm.Designer.cs @@ -98,6 +98,7 @@ private void InitializeComponent() this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(599, 241); this.Controls.Add(this.listBoxLog); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.Name = "MsgForm"; this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; diff --git a/Wizard/UI/SimpleConfFormater.cs b/Wizard/UI/SimpleConfFormater.cs new file mode 100644 index 0000000..84350e4 --- /dev/null +++ b/Wizard/UI/SimpleConfFormater.cs @@ -0,0 +1,93 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2020 Denis Kuzmin < x-3F@outlook.com > GitHub/3F + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. +*/ + +using System; +using System.Reflection; +using System.Text; + +namespace net.r_eg.DllExport.Wizard.UI +{ + internal sealed class SimpleConfFormater: IConfFormater + { + private readonly IExecutor exec; + + public string Parse(IProject prj) + { + if(prj == null) { + return string.Empty; + } + + var sb = new StringBuilder(45); + sb.AppendLine("```"); // for default reports on github issue tracker because some users don't know + sb.AppendLine($"Installed: {prj.Installed}"); + sb.AppendLine($"Project type: {prj.XProject.ProjectItem.project.EpType.ToString()}"); + sb.AppendLine($"PkgVer: {prj.Config.Wizard.PkgVer}"); + sb.AppendLine($"Storage: {prj.Config.Wizard.CfgStorage}"); + sb.AppendLine($"Compiler.Platform: {prj.Config.Platform}"); + sb.AppendLine($"Compiler.ordinalsBase: {prj.Config.Compiler.ordinalsBase}"); + sb.AppendLine($"Compiler.rSysObj: {prj.Config.Compiler.rSysObj}"); + sb.AppendLine($"Compiler.ourILAsm: {prj.Config.Compiler.ourILAsm}"); + sb.AppendLine($"Compiler.customILAsm: {prj.Config.Compiler.customILAsm}"); + sb.AppendLine($"Compiler.genExpLib: {prj.Config.Compiler.genExpLib}"); + sb.AppendLine($"Compiler.peCheck: {prj.Config.Compiler.peCheck}"); + sb.AppendLine($"Compiler.patches: {prj.Config.Compiler.patches}"); + sb.AppendLine($"SignAssembly: {prj.XProject.GetProperty("SignAssembly").unevaluatedValue}"); + sb.AppendLine($"Identifier: {prj.DxpIdent}"); + sb.AppendLine($"Instance: {Assembly.GetEntryAssembly().Location}"); + sb.AppendLine($"Project path: {prj.XProject.ProjectFullPath}"); + sb.AppendLine($"Action: {prj.Config.Wizard.Type}"); + sb.AppendLine($"PlatformTarget: {prj.XProject.GetProperty("PlatformTarget").unevaluatedValue}"); + sb.AppendLine($"TargetFramework: {prj.XProject.GetProperty("TargetFramework").unevaluatedValue}"); + sb.AppendLine($"TargetFrameworks: {prj.XProject.GetProperty("TargetFrameworks").unevaluatedValue}"); + sb.AppendLine($"TargetFrameworkVersion: {prj.XProject.GetProperty("TargetFrameworkVersion").unevaluatedValue}"); + sb.AppendLine($"RootNamespace: {prj.XProject.GetProperty("RootNamespace").unevaluatedValue}"); + sb.AppendLine($"AssemblyName: {prj.XProject.GetProperty("AssemblyName").unevaluatedValue}"); + sb.AppendLine($"MgrArgs: {prj.Config.Wizard.MgrArgs}"); + sb.AppendLine($"MetaLib: {prj.Config.Wizard.MetaLib}"); + sb.AppendLine($"MetaCor: {prj.Config.Wizard.MetaCor}"); + sb.AppendLine($"Proxy: {prj.Config.Wizard.Proxy}"); + sb.AppendLine($"StoragePath: {prj.Config.Wizard.StoragePath}"); + sb.AppendLine($"ddNS: {prj.Config.Namespace}"); + sb.AppendLine($"ddNS max buffer: {prj.Config.NSBuffer}"); + sb.AppendLine($"UseCecil: {prj.Config.UseCecil}"); + sb.AppendLine($"intermediateFiles: {prj.Config.Compiler.intermediateFiles}"); + sb.AppendLine($"timeout: {prj.Config.Compiler.timeout}"); + sb.AppendLine($"RootPath: {prj.Config.Wizard.RootPath}"); + sb.AppendLine($"PkgPath: {prj.Config.Wizard.PkgPath}"); + sb.AppendLine($"SlnFile: {prj.Config.Wizard.SlnFile}"); + sb.AppendLine($"SlnDir: {prj.Config.Wizard.SlnDir}"); + sb.AppendLine($"DxpTarget: {prj.Config.Wizard.DxpTarget}"); + sb.AppendLine($"MsgGuiLevel: {prj.Config.Wizard.MsgGuiLevel}"); + sb.AppendLine($"LockIfError: {prj.InternalError}"); + sb.AppendLine("```"); //< + + return sb.ToString(); + } + + public SimpleConfFormater(IExecutor exec) + { + this.exec = exec ?? throw new ArgumentNullException(nameof(exec)); + } + } +} diff --git a/Wizard/UserConfig.cs b/Wizard/UserConfig.cs index 353276a..e96230a 100644 --- a/Wizard/UserConfig.cs +++ b/Wizard/UserConfig.cs @@ -39,13 +39,16 @@ public class UserConfig: IUserConfig /// public const string NS_DEFAULT_VALUE = "System.Runtime.InteropServices"; - internal const string MGR_FILE = "DllExport.bat"; //TODO: - /// /// Default meta library. /// public const string METALIB_NAME = "DllExport.dll"; + //TODO: + internal const string MGR_NAME = "DllExport"; + internal const string MGR_FILE = MGR_NAME + ".bat"; + internal const string PKG_ID = "DllExport"; + /// /// Flag of installation. /// @@ -179,9 +182,11 @@ public UserConfig(IWizardConfig cfg, IXProject xp) ordinalsBase = GetValue(MSBuildProperties.DXP_ORDINALS_BASE, xp).ToInteger(), ourILAsm = GetValue(MSBuildProperties.DXP_OUR_ILASM, xp).ToBoolean(), customILAsm = GetUnevaluatedValue(MSBuildProperties.DXP_CUSTOM_ILASM, xp), + rSysObj = GetValue(MSBuildProperties.DXP_SYSOBJ_REBASE, xp).ToBoolean(), intermediateFiles = GetValue(MSBuildProperties.DXP_INTERMEDIATE_FILES, xp).ToBoolean(), timeout = String.IsNullOrWhiteSpace(rawTimeout) ? CompilerCfg.TIMEOUT_EXEC : rawTimeout.ToInteger(), - peCheck = (PeCheckType)GetValue(MSBuildProperties.DXP_PE_CHECK, xp).ToInteger() + peCheck = (PeCheckType)GetValue(MSBuildProperties.DXP_PE_CHECK, xp).ToInteger(), + patches = (PatchesType)GetValue(MSBuildProperties.DXP_PATCHES, xp).ToLongInteger() }; } diff --git a/Wizard/Wizard.csproj b/Wizard/Wizard.csproj index d118c6f..e4fcf00 100644 --- a/Wizard/Wizard.csproj +++ b/Wizard/Wizard.csproj @@ -37,6 +37,9 @@ key.snk + + ..\packages\Conari.1.4.0\lib\net40\Conari.dll + True @@ -46,12 +49,15 @@ True + + + @@ -60,7 +66,6 @@ - @@ -76,6 +81,19 @@ True Resources.resx + + Component + + + Component + + + + True + True + IconResources.resx + + UserControl @@ -91,6 +109,7 @@ + @@ -100,12 +119,6 @@ ProjectItemsControl.cs - - Form - - - InfoForm.cs - Form @@ -136,6 +149,7 @@ Always Designer + @@ -152,7 +166,6 @@ RGiesecke.DllExport - ResXFileCodeGenerator @@ -162,6 +175,11 @@ ConfiguratorForm.cs Designer + + ResXFileCodeGenerator + IconResources.Designer.cs + Designer + FilterLineControl.cs @@ -174,9 +192,6 @@ ProjectItemsControl.cs - - InfoForm.cs - MsgForm.cs diff --git a/Wizard/WizardVersion.cs b/Wizard/WizardVersion.cs index b6217e5..091a128 100644 --- a/Wizard/WizardVersion.cs +++ b/Wizard/WizardVersion.cs @@ -8,9 +8,9 @@ internal struct WizardVersion { public static readonly Version number = new Version(S_NUM_REV); - public const string S_NUM = "1.6.6"; + public const string S_NUM = "1.7.0"; public const string S_REV = "0"; - public const string S_REL = ""; + public const string S_REL = "beta4"; public const string S_NUM_REV = S_NUM + "." + S_REV; @@ -18,7 +18,7 @@ internal struct WizardVersion public const string BRANCH_NAME = "-"; public const string BRANCH_REVC = "-"; - internal const string S_INFO = S_NUM_REV + " " + S_REL + " [ " + BRANCH_SHA1 + " ]"; - internal const string S_INFO_FULL = S_INFO + " /'" + BRANCH_NAME + "':" + BRANCH_REVC; + internal const string S_INFO = S_NUM_REV + "+" + BRANCH_SHA1; + internal const string S_INFO_FULL = S_INFO + ":" + BRANCH_NAME + "-" + BRANCH_REVC; } } \ No newline at end of file diff --git a/Wizard/net.r_eg.DllExport.Wizard.targets b/Wizard/net.r_eg.DllExport.Wizard.targets index dfbeded..7df7104 100644 --- a/Wizard/net.r_eg.DllExport.Wizard.targets +++ b/Wizard/net.r_eg.DllExport.Wizard.targets @@ -24,6 +24,8 @@ Default + + @@ -49,6 +51,8 @@ StoragePath="$(wStoragePath)" Storage="$(wStorage)" Action="$(wAction)" + PkgVer="$(wPkgVer)" + Proxy="$(wProxy)" MsgGuiLevel="$(MsgGuiLevel)" /> diff --git a/Wizard/packages.config b/Wizard/packages.config new file mode 100644 index 0000000..f19e093 --- /dev/null +++ b/Wizard/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/bin/Readme.md b/bin/Readme.md deleted file mode 100644 index 37b675f..0000000 --- a/bin/Readme.md +++ /dev/null @@ -1,3 +0,0 @@ -All final binaries will be here... - -`> build` \ No newline at end of file diff --git a/build.bat b/build.bat index b16260f..e79ce90 100644 --- a/build.bat +++ b/build.bat @@ -3,8 +3,8 @@ set cim=packages\vsSolutionBuildEvent\cim.cmd set _gnt=tools/gnt -set reltype=%1 -if "%reltype%"=="" ( +set reltype=%~1 +if not defined reltype ( set reltype=Release ) diff --git a/changelog.txt b/changelog.txt index 1604618..063277e 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,6 +1,44 @@ .NET DllExport - https://github.com/3F/DllExport - - - - - - - - - - - - - - - - - - - - - - - - - +[v1.7-beta4] 2020.01.21 + + * NEW: Allowed .NET Standard 1.1 and above targeting. + + * FIXED: Fixed "Sdk.WindowsDesktop" problem for .NET Core / SDK-based projects. + Details in PR #123. + + * FIXED: Fixed beta3 incorrect layout (Thanks @Genteure, PR #131). + + Related problem with `Inf/-Inf token patching` option: + https://github.com/3F/DllExport/issues/128#issuecomment-566360606 + + * FIXED: DllExport crashing with proxy authentication error. Issue #133. + + * FIXED: Fixed actions for `-mgr-up` key. + Including `-action Upgrade` ( Update + mgr-up + force keys ) + + * FIXED: Fixes possible MSB1006 for proxycfg property. + "MSB1006: Property is not valid. Switch: proxycfg" + + * CHANGED: UI. VS project icons under Visual Studio 2017 Image Library EULA.RTF license. + + * CHANGED: init.ps1 adds optional copying of package data for our manager. + Part of the "new installation behavior through official NuGet." (beta2) + + Please note: This is not nuget support! + It just replaces known info-form that was in 1.6.x. + + * CHANGED: Local scope when invoking .\DllExport manager in project files. + + * CHANGED: Updated GetNuTool 1.8 + https://github.com/3F/GetNuTool/releases/tag/1.8 + + * NOTE: Please don't use beta releases in production! + + * NOTE: Please report about something here: https://github.com/3F/DllExport/issues + + [v1.6.6] 2020.01.16 * NOTE: Please don't forget to test latest 1.7 BETA releases (not for production) diff --git a/test-manager.bat b/test-manager.bat new file mode 100644 index 0000000..5a2c0d7 --- /dev/null +++ b/test-manager.bat @@ -0,0 +1,19 @@ +@echo off + +set cfg=%~1 +if not defined cfg set cfg=Release + +set tdir=.\\bin\\%cfg%\\tests\\mgr\\ +if not exist %tdir% goto buildError + +setlocal + cd %tdir% + call .\tests +endlocal + +exit /B 0 + +:buildError + +echo. Tests cannot be started for '%cfg%' configuration: Use `%~nx0 ^` or check your build first. 1>&2 +exit /B 1 \ No newline at end of file diff --git a/tools/build.targets b/tools/build.targets deleted file mode 100644 index 7d80f86..0000000 --- a/tools/build.targets +++ /dev/null @@ -1,23 +0,0 @@ - - - - - $(MSBuildThisFileDirectory)..\..\ - $(NuPkgRootPath)tools\net.r_eg.DllExport.Wizard.targets - - - - Info - $(SolutionPath) - $(SolutionDir) - $(NuPkgRootPath) - - - - - - - - - - \ No newline at end of file diff --git a/tools/init.ps1 b/tools/init.ps1 new file mode 100644 index 0000000..e33e64d --- /dev/null +++ b/tools/init.ps1 @@ -0,0 +1,18 @@ +param($installPath, $toolsPath, $package, $project) + +$manager = "DllExport.bat" +Copy-Item "$installPath\\$manager" "$PWD" -Force + +$pdir = "$PWD\\packages\\DllExport." + $package.Version +if(!(Test-Path -Path $pdir)) { + Get-ChildItem -Path $installPath | ForEach-Object { + if($_.PSIsContainer) { + # without this some files in subdirs can be copied in root folder: https://github.com/3F/coreclr/blob/4fde65a5695d8d4c2f73959e71fb38357ae02a28/pack.ps1 + $null = New-Item -ItemType Directory -Force -Path ($pdir + '\\' + $_.Name) + } + Copy-Item $_.fullname $pdir -Recurse -Force + } +} + +$project.Save($project.FullPath) +Start-Process -FilePath ".\\$manager" -WorkingDirectory "$PWD" \ No newline at end of file diff --git a/tools/net.r_eg.DllExport.targets b/tools/net.r_eg.DllExport.targets index 18751d4..0271311 100644 --- a/tools/net.r_eg.DllExport.targets +++ b/tools/net.r_eg.DllExport.targets @@ -70,6 +70,7 @@ $(DllExportVSRoot)Common7\Tools\VsDevCmd.bat $(DllExportVSRoot)VC\vcvarsall.bat;$(DllExportVSRoot)VC\Auxiliary\Build\vcvarsall.bat +