<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Tony Qu</title><subtitle type="text">NPOI - 一个能帮助你直接读写office文件流的库</subtitle><id>http://feed.cnblogs.com/blog/u/8005/rss</id><updated>2012-02-08T08:45:05Z</updated><author><name>Tony  Qu</name><uri>http://www.cnblogs.com/tonyqus/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/tonyqus/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/8005/rss"/><entry><id>http://www.cnblogs.com/tonyqus/archive/2012/01/12/2314203.html</id><title type="text">.net 2.0下的OOXML神器：NPOI.OpenXml4Net</title><summary type="text">作者：Tony Qu NPOI官方博客：http://tonyqus.sinaapp.com | 官方QQ群：189925337 可能很多人已经习惯了使用.Net 3.0下的System.IO.Packaging（WindowsBase.dll）来操作Office 2007/2010的文件格式，以至于大家都默许了.net 2.0下无法操作OOXML文件的观点，尽管也有人使用第三方zip类...</summary><published>2012-01-11T22:34:00Z</published><updated>2012-01-11T22:34:00Z</updated><author><name>Tony  Qu</name><uri>http://www.cnblogs.com/tonyqus/</uri></author><link rel="alternate" href="http://www.cnblogs.com/tonyqus/archive/2012/01/12/2314203.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/tonyqus/archive/2012/01/12/2314203.html"/><content type="html">&lt;p&gt;作者：Tony Qu&lt;/p&gt;  &lt;p&gt;NPOI官方博客：&lt;a href="http://tonyqus.sinaapp.com"&gt;http://tonyqus.sinaapp.com&lt;/a&gt; | 官方QQ群：189925337&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;可能很多人已经习惯了使用.Net 3.0下的System.IO.Packaging（WindowsBase.dll）来操作Office 2007/2010的文件格式，以至于大家都默许了.net 2.0下无法操作OOXML文件的观点，尽管也有人使用第三方zip类库来操作OOXML文件，但是遇到关系维护之类的问题，就开始纠结了，你必须自己去不断地维护.rels文件（OOXML中用于维护文件内关系的文件，这里不是后缀名，这个文件就叫这个名字。），而且文件的内容越复杂，关系维护就越痛苦。尽管微软出了OpenXml SDK 2.0，但是很遗憾，这套库也是基于.net 3.0的。当然，我倒不是.net 3.0的坚决反对者，只是出于部署方面的考虑，要知道目前基于.net 2.0的应用还是占据相当一部分份额的，尽管.net 3.0/3.5出来也3年了，但是相对于.net 2.0而言，只能算刚刚起步，这也是NPOI始终坚持.net 2.0版本为主线版本的原因。&lt;/p&gt;  &lt;p&gt;有人可能要说，.net 3.0/3.5不也是基于.net 2.0的吗？话是这么说，但是部署起来，还是要单独部署.net 3.0包，不是吗？相当于额外增加一套库，就拿我目前的公司来说，我们仍然在用vs2005开发，服务器上也只部署了.net 2.0 framework。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201112/201112260841309144.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201112/201112260841309701.png" width="471" height="214" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;poi中有一个库叫OpenXml4j，由Julien Chable于2008年捐赠给POI项目，主要负责OOXML基础操作，如创建、读取、修改、关系维护等。最近NPOI团队完成了OpenXml4j的移植工作，于是就有了NPOI.OpenXml4Net，该组件将包括在NPOI下一个版本中，目前你可以通过googlecode的svn获得完整代码，自行在本地编译。OpenXml4Net使用SharpZip作为底层zip操作库，而非Ionic.Zip，主要原因是SharpZip的设计与java中的zip库更接近，移植相对简单，所以我们选择了这条捷径。不过有一点要向大家说明，OpenXml4Net仅负责底层操作，比如创建部件、创建关系等，但不包括Office上层的功能，如创建xlsx文件、添加单元格等，这只是一个底层操作库，NPOI将在后续版本中陆续增加，Excel 2007, Word 2007, PowerPoint 2007对应的命名空间分别是NPOI.XSSF, NPOI.XWPF, NPOI.XLSF，NPOI.XSSF按计划将在半年内完成（预计在2012年6月或7月发布），这次随本文发布的算是社区预览版，你可以基于这个版本给我们提建议和bug。&lt;/p&gt;  &lt;p&gt;&lt;u&gt;从头创建OOXML文件&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;任何一个OOXML都是一个zip文件，在本例中为了方便打开，我们直接使用.zip作为新建文件的扩展名。&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;//create ooxml file in memory&lt;/span&gt;&#xD;
Package p = Package.Create();&#xD;
&#xD;
&lt;span style="color: #008000"&gt;//create package parts&lt;/span&gt;&#xD;
PackagePartName pn1=&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PackagePartName(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Uri(&lt;span style="color: #006080"&gt;&amp;quot;/a/abcd/e&amp;quot;&lt;/span&gt;,UriKind.Relative),&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);&#xD;
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!p.ContainPart(pn1))&#xD;
    p.CreatePart(pn1, MediaTypeNames.Text.Plain);&#xD;
&#xD;
PackagePartName pn2 = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PackagePartName(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Uri(&lt;span style="color: #006080"&gt;&amp;quot;/b/test.xml&amp;quot;&lt;/span&gt;, UriKind.Relative), &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);&#xD;
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!p.ContainPart(pn2))&#xD;
    p.CreatePart(pn2, MediaTypeNames.Text.Xml);&#xD;
&#xD;
&lt;span style="color: #008000"&gt;//save file &lt;/span&gt;&#xD;
p.Save(&lt;span style="color: #006080"&gt;&amp;quot;test.zip&amp;quot;&lt;/span&gt;);&#xD;
&#xD;
&lt;span style="color: #008000"&gt;//don't forget to close it&lt;/span&gt;&#xD;
p.Close();&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;这里我们创建了2个部件，分别是位于/a/abcd目录下的e，和位于/b目录下的test.xml。这里有几点值得注意：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;a. Package.Create有好几种调用方式，其中一种是上面这种Package.Create()，这样最直接的好处就是可以在内存中创建文件；而Package.Create(path)，即事先传入文件名，直接在文件系统上创建文件，不用MemoryStream。当然啦，对于大文件（超过100M）以上的文件，使用Packakge.Create()做会占用较多的内存，所以如果并发量很高的话，建议慎用。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;b. 用了p.ContainPart来判断节点是否已经存在，尽管对于新创建的文件这么做意义不大，但是这是个好习惯。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;c. 创建PackagePartName的时候，Uri必须是Relative类型的，所以要传UriKind.Relative。这一点.Net做的比较挫，默认Uri都是Absolute的，而且一旦Uri为Relative类型的，基本上调用任何Uri的属性全部会抛异常，这实现够坑爹的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;u&gt;修改已存在的OOXML文件，并保存为新文件&lt;/u&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;修改已存在的文件也很简单，Package.Open就可以了，但由于最后要保存，务必传入PackageAccess.READ_WRITE，否则会抛异常。&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;//create ooxml file in memory&lt;/span&gt;&#xD;
Package p = Package.Open(&lt;span style="color: #006080"&gt;&amp;quot;test.zip&amp;quot;&lt;/span&gt;,PackageAccess.READ_WRITE);&#xD;
&lt;span style="color: #008000"&gt;//create package parts&lt;/span&gt;&#xD;
PackagePartName pn3 = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PackagePartName(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Uri(&lt;span style="color: #006080"&gt;&amp;quot;/c.xml&amp;quot;&lt;/span&gt;, UriKind.Relative), &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);&#xD;
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!p.ContainPart(pn3))&#xD;
    p.CreatePart(pn3, MediaTypeNames.Text.Xml);&#xD;
&#xD;
&lt;span style="color: #008000"&gt;//save file &lt;/span&gt;&#xD;
p.Save(&lt;span style="color: #006080"&gt;&amp;quot;test1.zip&amp;quot;&lt;/span&gt;);&#xD;
&#xD;
&lt;span style="color: #008000"&gt;//don't forget to close it&lt;/span&gt;&#xD;
p.Close();&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;对于已存在的文件，目前仍然有个bug，那就是不能直接保存为当前文件名，存在文件被占用的问题，我们将尝试在正式版中解决这个问题。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;目前我们仍然在对OpenXml4Net接口进行调整，以提高组件的易用性和稳定性。如果大家发现啥bug或者问题，请直接通过邮件联系我。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;下载NPOI.OpenXML4Net请到这里：&lt;a href="http://code.google.com/p/npoi/downloads/list"&gt;http://code.google.com/p/npoi/downloads/list&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;OpenXML4Net的源代码请通过googlecode svn获取&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;今年NPOI计划出一本入门级指导书，名字未定，主要面向NPOI初学者，也可以作为NPOI功能速查手册，帮助更多的人上手。有兴趣的出版社可以通过&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" border="0" src="http://images.cnblogs.com/cnblogs_com/tonyqus/122515/r_gmailicon.jpg" /&gt;联系我。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/tonyqus/aggbug/2314203.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/tonyqus/archive/2012/01/12/2314203.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/tonyqus/archive/2011/09/15/1939786.html</id><title type="text">实战 CruiseControl.NET+NAnt（三）- NAnt及NAntContrib常用任务</title><summary type="text">作者：Tony Qu NAnt的脚本引擎非常强大，bat能干的事，它都能干，绝对是有过之而无不及。本文中将列出一些常用任务，其他的我就不一一例举了，大家可以通过http://nant.sourceforge.net/release/0.85/help/tasks/index.html自学。 NAnt常用任务 a. 声明变量 参考：http://nant.sourceforge.net/release/0.85/help/tasks/property.html 当我们声明完一个变量之后需要引用它的时候，我们可以用${propertyname}来获得它的值，这与php中的变...</summary><published>2011-09-15T15:31:00Z</published><updated>2011-09-15T15:31:00Z</updated><author><name>Tony  Qu</name><uri>http://www.cnblogs.com/tonyqus/</uri></author><link rel="alternate" href="http://www.cnblogs.com/tonyqus/archive/2011/09/15/1939786.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/tonyqus/archive/2011/09/15/1939786.html"/><content type="html">&lt;p&gt;作者：Tony Qu&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;NAnt的脚本引擎非常强大，bat能干的事，它都能干，绝对是有过之而无不及。本文中将列出一些常用任务，其他的我就不一一例举了，大家可以通过&lt;a title="http://nant.sourceforge.net/release/0.85/help/tasks/index.html" href="http://nant.sourceforge.net/release/0.85/help/tasks/index.html"&gt;http://nant.sourceforge.net/release/0.85/help/tasks/index.html&lt;/a&gt;自学。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NAnt常用任务&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;a. 声明变量 &lt;/p&gt;  &lt;p&gt;参考：&lt;a title="http://nant.sourceforge.net/release/0.85/help/tasks/property.html" href="http://nant.sourceforge.net/release/0.85/help/tasks/property.html"&gt;http://nant.sourceforge.net/release/0.85/help/tasks/property.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;当我们声明完一个变量之后需要引用它的时候，我们可以用${propertyname}来获得它的值，这与php中的变量引用$a是类似的。&lt;/p&gt;  &lt;p&gt;b. 创建目录&lt;/p&gt;  &lt;p&gt;参考：&lt;a title="http://nant.sourceforge.net/release/0.85/help/tasks/mkdir.html" href="http://nant.sourceforge.net/release/0.85/help/tasks/mkdir.html"&gt;http://nant.sourceforge.net/release/0.85/help/tasks/mkdir.html&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;c. 删除文件&lt;/p&gt;  &lt;p&gt;参考：&lt;a title="http://nant.sourceforge.net/release/0.85/help/tasks/delete.html" href="http://nant.sourceforge.net/release/0.85/help/tasks/delete.html"&gt;http://nant.sourceforge.net/release/0.85/help/tasks/delete.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;c. 执行第三方程序 &lt;/p&gt;  &lt;p&gt;参考：&lt;a title="http://nant.sourceforge.net/release/0.85/help/tasks/exec.html" href="http://nant.sourceforge.net/release/0.85/help/tasks/exec.html"&gt;http://nant.sourceforge.net/release/0.85/help/tasks/exec.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;d. 拷贝文件&lt;/p&gt;  &lt;p&gt;参考：&lt;a title="http://nant.sourceforge.net/release/0.85/help/tasks/copy.html" href="http://nant.sourceforge.net/release/0.85/help/tasks/copy.html"&gt;http://nant.sourceforge.net/release/0.85/help/tasks/copy.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;拷贝是非常平凡的build动作，通常我们会对拷贝的内容作一定得筛选，比如所有的dll文件，这时我们可以用下面的语句：&lt;/p&gt;  &lt;p&gt;&amp;lt;copy todir=&amp;quot;c:\release&amp;quot;&amp;gt;    &lt;br /&gt;&amp;lt;fileset basedir=&amp;quot;c:\npoi\bin&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;include name=&amp;quot;*.dll&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;lt;/fileset&amp;gt;     &lt;br /&gt;&amp;lt;/copy&amp;gt; &lt;/p&gt;  &lt;p&gt;这里的意思是将c:\npoi\bin目录下的所有dll拷贝到c:\release目录下。&lt;/p&gt;  &lt;p&gt;e. zip打包&lt;/p&gt;  &lt;p&gt;参考：&lt;a title="http://nant.sourceforge.net/release/0.85/help/tasks/zip.html" href="http://nant.sourceforge.net/release/0.85/help/tasks/zip.html"&gt;http://nant.sourceforge.net/release/0.85/help/tasks/zip.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;f. if语法&lt;/p&gt;  &lt;p&gt;参考：&lt;a title="http://nant.sourceforge.net/release/0.85/help/tasks/if.html" href="http://nant.sourceforge.net/release/0.85/help/tasks/if.html"&gt;http://nant.sourceforge.net/release/0.85/help/tasks/if.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;值得注意的是，很多语句支持if属性，也就是说如果条件满足才执行该任务。例如&lt;/p&gt;  &lt;p&gt;&amp;lt;exec program=&amp;quot;ping&amp;quot; if=&amp;#8221;${a=1}&amp;#8221;&amp;gt;    &lt;br /&gt;&amp;lt;arg value=&amp;quot;nant.sourceforge.net&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;lt;/exec&amp;gt; &lt;/p&gt;  &lt;p&gt;这个声明的意思是只有当变量a等于1时，才会pint nant.sourceforge.net，这与下面的语句是等同的：&lt;/p&gt;  &lt;p&gt;&amp;lt;if test=&amp;#8221;${a=1}&amp;#8221;&amp;gt;    &lt;br /&gt;&amp;lt;exec program=&amp;quot;ping&amp;quot;&amp;gt;     &lt;br /&gt;&amp;lt;arg value=&amp;quot;nant.sourceforge.net&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;lt;/exec&amp;gt;     &lt;br /&gt;&amp;lt;/if&amp;gt;&lt;/p&gt;  &lt;p&gt;g. foreach语法&lt;/p&gt;  &lt;p&gt;参考：&lt;a title="http://nant.sourceforge.net/release/0.85/help/tasks/foreach.html" href="http://nant.sourceforge.net/release/0.85/help/tasks/foreach.html"&gt;http://nant.sourceforge.net/release/0.85/help/tasks/foreach.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;如何使用NAntContrib的任务&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;NAntContrib最新版本是0.85，其中增加了很多额外的task，但NAnt自己无法自动找到这些task，所以必须在build文件的开头增加一句声明，如下&lt;/p&gt;  &lt;p&gt;&amp;lt;loadtasks assembly=&amp;quot;&lt;font style="background-color: #ffff00"&gt;&amp;lt;nantcontrib path&amp;gt;&lt;/font&gt;/bin/NAnt.Contrib.Tasks.dll&amp;quot; /&amp;gt;&lt;/p&gt;  &lt;p&gt;黄色部分需要替换成你本地的NAntContrib路径。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NAnt.Contrib常用任务&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;a. cd - 切换当前工作目录&lt;/p&gt;  &lt;p&gt;&amp;lt;cd dir=&amp;quot;subdir&amp;quot; /&amp;gt; &lt;/p&gt;  &lt;p&gt;b. msbuild - 调用MSBuild进行编译，但必须安装MSBuild&lt;/p&gt;  &lt;p&gt;详见&lt;a title="http://nantcontrib.sourceforge.net/release/latest/help/tasks/msbuild.html" href="http://nantcontrib.sourceforge.net/release/latest/help/tasks/msbuild.html"&gt;http://nantcontrib.sourceforge.net/release/latest/help/tasks/msbuild.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;c. vb6 - 编译vb6的项目，但必须安装VB6&lt;/p&gt;  &lt;p&gt;详见&lt;a title="http://nantcontrib.sourceforge.net/release/latest/help/tasks/vb6.html" href="http://nantcontrib.sourceforge.net/release/latest/help/tasks/vb6.html"&gt;http://nantcontrib.sourceforge.net/release/latest/help/tasks/vb6.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;d. svn相关&lt;/p&gt;  &lt;p&gt;svn：&lt;a title="http://nantcontrib.sourceforge.net/release/latest/help/tasks/svn.html" href="http://nantcontrib.sourceforge.net/release/latest/help/tasks/svn.html"&gt;http://nantcontrib.sourceforge.net/release/latest/help/tasks/svn.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;svn-checkout：&lt;a title="http://nantcontrib.sourceforge.net/release/latest/help/tasks/svn-checkout.html" href="http://nantcontrib.sourceforge.net/release/latest/help/tasks/svn-checkout.html"&gt;http://nantcontrib.sourceforge.net/release/latest/help/tasks/svn-checkout.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;svn-update：&lt;a title="http://nantcontrib.sourceforge.net/release/latest/help/tasks/svn-update.html" href="http://nantcontrib.sourceforge.net/release/latest/help/tasks/svn-update.html"&gt;http://nantcontrib.sourceforge.net/release/latest/help/tasks/svn-update.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;e. sql - 执行sql脚本&lt;/p&gt;  &lt;p&gt;详见&lt;a title="http://nantcontrib.sourceforge.net/release/latest/help/tasks/sql.html" href="http://nantcontrib.sourceforge.net/release/latest/help/tasks/sql.html"&gt;http://nantcontrib.sourceforge.net/release/latest/help/tasks/sql.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;f. nunitreport - 生成NUnit报表&lt;/p&gt;  &lt;p&gt;详见&lt;a title="http://nantcontrib.sourceforge.net/release/latest/help/tasks/nunitreport.html" href="http://nantcontrib.sourceforge.net/release/latest/help/tasks/nunitreport.html"&gt;http://nantcontrib.sourceforge.net/release/latest/help/tasks/nunitreport.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;其他task请见&lt;a title="http://nantcontrib.sourceforge.net/release/latest/help/tasks/" href="http://nantcontrib.sourceforge.net/release/latest/help/tasks/"&gt;http://nantcontrib.sourceforge.net/release/latest/help/tasks/&lt;/a&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/tonyqus/aggbug/1939786.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/tonyqus/archive/2011/09/15/1939786.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/tonyqus/archive/2011/05/03/2034853.html</id><title type="text">给招行专业版提点意见：自动购汇VS现汇还款，哪个更优先？</title><summary type="text">此文是在与客服沟通后发出，不存在误解，我是实在没找到合适的渠道提这个bug，所以才想借助下技术圈的力量，看看有没有在招行干活的兄弟，给你们相关部门提点建议。  我用招行专业版5年了，一直觉得招行的专业版很不错，又是国内唯一一个用.NET做前端的银行系统，所以一直是铁杆粉丝，但是最近用外汇功能有点不爽，想帮助系统尽快改进，所以才有了此文。 事情大致经过 最近用信用卡在国外网站刷了点美元，大概$500左右，本想拿一卡通里的美金还，大概有$700，肯定是够还的，为保证现汇还款成功还特地用专业版开通了现汇还美金功能，如下图所示。 下面是点修改后的设置界面，这个界面正常人看了都能明白 已经开通了美元自动</summary><published>2011-05-02T16:49:00Z</published><updated>2011-05-02T16:49:00Z</updated><author><name>Tony  Qu</name><uri>http://www.cnblogs.com/tonyqus/</uri></author><link rel="alternate" href="http://www.cnblogs.com/tonyqus/archive/2011/05/03/2034853.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/tonyqus/archive/2011/05/03/2034853.html"/><content type="html">&lt;p&gt;此文是在与客服沟通后发出，不存在误解，我是实在没找到合适的渠道提这个bug，所以才想借助下技术圈的力量，看看有没有在招行干活的兄弟，给你们相关部门提点建议。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;我用招行专业版5年了，一直觉得招行的专业版很不错，又是国内唯一一个用.NET做前端的银行系统，所以一直是铁杆粉丝，但是最近用外汇功能有点不爽，想帮助系统尽快改进，所以才有了此文。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;事情大致经过&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;最近用信用卡在国外网站刷了点美元，大概$500左右，本想拿一卡通里的美金还，大概有$700，肯定是够还的，为保证现汇还款成功还特地用专业版开通了现汇还美金功能，如下图所示。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201105/201105030040247520.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201105/201105030040242503.png" width="608" height="139" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;下面是点修改后的设置界面，这个界面正常人看了都能明白 &lt;strong&gt;已经开通了美元自动还款功能，而且是现汇还款&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201105/201105030040255850.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201105/201105030040258816.png" width="606" height="491" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;我这里大概解释下，现汇和现钞的区别，现汇就是直接用你账户里的美金还，现钞就是用你账户里的RMB按照当天汇率购买等值美金，然后还款。到目前为止，我自然觉得我的操作完成了，但事实并非如此。&lt;/p&gt;  &lt;p&gt;上个月25日，我正好想查一下帐，突然发觉账户里的RMB被扣了很多，我就纳闷了，怎么还是用现钞还，难道我设置错误了，跑进去一看设置是对的，非常非常奇怪，于是打电话给招行客服，得到的答复是他们还有一个设置尽然是和这个界面相关的：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201105/201105030040273078.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201105/201105030040279698.png" width="1153" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;这里便是客服所说的自动购汇设置，从界面上看，我基本没有看出自动购汇和现汇还款有任何关系，除了界面最下面有一段小字：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201105/201105030040306369.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201105/201105030040307764.png" width="1044" height="133" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;其中第六条说的意思大致是，如果同时设置了现汇还款和自动购汇，是先按照自动购汇做的，即使美元账号里有足够的美元，我的妈呀，这是什么乱七八糟的规定啊，谁会去看这行小字，而且这个是默认设置，开通专业版的时候就开着的功能，要不是客服说这个是相关的，我估计这辈子我也不会去看这个设置。最恶心的是刚才设置现汇还款的界面压根就没有提到自动购汇是相关的，设置的时候也没有任何的警告窗口，这是最诡异的地方，因为现汇还款按常理说如果金额足够的话，不存在兑换问题。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;在网上搜了下，原来不止我一个人有这样的遭遇：&lt;/p&gt;  &lt;p&gt;&lt;a title="http://life.forex.com.cn/wbyhk/2010-03/1149479.htm" href="http://life.forex.com.cn/wbyhk/2010-03/1149479.htm"&gt;http://life.forex.com.cn/wbyhk/2010-03/1149479.htm&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.xiaojb.com/archives/personal/cmbchina_crea.shtml" href="http://www.xiaojb.com/archives/personal/cmbchina_crea.shtml"&gt;http://www.xiaojb.com/archives/personal/cmbchina_crea.shtml&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;接下来我们来分析下这个功能到底应该怎么整，这样才能让我们更好的理解哪个更优先的问题。&lt;/p&gt;  &lt;p&gt;客户需求：用账户中的美元现汇还信用卡中的美元，如果不够则用RMB还&lt;/p&gt;  &lt;p&gt;系统相关模块：自动还款、自动购汇、多币种管理、一卡通与信用卡转账功能&lt;/p&gt;  &lt;p&gt;大致逻辑：&lt;/p&gt;  &lt;p&gt;IF 开通美元现汇还款 THEN&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;IF 一卡通中的美元 &amp;gt;=&amp;#160; 信用卡美元借款 THEN&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;用美元还美元&lt;/blockquote&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;ELSE&lt;/p&gt;    &lt;p&gt;用人民币购汇，然后还款（这时需要自动购汇）&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;ELSE （开通美元现钞还款）&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;计算需要多少RMB才能够完成购汇还款&lt;/p&gt;    &lt;p&gt;IF 一卡通中的RMB &amp;gt;= 信用卡还款所需的RMB THEN&lt;/p&gt;    &lt;p&gt;用RMB购汇还美元&lt;/p&gt;    &lt;p&gt;ELSE&lt;/p&gt;    &lt;p&gt;金额不足，无法还款&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;当然啦，这里只是一个大致逻辑，和实际系统可能还是有差距的，但有一点是明确的，自动购汇设置理应在美元现汇不够还或者现钞还款时才有效，但是这个条件根本不成立，这也是为什么像我这样的用户会纳闷为什么现汇还款设置没效果，因为用户觉得现汇还款始终是美元和美元在打交道，而不是美元和RMB在打交道，所以在金额足够的情况下不存在购汇问题，但是客服人员却一直在强调自动购汇优先级最高，这个优先级的结论其实根本不成立，因为这两件事根本没关系，何来的优先级，如果是现钞还款，她和我说优先级我倒还觉得有点道理。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;综上所述，现汇还款在美元足够还的情况下，根本没必要和自动购汇去比优先级，因为这时是现汇还款，不涉及购汇，所以也没必要考虑自动购汇开不开，始终都应该先用账户中的美元还信用卡中的美元。&lt;/p&gt; &lt;img src="http://www.cnblogs.com/tonyqus/aggbug/2034853.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/tonyqus/archive/2011/05/03/2034853.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/tonyqus/archive/2011/02/11/1943920.html</id><title type="text">实战 CruiseControl.NET+NAnt (二) - CC.NET中的触发器</title><summary type="text">CC.NET中触发任何一个build都需要通过触发器来完成，所以触发器在CC.NET中很重要，本节将介绍这些触发器的使用方法。</summary><published>2011-02-10T16:49:00Z</published><updated>2011-02-10T16:49:00Z</updated><author><name>Tony  Qu</name><uri>http://www.cnblogs.com/tonyqus/</uri></author><link rel="alternate" href="http://www.cnblogs.com/tonyqus/archive/2011/02/11/1943920.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/tonyqus/archive/2011/02/11/1943920.html"/><content type="html">&lt;p&gt;作者：Tony Qu&lt;/p&gt;  &lt;p&gt;CC.NET的配置文件位于安装目录的server目录下，有个叫做ccnet.config的文件，只有配置了这个文件，CC.NET才能正常运行。&lt;/p&gt;  &lt;p&gt;通过CCNetConfig我们可以学到很多关于ccnet.config的配置内容，首先来看一个非常重要的概念——触发器。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201101/201101250852063829.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201101/201101250852084966.png" width="323" height="142" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;值得注意的是，这里的触发器都仅针对当前项目有效，这也是为什么这些trigger基本没有target，比如说IntervalTrigger，所有的属性都没有提到触发的对象，。&lt;/p&gt;  &lt;p&gt;CC.NET提供了6种触发器：&lt;/p&gt;  &lt;p&gt;IntervalTrigger，顾名思义，就是每隔一定时间触发任务的触发器。&lt;/p&gt;  &lt;p&gt;FilterTrigger不能单独工作，而必须与其他Trigger一起使用，之所以叫FilterTrigger是因为它是用来过滤触发条件，例如我们原本设置了一个IntervalTrigger，每5分钟触发一次，但我只希望这个IntervalTrigger只在工作时间触发，那么我们就可以用FilterTrigger来限制IntervalTrigger的触发时间为9:00 ~ 18:00。&lt;/p&gt;  &lt;p&gt;MultiTrigger类似于WPF中的MultiTrigger，可同时执行多个触发器，并对触发器结果做And或Or操作。&lt;/p&gt;  &lt;p&gt;ScheduleTrigger和Windows自带的计划任务的功能非常类似，可以在特定时间触发任务。&lt;/p&gt;  &lt;p&gt;ProjectTrigger是仅当指定的CC.NET项目build完成后才会触发任务的触发器。&lt;/p&gt;  &lt;p&gt;UrlTrigger是仅当某个特定的Url页面的内容发生变化时才会触发任务的触发器。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;下面来举个例子：&lt;/p&gt;  &lt;p&gt;场景1：我希望设置一个daily build的触发器，每天凌晨1:00触发一次，仅工作日做，双休日不做（不考虑节假日）。&lt;/p&gt;  &lt;p&gt;由于是特定时间循环触发，我们可以用ScheduleTrigger来实现，代码如下：&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;scheduleTrigger&lt;/span&gt; &lt;span style="color: #ff0000"&gt;time&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1:00&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;buildCondition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ForceBuild&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ScheduledTask1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDays&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Monday&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Tuesday&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Wednesday&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Thursday&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Friday&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDays&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;scheduleTrigger&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;在CCNetConfig里面设置则如下图所示：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201102/201102081121114759.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201102/201102081121119709.png" width="645" height="180" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;场景2: 持续集成需要每隔一定时间触发一次build，已确定之前的checkin都是可运行的，所以我们需要设定一个每周一到周五的工作时间（9:00 ~ 18:00）触发，并且每隔15分钟触发一次的触发器（不考虑时区、时差问题）。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这里我们需要使用IntervalTrigger+FilterTrigger，FilterTrigger是用于过滤时间的，即9:00 ~ 18:00。&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;filterTrigger&lt;/span&gt; &lt;span style="color: #ff0000"&gt;startTime&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;09:00&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;endTime&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;18:00&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;trigger&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;intervalTrigger&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;seconds&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;600&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDays&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Monday&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Tuesday&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Wednesday&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Thursday&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Friday&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDay&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;weekDays&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;filterTrigger&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;在CCNetConfig里面设置则如下图所示：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201102/201102081121121836.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201102/201102081121128738.png" width="685" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;场景3: 当项目A的build成功之后才触发当前项目build（通常项目A是某个核心代码库，当前项目对其具有依赖性），由于是仅当成功才触发，所以triggerStatus=Success&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;triggers&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;projectTrigger&lt;/span&gt; &lt;span style="color: #ff0000"&gt;project&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;task2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;triggerStatus&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Success&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;triggerStatus&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;innerTrigger&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;intervalTrigger&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;seconds&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1800&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;buildCondition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ForceBuild&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;projectTrigger&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;triggers&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;在CCNetConfig里面设置则如下图所示：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201102/20110208112113624.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201102/201102081121146098.png" width="683" height="231" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font color="#d16349"&gt;Starcite上海招聘Java工程师/QA，具体要求请见&lt;/font&gt;&lt;/strong&gt;&lt;a title="http://job.cnblogs.com/Offer/EnterpriseInfo.aspx?key=3743" href="http://job.cnblogs.com/Offer/EnterpriseInfo.aspx?key=3743"&gt;&lt;strong&gt;&lt;font color="#d16349"&gt;http://job.cnblogs.com/Offer/EnterpriseInfo.aspx?key=3743&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/tonyqus/aggbug/1943920.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/tonyqus/archive/2011/02/11/1943920.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/tonyqus/archive/2011/01/24/1932507.html</id><title type="text">实战 CruiseControl.NET+NAnt（一）- 简介</title><summary type="text">本文是介绍CC.NET和NAnt的系列文章，希望对那些打算从事release engineer的兄弟有所帮助。</summary><published>2011-01-24T00:00:00Z</published><updated>2011-01-24T00:00:00Z</updated><author><name>Tony  Qu</name><uri>http://www.cnblogs.com/tonyqus/</uri></author><link rel="alternate" href="http://www.cnblogs.com/tonyqus/archive/2011/01/24/1932507.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/tonyqus/archive/2011/01/24/1932507.html"/><content type="html">&lt;p&gt;作者：Tony Qu&lt;/p&gt;&#xD;
&lt;p&gt;首先，我们先回顾下过去我们是怎么构建build server的。&lt;/p&gt;&#xD;
&lt;p&gt;大部分人最先想到的肯定是bat还有Windows系统的计划任务，确实，这两个东西在过去谁也离不开谁，bat充当脚本引擎，计划任务充当触发器。但在实际操作中我们发觉bat的能力是有限的，需要很多辅助的工具，因为它没办法像高级语言一样直接访问系统组件，比如需要用vbscript来访问adsi、访问com对象、控制IIS、访问注册表、访问wmi等。通常我们的做法是借助一些辅助命令或工具，比如iis我们可以用系统自带的iisweb.vbs, 操作ADSI也有相应的vbs脚本或者可以自己写一个，但这样以为着你要不停在各种语言中间切换，再加上vbscript和bat的调试并不容易（相对于.NET集成Visual Studio而言），这无形中增加了维护的成本和出错的可能。另外，bat本身没有任何倒退机制，我们必须花大力气构建错误处理机制，接着就是出错了如何退回到原来的状态，这些是非常费时间的。另外有个很大的问题就是bat只适合单机执行，如何及时的获取执行的结果（比如编译是否成功、编译后的版本号），目前比较通行的做法是通过脚本发邮件出来，当然这确实是可行的，但要完全搭建出来确实要费不少人力物力，这也是为什么现在很多公司设立了release engineer/manager职位。&lt;/p&gt;&#xD;
&lt;p&gt;如今越来越多的公司开始上敏捷开发，其中非常重要的一个环节就是持续集成，但事实上很多公司依然使用传统的编译模式，让release engineer专门负责编译的执行，虽然每天会有daily build，但如果是按需编译，都需要专人来完成，而不是由dev自己触发编译动作。传统的编译由于采用了bat，我们不得不登上某台dev, qa, stage server去执行编译和部署脚本，这样在有些时候会带来一些问题，比如允许登录该机器的人数不够，登不进去（通常IT只给2-3个人的上限，因为虚拟机处理能力有限）；谁执行了上次编译，带来了哪些问题，没有任何log可查等一系列问题。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font style="font-weight: normal"&gt;接下来我们要请出今天的主角：CuriseControl.NET和NAnt。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font style="font-weight: normal"&gt;CuriseControl.NET，简称CC.NET，由ThoughtWorks公司出品，免费开源软件，主要用于分布式版本发布，这款软件的最大特点是部署方便，可以轻易搭建轻量级Daily Build Server，是中小企业做Build的首选，并且支持各种不同的第三方版本控制和build软件，如svn, vss, nant, msbuild等。同时CC.NET提供了CCTray客户端，可以在远程开发机器上触发Build，也可以实时查看Build的状态，是成功还是失败，这样就解决了Build Server上的权限分配问题，我们不需要给所有的开发Build Server的登录权限，只需要给CC.NET的访问权限就可以了，由于它提供了Windows Service的运行方式，部署就更加方便了（在调试时可以使用控制台方式）。另外，当然CC.NET还有很多细致的功能来协助你完成Build，比如你可以在Build成功或失败时发邮件，可以把build直接部署到codeplex这样的开源技术社区等。总的来说，CC.NET不仅提供了整套的Build部署方案，更多的是Build的管理。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;CC.NET不仅提供了服务器端，也提供了客户端，客户端分为web和桌面两种，web版就是CC.NET自带的web dashboard，桌面版则是之前提到过的CCTray，从它的名字不难看出，它就是一个任务栏托盘程序，但有任何的编译会及时通知所有人编译的进展情况，目前最新的版本号等，对于希望部署持续集成的团队来说，绝对是首选，更何况它是免费的。CC.NET还提供了日志机制，能够方便的记录每次编译的细节，并可作为邮件附件发出来，而你要做的不是编写大段大段的脚本，只需要配置一个xml文件就可以了（ccnet.config），稍后我们来学习如何配置这个文件。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201101/201101140807503981.png"&gt;&lt;img title="image" style="border-top-width: 0px; padding-right: 0px; display: inline; padding-left: 0px; border-left-width: 0px;background-image: none; border-bottom-width: 0px; padding-top: 0px; border-right-width: 0px" height="184" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201101/201101140807525226.png" width="1028" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;以上就是CC.NET的web界面，看起来比较清爽，其中列出了所有编译项目，当然现在我只做了NPOI一个编译项目，如果团队中有多个项目，只需要多建几个Project就行了。web dashboard默认部署在IIS默认网站的ccnet目录下面，在CC.NET安装的时候会自动创建，当然前提是IIS已经安装并能正常工作。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201101/20110114080752591.png"&gt;&lt;img title="image" style="border-top-width: 0px; padding-right: 0px; display: inline; padding-left: 0px; border-left-width: 0px;background-image: none; border-bottom-width: 0px; padding-top: 0px; border-right-width: 0px" height="174" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201101/201101140807538705.png" width="644" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;上面这个就是CCTray的界面，这两个界面的区别在于，web dashboard只会列出当前服务器的任务，但CCTray通过配置是可以列出多个CC.NET服务器的任务的，你可以在File-&amp;gt;Settings-&amp;gt;Build Projects中选择需要监控的编译/部署任务。另外CCTray还有些比较花哨的功能，比如更换不同状态的图标（successful, failed, broken）、用语音触发任务、根据不同状态执行命令、输出x10硬件信号（可接外部设备，如红绿灯）、根据状态播放音频等。&lt;/p&gt;&#xD;
&lt;p&gt;在使用CCNet时最让人头疼的莫过于配置ccnet.config文件，它位于server目录（ccnet子目录之一）下，所有的关于build项目的配置信息都是从这里面读出来的，由于是xml文件，所以首先要保证不能写错标签，其次是不能写当前版本不支持的东西。CCNet发展到现在已经有了1.1, 1.2, 1.3, 1.4, 1.5，每个版本的配置文件都会有所不同，支持的东西也不同，出于这一点有人写了个辅助的工具叫做CCNetConfig，这是一个简单的Winform程序，但是它非常有用，因为它解决了这个最棘手的问题&amp;#8212;&amp;#8212;写ccnet.config。下面就是CCNetConfig的界面，让繁琐的xml配置工作转变成了窗口操作，非常方便，说实话，如果没有这东西让我直接写ccnet.config，这简直就是噩梦。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/201101/201101180822227938.png"&gt;&lt;img title="image" style="border-top-width: 0px; padding-right: 0px; display: inline; padding-left: 0px; border-left-width: 0px;background-image: none; border-bottom-width: 0px; padding-top: 0px; border-right-width: 0px" height="398" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/201101/201101180822298631.png" width="644" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;以上各软件的下载地址如下：&lt;/p&gt;&#xD;
&lt;p&gt;CC.Net下载地址：&lt;a title="http://sourceforge.net/projects/ccnet/" href="http://sourceforge.net/projects/ccnet/"&gt;http://sourceforge.net/projects/ccnet/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;CCTray下载地址：&lt;a title="http://ccnetlive.thoughtworks.com/ccnet/CCTrayDownload.aspx" href="http://ccnetlive.thoughtworks.com/ccnet/CCTrayDownload.aspx"&gt;http://ccnetlive.thoughtworks.com/ccnet/CCTrayDownload.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;CCNetConfig下载地址：&lt;a title="http://ccnetconfig.codeplex.com/" href="http://ccnetconfig.codeplex.com/"&gt;http://ccnetconfig.codeplex.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;接着说NAnt，相对于CC.NET，NAnt则更注重于Build的运行，而非Build的管理。不得不提的是，NAnt是一个半移植半借鉴项目，来源于Java的Ant工具，但是NAnt的很多插件是为微软编程平台特地设计的，比如regasm，所以不能说它是一个完全移植的项目。NAnt虽然只提供了nant.exe一个可执行文件，但是它内部有很多插件，如copy, exec, cvs, zip, tar, unzip, mail, regasm等，这些都是编译时常用的，另外它的脚本引擎系统可以基于xml写执行和编译脚本，功能绝对不亚于我们平时常用的bat或powershell，还有大量的分支逻辑语句，如if, ifnot, foreach, call等，这些绝对是CC.NET目前望尘莫及的。由于使用日渐频繁，开源社区又为Nant提供了一个重要的增加组件&amp;#8212;&amp;#8212;NAnt.Contrib，这个东西说白了其实就是一些自定义的NAnt Task的集合，但确实提供了不少有用的东西，比如支持vb6, msbuild, adsi, depends, ini, sql, svn, vss, registry等任务，在实际应用中这些任务的执行也是不可或缺的，所以在接下来的文章中我会连带介绍Nant.Contrib的使用。&lt;/p&gt;&#xD;
&lt;p&gt;NAnt下载地址：&lt;a title="http://nant.sourceforge.net/" href="http://nant.sourceforge.net/"&gt;http://nant.sourceforge.net/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;NAnt-contrib下载地址：&lt;a title="http://nantcontrib.sourceforge.net/" href="http://nantcontrib.sourceforge.net/"&gt;http://nantcontrib.sourceforge.net/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下面是一个最简单Hello World NAnt脚本，我把它取名为helloworld.build。&lt;/p&gt;&#xD;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="1.0"&lt;/span&gt;?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;project&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="NPOI"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;echo&lt;/span&gt; &lt;span style="color: #ff0000"&gt;message&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Hello World!"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;project&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;p&gt;上面这段代码的意思是显示Hello world!，项目名称叫NPOI。运行结果如下：&lt;/p&gt;&#xD;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;C:\Documents and Settings\Administrator&amp;gt;nant -buildfile:c:\scm\buildfiles\hellow&#xD;
orld.build&#xD;
NAnt 0.90 (Build 0.90.3780.0; release; 2010-5-8)&#xD;
Copyright (C) 2001-2010 Gerry Shaw&#xD;
http://nant.sourceforge.net&#xD;
&#xD;
Buildfile: file:///c:/scm/buildfiles/helloworld.build&#xD;
Target framework: Microsoft .NET Framework 2.0&#xD;
&#xD;
     [echo] Hello World!&#xD;
&#xD;
BUILD SUCCEEDED&#xD;
&#xD;
Total time: 0 seconds.&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;p&gt;Nant指定build文件时必须使用-buildfile标签，你会看到最后有一句BUILD SUCCESSED，这表示整个build过程中没有任何错误，一旦有错误就会出现BUILD FAILED，整个build会停止，不会继续执行下去。&lt;/p&gt;&#xD;
&lt;p&gt;当然这是最最简单的build文件，复杂的build逻辑可能需要上千行的代码，我们会在接下来的文章中慢慢讲解。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font color="#d16349"&gt;Starcite上海招聘Java工程师/QA，具体要求请见&lt;/font&gt;&lt;/strong&gt;&lt;a title="http://job.cnblogs.com/Offer/EnterpriseInfo.aspx?key=3743" href="http://job.cnblogs.com/Offer/EnterpriseInfo.aspx?key=3743"&gt;&lt;strong&gt;&lt;font color="#d16349"&gt;http://job.cnblogs.com/Offer/EnterpriseInfo.aspx?key=3743&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/tonyqus/aggbug/1932507.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/tonyqus/archive/2011/01/24/1932507.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/tonyqus/archive/2010/10/31/jquery_tdd_qunit.html</id><title type="text">jQuery的TDD框架 - QUnit</title><summary type="text">本文主要介绍jQuery核心团队开发的TDD框架——QUnit，通过简单的介绍让大家能够很快上手。</summary><published>2010-10-31T02:37:00Z</published><updated>2010-10-31T02:37:00Z</updated><author><name>Tony  Qu</name><uri>http://www.cnblogs.com/tonyqus/</uri></author><link rel="alternate" href="http://www.cnblogs.com/tonyqus/archive/2010/10/31/jquery_tdd_qunit.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/tonyqus/archive/2010/10/31/jquery_tdd_qunit.html"/><content type="html">&lt;p&gt;作者：Tony Qu&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;我今天只讨论基于JavaScript的TDD，可能有些公司是用C#做js单元测试的，但我不认为这是个好主意，很多js运行时的东西让js来返回会更直观，且易于维护。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;在讨论jQuery TDD之前，我们先来了解下什么才是一个标准的TDD框架。作为标准的TDD框架，必须满足这么几个要求：&lt;/p&gt;  &lt;p&gt;1. 即使测试脚本出错了也要能继续运行接下来的脚本&lt;/p&gt;  &lt;p&gt;2. 能够不依赖被测试代码写测试用例，即使代码没有实现也可以先写测试用例&lt;/p&gt;  &lt;p&gt;3. 能够显示详细的错误信息和位置&lt;/p&gt;  &lt;p&gt;4. 能够统计通过和未通过的用例的数量&lt;/p&gt;  &lt;p&gt;5. 有专门的可视化界面用于统计和跟踪测试用例&lt;/p&gt;  &lt;p&gt;6. 易于上手，通过一些简单的指导就可以马上开始写测试代码。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;以上这些要求QUnit都做到了， 这也是我推荐QUnit的原因。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;QUnit目前已经可以脱离jQuery独立运行，这也是它成功的另外一个原因，即兼容性好，其实严格意义上它已经不是一个jQuery的测试框架了，而是JavaScript测试框架。有意思的是你会发现QUnit的注释曾经发生过微小的变化，如下&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/WindowsLiveWriter/b3c5301eb9e5_6CFA/QUnit_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="QUnit" border="0" alt="QUnit" src="http://images.cnblogs.com/cnblogs_com/tonyqus/WindowsLiveWriter/b3c5301eb9e5_6CFA/QUnit_thumb.gif" width="644" height="129" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;这也说明QUnit的代码是做过专门的调整，使之能脱离JQuery运行。&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;u&gt;下载Qunit&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;下载qunit的代码可以去&lt;a title="http://github.com/jquery/qunit" href="http://github.com/jquery/qunit"&gt;http://github.com/jquery/qunit&lt;/a&gt;，那里的代码是最新的。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;如何使用QUnit&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;使用QUnit很简单，只需要下面这些html代码，初始的设置就完成了。&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000"&gt;PUBLIC&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;My Foo Tests&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;    &#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;link&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;qunit.css&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;stylesheet&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;    &#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;language&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;javascript&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;jquery-1.4.2.js&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;language&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;javascript&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;qunit.js&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;h1&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;qunit-header&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;QUnit Test Suite&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;h1&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;  &#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;h2&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;qunit-banner&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;h2&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;  &#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;qunit-testrunner-toolbar&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;  &#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;h2&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;qunit-userAgent&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;h2&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;  &#xD;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ol&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;qunit-tests&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ol&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;  &#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;QUnit不仅仅为你提供了测试脚本函数，还为你的单元测试提供了一个标准化的测试界面，如下图所示，红色的表示这个测试用例没有通过，绿色的表示通过。每一个框比表示一个测试函数，里面可能有多个断言语句的结果，标题中（x,y,z）表示总共有z个断言，y个是正确的，x个是错误的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/WindowsLiveWriter/b3c5301eb9e5_6CFA/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/WindowsLiveWriter/b3c5301eb9e5_6CFA/image_thumb.png" width="598" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;刚才只是初步看了下界面，现在我们来学习如何使用，我从&lt;a title="http://github.com/jquery/jquery/raw/master/test/unit/core.js" href="http://github.com/jquery/jquery/raw/master/test/unit/core.js"&gt;http://github.com/jquery/jquery/raw/master/test/unit/core.js&lt;/a&gt;下载了一个core.js的范例测试代码，这个是jQuery用来测试它的核心模块的代码。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;中加入&amp;lt;script language=&amp;quot;javascript&amp;quot; src=&amp;quot;core.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;，注意一定要在qunit.js声明后面，因为core.js中用到了qunit.js定义的函数。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这时你再运行刚才我们创建的html文件，你就会看到类似上图的结果，这就是core.js的测试结果，是不是一清二楚？如果是测试你自己的函数，你就可以根据红色的错误提示跟踪问题所在，直到把所有的测试结果都变成绿色。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;u&gt;&lt;/u&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;u&gt;&lt;/u&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;u&gt;&lt;/u&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;u&gt;测试脚本怎么写&lt;/u&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;测试脚本的写法，我建议你参考&lt;a title="http://docs.jquery.com/Qunit#Reference_Test_Suites" href="http://docs.jquery.com/Qunit#Reference_Test_Suites"&gt;http://docs.jquery.com/Qunit#Reference_Test_Suites&lt;/a&gt;，这里面有提到一些测试用例的文件，你可以通过它们来研究怎么写测试用例，尽管有些测试用例已经跑不通了。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;比较常用的函数有：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;expect(amount) - 指定某个函数中会有多少个断言，通常写在测试函数开头。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;module(name) - 模块是测试函数的集合，使用该函数可以在UI中将测试函数按模块归类。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;ok(state, message) – 布尔型断言，message是专门显示在QUnit界面上，用来区分不同的断言的&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;equals(actual, expected, message) - 相等断言，actual和expected的值相等时才能通过。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;same(actual, expected, message) - 完全相等断言，和equals的区别在于它会比较子元素，对于数组和一些自定义对象的比较十分有用。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这些是最常用的，其他的大家可以自己参考Qunit官方文档。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;u&gt;第一个QUnit测试用例&lt;/u&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;假设我们写个这样的函数，计算a+b的结果，如下&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; CalculateAPlusB(a,b)&#xD;
{&#xD;
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; a+b;&#xD;
}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;在页面中加入一个单独的js引用专门用来写单元测试的function，比如叫test.js&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;lt;script language=&lt;span style="color: #006080"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt; src=&lt;span style="color: #006080"&gt;&amp;quot;test.js&amp;quot;&lt;/span&gt; type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;具体的测试代码如下&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;test(&lt;span style="color: #006080"&gt;&amp;quot;basic calculation&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;() {&#xD;
        equals(CalculateAPlusB(1,5),6,&lt;span style="color: #006080"&gt;&amp;quot;1+5=6&amp;quot;&lt;/span&gt;);&#xD;
        equals(CalculateAPlusB(1.2,5.5),6.7,&lt;span style="color: #006080"&gt;&amp;quot;1.2+5.5=6.7&amp;quot;&lt;/span&gt;);&#xD;
        equals(CalculateAPlusB(-1,10),9,&lt;span style="color: #006080"&gt;&amp;quot;-1+10=9&amp;quot;&lt;/span&gt;);&#xD;
    });&#xD;
&#xD;
test(&lt;span style="color: #006080"&gt;&amp;quot;pass null test&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;() {&#xD;
        ok(isNaN(CalculateAPlusB(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,5)),&lt;span style="color: #006080"&gt;&amp;quot;pass null as the first argument&amp;quot;&lt;/span&gt;);&#xD;
        ok(isNaN(CalculateAPlusB(5,&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)),&lt;span style="color: #006080"&gt;&amp;quot;pass null as the second argument&amp;quot;&lt;/span&gt;);&#xD;
        ok(isNaN(CalculateAPlusB(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)),&lt;span style="color: #006080"&gt;&amp;quot;no argument pass in&amp;quot;&lt;/span&gt;);&#xD;
    });&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;其中test方法是qunit用来定义测试方法的语句，其第一个参数表示这个测试用例的名称，第二个参数就是具体的实现。equals是用来比较期望值和实际值是否一致，ok是用来判断结果是否为真。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;u&gt;&lt;/u&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如果一切顺利，你将看到类似下面的结果。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/WindowsLiveWriter/b3c5301eb9e5_6CFA/qunit1_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="qunit1" border="0" alt="qunit1" src="http://images.cnblogs.com/cnblogs_com/tonyqus/WindowsLiveWriter/b3c5301eb9e5_6CFA/qunit1_thumb.jpg" width="640" height="366" /&gt;&lt;/a&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这时应该恭喜自己，因为所有的测试结果都是绿颜色的，这表示这些测试都通过了。 当然这里只是举2个例子，你可以写更多的测试用例来测试这个方法，比如测测值溢出的情况。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;u&gt;参考资料&lt;/u&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://www.lostechies.com/blogs/chad_myers/archive/2008/08/28/getting-started-with-jquery-qunit-for-client-side-javascript-testing.aspx" href="http://www.lostechies.com/blogs/chad_myers/archive/2008/08/28/getting-started-with-jquery-qunit-for-client-side-javascript-testing.aspx"&gt;http://www.lostechies.com/blogs/chad_myers/archive/2008/08/28/getting-started-with-jquery-qunit-for-client-side-javascript-testing.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://docs.jquery.com/Qunit"&gt;http://docs.jquery.com/Qunit&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://www.swift-lizard.com/2009/11/24/test-driven-development-with-jquery-qunit/" href="http://www.swift-lizard.com/2009/11/24/test-driven-development-with-jquery-qunit/"&gt;http://www.swift-lizard.com/2009/11/24/test-driven-development-with-jquery-qunit/&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://www.agiledata.org/essays/tdd.html" href="http://www.agiledata.org/essays/tdd.html"&gt;http://www.agiledata.org/essays/tdd.html&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://www.oncoding.cn/2010/javascript-unit-testing-qunit/" href="http://www.oncoding.cn/2010/javascript-unit-testing-qunit/"&gt;http://www.oncoding.cn/2010/javascript-unit-testing-qunit/&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;font color="#800000"&gt;广告：长期招聘.NET职位，上海、北京、大连均有职位，有兴趣请发简历到 &lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/WindowsLiveWriter/b3c5301eb9e5_6CFA/r_gmailicon_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="r_gmailicon" border="0" alt="r_gmailicon" src="http://images.cnblogs.com/cnblogs_com/tonyqus/WindowsLiveWriter/b3c5301eb9e5_6CFA/r_gmailicon_thumb.jpg" width="161" height="21" /&gt;&lt;/a&gt; &lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/tonyqus/aggbug/1848420.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/tonyqus/archive/2010/10/31/jquery_tdd_qunit.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/tonyqus/archive/2010/09/15/aspmvc_vs_wcsf.html</id><title type="text">WCSF vs ASP.NET MVC</title><summary type="text">相对于ASP.NET MVC，WCSF显得默默无闻许多，可能大部分人没有听到过这个框架，但是它确实存在，而且是pattern&amp;practice team的大作。</summary><published>2010-09-15T15:23:00Z</published><updated>2010-09-15T15:23:00Z</updated><author><name>Tony  Qu</name><uri>http://www.cnblogs.com/tonyqus/</uri></author><link rel="alternate" href="http://www.cnblogs.com/tonyqus/archive/2010/09/15/aspmvc_vs_wcsf.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/tonyqus/archive/2010/09/15/aspmvc_vs_wcsf.html"/><content type="html">&lt;p&gt;前段时间有个兄弟问我wcsf的问题，说实话，第一次听到这玩意，我一开始还以为他说wcf呢，寒。网上一搜，哦~~原来这是practice and pattern team的大作，于是用了两周的时间研究了一把，发觉这套东西的确很强，由于那个兄弟是要为自己的公司选架构，所以我就趁此机会分析了下他们的异同和优缺点。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;WCSF是啥？&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;WCSF全称Web Client Software Factory, 貌似08年就已经很成熟了，最近还出了vs2010版，可惜我机器上vs2010死活装不上去，老报2908和1935（已在microsoft connect上提交bug，希望vs team会瞧一眼），所以只能看基于vs2008的wcsf，其实vs2005 wcsf也是支持的。尽管这套框架很成熟，但似乎国内很少有人讨论，即使是国外的blog也只有少数几个作者在写教程，不知道是推广没做好还是啥原因。&lt;/p&gt;&#xD;
&lt;p&gt;详见&lt;a title="http://msdn.microsoft.com/en-us/library/ff648752.aspx" href="http://msdn.microsoft.com/en-us/library/ff648752.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff648752.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="http://stackoverflow.com/questions/1729810/wcsf-reading-materials" href="http://stackoverflow.com/questions/1729810/wcsf-reading-materials"&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;ASP.NET MVC是啥？&lt;/strong&gt; &#xD;
&lt;p&gt;ASP.NET MVC是微软最新推出的web编程框架，从名字就可以看出MVC模式是这个框架的重点。这是微软重点推的开发框架，目前已经出了2.0版。&lt;/p&gt;&#xD;
&lt;p&gt;详见&lt;a title="http://www.asp.net/mvc" href="http://www.asp.net/mvc"&gt;http://www.asp.net/mvc&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;以下是功能对照表（如有不全或欠妥的请在回复中补充，谢谢）&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="2" width="800"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;WCSF&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;ASP.NET MVC&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;开发模式&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;MVP&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;MVC&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;开发指导文档 (官方)&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;有&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;有&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;开发指导文档 (民间)&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;少&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;多&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;测试指导文档（官方）&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;有&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;有&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;测试指导文档（民间）&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;少&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;多&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;开发平台支持&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;vs2005, vs2008, vs2010&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;vs2008 sp1, vs2010&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;使用ASP.NET web controls&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;能&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;不能&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;模块化加载&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;支持&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;无&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;Web视图引擎&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;无&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;好多&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;模板引擎&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;有&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;有&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;页面流程控制&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;有&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;无&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;内嵌MockObject&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;有&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;无&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;支持master page&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;支持&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;支持&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;安全认证支持&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;EnterpriseLibrary.Security&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;ASP.NET安全机制&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;内嵌EnterpriseLibrary&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;是&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;否&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;页面响应机制&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;ASP.NET postback&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;url routing&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;代码与UI分离&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;强&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;较强&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;业务层单元测试&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;支持，并有详细指导文档&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;支持&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;UI层（Controller, Presenter）单元测试&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;支持&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;支持，有详细文档&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;前台(javascript)单元测试&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;无，需自己开发&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;无，需自己开发&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="266"&gt;javascript库&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;无自带库，但可根据需要嵌入&lt;/td&gt;&#xD;
&lt;td valign="top" width="266"&gt;jquery, asp.net ajax framework&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下面有些stackoverflow的讨论帖，大家可以参考&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="http://stackoverflow.com/questions/53479/asp-net-mvc-vs-web-client-software-factory-wcsf" href="http://stackoverflow.com/questions/53479/asp-net-mvc-vs-web-client-software-factory-wcsf"&gt;http://stackoverflow.com/questions/53479/asp-net-mvc-vs-web-client-software-factory-wcsf&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="http://stackoverflow.com/questions/170799/is-net-wcsf-the-way-to-go" href="http://stackoverflow.com/questions/170799/is-net-wcsf-the-way-to-go"&gt;http://stackoverflow.com/questions/170799/is-net-wcsf-the-way-to-go&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="http://stackoverflow.com/questions/1729810/wcsf-reading-materials" href="http://stackoverflow.com/questions/1729810/wcsf-reading-materials"&gt;http://stackoverflow.com/questions/1729810/wcsf-reading-materials&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;说到架构选择，我们就不得不提几个必须考虑的问题：&lt;/p&gt;&#xD;
&lt;p&gt;1. 雇佣成本&lt;/p&gt;&#xD;
&lt;p&gt;这个是做任何事必须要考虑的问题，对于公司来说降低成本是非常重要的（虽然大公司有很多钱可以烧，也有闲人可以养），HR和老板应该会对这个很感兴趣。从目前来看，WCSF由于国内使用的人较少，其雇佣成本会略高于ASP.NET MVC，并且使用WCSF的人对于架构的理解可能要比ASP.NET MVC更加深入些，毕竟ASP.NET MVC的架构远比WCSF简单，当然这也间接说明ASP.NET MVC架构的透明度做得比WCSF要好，能够让一些初级程序员不需要知道具体实现就可以使用它。&lt;/p&gt;&#xD;
&lt;p&gt;2. 培训成本&lt;/p&gt;&#xD;
&lt;p&gt;从目前的文档情况来看，wcsf的文档（包括民间blog）远少于ASP.NET mvc，再加上WCSF把很多东西都包括了进去，所以其培训成本将远高于ASP.NET MVC。另外，由于微软重点推广ASP.NET MVC，似乎只要是用ASP.NET的人基本都知道ASP.NET MVC，或多或少会有些概念。另外由于ASP.NET MVC支持多种web视图引擎，从一定意义上讲，这会降低一定的培训成本，因为不排除有些程序员曾经使用过其他平台上的视图引擎，转过来会很方便。&lt;/p&gt;&#xD;
&lt;p&gt;3. 性能&lt;/p&gt;&#xD;
&lt;p&gt;但从这两个架构来说，并不存在很明显的性能差别，这主要还是取决于使用的人。在使用WCSF的时候，必须注意ViewState的使用，一旦ViewState泛滥，将直接导致页面过大，而引起性能下降。另外，wcsf使用了Object Builder，所以必须考虑其构建对象的性能，并对一些对象做适当的缓存处理，以减少反射带来的性能影响（据说WCSF新版本使用了DynamicMethod，这东西的性能我测过，确实能比反射快很多）。ASP.NET MVC由于架构相对简单，也没有ViewState，就目前来看不会有性能问题，当然最终的性能还是取决于开发的代码质量。&lt;/p&gt;&#xD;
&lt;p&gt;4. 可扩展性&lt;/p&gt;&#xD;
&lt;p&gt;WCSF在可扩展性方面更胜一筹，因为它为你提供了很多选择，比如说模块化加载、页面流程控制、Guidance Automation，以及Enterprise Library本身提供的各种扩展功能，并且这些功能在WCSF的文档中已经有了很明确的指示，谁该用哪些功能，例如架构师应该用Guidance Automation Tookit和Guidance Automation Extension，而开发人员应该使用Automation Package，并且这些东西能与VS完美融合，这样也可以在无形中限制初中级开发人员的行为，而不是让他们&amp;#8220;为所欲为&amp;#8221;。ASP.NET MVC尽管也提供了例如Area、模板引擎，但其文档并没有明确指出架构师应该负责哪些部分，并且也没有和VS融合，只能通过文档来约束开发人员的行为和代码。&lt;/p&gt;&#xD;
&lt;p&gt;5. 可测试性&lt;/p&gt;&#xD;
&lt;p&gt;从白盒测试角度看，这两个东西的可测试性基本相当。ASP.NET MVC由于MVC模式本身的优势，基于Controller、Model和HtmlHelper的单元测试很容易写，基本没有什么限制，只是View的测试就相对比较困难。而WCSF由于采用了MVP模式，尽管提升了UI和代码分离的程度，但是做Presenter的事件测试稍微麻烦一点，但总体不影响单元测试的进行。&lt;/p&gt;&#xD;
&lt;p&gt;6. 后期维护成本&lt;/p&gt;&#xD;
&lt;p&gt;（这个就目前我对这两样东西的了解，还很难做出比较合理的分析，也没有具体实践的项目，如果有兄弟有较好的分析方法可以写在回复中。）&lt;/p&gt;&#xD;
&lt;p&gt;7. 移植成本&lt;/p&gt;&#xD;
&lt;p&gt;如果公司以前采用的是ASP进行编码，转换成WCSF和ASP.NET MVC的成本基本相当，说白了都是重新写。如果公司以前有过分层设计，且假设有服务层、业务逻辑层、数据层三层，那么业务逻辑层和数据层基本可以不动，但是服务层会有所变化，主要要适应新的调用方式，以及实现接口。相对而言，由于ASP.NET MVC没有实现太多的东西，相对WCSF而言，从以前的代码移植到ASP.NET MVC反而相对容易些，这和之前提到的培训成本也是有关系的，尽管我们要自己搭一些架构，比如身份认证、权限控制、流程控制等。当然有人会指责这有&amp;#8220;重新发明轮子&amp;#8221;的嫌疑。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;以上有说的不对的地方还请各位多包涵，并指出，谢谢。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/tonyqus/aggbug/1813274.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/tonyqus/archive/2010/09/15/aspmvc_vs_wcsf.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/tonyqus/archive/2010/08/15/1800168.html</id><title type="text">中国技术界怪相</title><summary type="text">声明：本文未经许可不得转载。看了quitgame写的《Java程序员和.NET程序员》，不是很爽，本来想写驳文，但后来想想没啥意思，因为我觉得没必要、也比较无聊。看完此文，我得出的结论是a. quitgame应该是java程序员（结果他说自己是.net程序员，我晕）b. quitgame自我感觉良好，可能是因为有个2-3年经验，看过一些东西（设计模式等），也知道Iocc. quitgame打心底里...</summary><published>2010-08-15T11:47:00Z</published><updated>2010-08-15T11:47:00Z</updated><author><name>Tony  Qu</name><uri>http://www.cnblogs.com/tonyqus/</uri></author><link rel="alternate" href="http://www.cnblogs.com/tonyqus/archive/2010/08/15/1800168.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/tonyqus/archive/2010/08/15/1800168.html"/><content type="html">&lt;p&gt;声明：本文未经许可不得转载。&lt;/p&gt;&#xD;
&lt;p&gt;看了quitgame写的《Java程序员和.NET程序员》，不是很爽，本来想写驳文，但后来想想没啥意思，因为我觉得没必要、也比较无聊。看完此文，我得出的结论是&lt;/p&gt;&#xD;
&lt;p&gt;a. quitgame应该是java程序员（结果他说自己是.net程序员，我晕）&lt;/p&gt;&#xD;
&lt;p&gt;b. quitgame自我感觉良好，可能是因为有个2-3年经验，看过一些东西（设计模式等），也知道Ioc&lt;/p&gt;&#xD;
&lt;p&gt;c. quitgame打心底里觉得.net程序员不如java程序员&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;quitgame文中的观点我基本都不认同，因为我作为.net程序员这些我都会，而且我平时不喜欢用Visual Studio，因为比较吃内存，我更喜欢用UltraEdit。总之我觉得quitgame写这篇文章非常无聊，动机不明，当然这只能说明quitgame本人心态有问题，和其他java程序员无关。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我之所以写这篇文章，我的目的很明确，希望中国程序员早日提高素质，少写无聊文章，有时间讨论哪种语言好，哪种语言的程序员优秀，不如自己写点东西来丰富自己支持的社区。我的观点是，语言本无好坏，语言本身只是工具，就好比你说英语好还是中文好，如果你觉得java比.net有前途，那就请去投身java阵营，反之亦然，但要说哪种语言好，我觉得都差不多，java的很多语言特性和.net是很像的，跨平台方面其实微软要做是完全做得出来的（现在也有了mono），只是目前的行业市场份额相对而言是java占优势，特别是金融、银行、保险等领域，.net基本没有份额，但这并不代表.net不如java，只是市场的需求而已。所以有人说java程序员工资比.net高，这和行业是很有关系的，当然也和公司的业绩有关，和语言基本没有关系。&lt;/p&gt;&#xD;
&lt;p&gt;其实，我也觉得这篇文章有些无聊，但是我认为该反省思考的时候还是要反省、要思考，即使这种文章看似和你的技术提高完全没有关系。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;中国技术界的一些怪相： &lt;/p&gt;&#xD;
&lt;p&gt;a. 有些人往往比较喜欢宣扬自己会用什么，比如hibernate, structs,nginx,wcf, wpf等，貌似比别人多懂一个名词就很了不起了。但很少有中国程序员想到自己需要创造一些类库，而不仅仅是使用，或者想到应该为开源社区多做点贡献，似乎相当一部分人觉得创造是其他人的事，和我无关，除非老板要求我这么做。&lt;/p&gt;&#xD;
&lt;p&gt;b. 有些人喜欢在社区里说某人或者某团体低俗、怎么怎么差，却从来不以事实为依据，很多时候讨论技术到最后变成人身攻击。&lt;/p&gt;&#xD;
&lt;p&gt;c. 有些人喜欢拿计算机书当圣旨，甚至有走火入魔之嫌，我曾经见过某程序员一边看《架构之美》，一边改公司的系统（他说这叫重构）却完全没有征得主管的同意，并偷偷将代码签入，结果害好几个同事帮他擦屁股。其实技术书永远只是参考，要有选择有目的的去看，不能盲从。&lt;/p&gt;&#xD;
&lt;p&gt;d. 有些人稍微学了点皮毛，就拿着鸡毛当利剑，写了本书，也有了不少粉丝，但国内技术书真正好的有几本？大家自己心里清楚。而且国内的技术书有一个让人哭笑不得的规矩，要看这书你必须知道某某技术、了解某某环境，如果你不知道，看这书恐怕会很累，但知道这些东西的人，基本可以不用看这书。&lt;/p&gt;&#xD;
&lt;p&gt;e. 中国的有些技术书的书名让人看到很激动，但是买完回去阅读之后却发觉完全不是那么回事，比如说《XX宝典》、《xx必备手册》、《xx锦囊》、《xx深入浅出》，很多人到最后发觉国内的书基本没法看或者不用看，还是看原版书比较清楚，比较易懂，当然前提是你英语水平过关。&lt;/p&gt;&#xD;
&lt;p&gt;f. 现在人头外包公司满天飞，也没人来管一管，不知道大家有没有发觉一个现象，这些外包公司接的都是些什么活呢？基本都是非常外围，可有可无的业务，假设这些外资都走了，给我们留下了什么吗？什么都没有，进去干活的人出来后可能水平还没有进去的时候高。但似乎外包公司的高管不在乎这一点，他们只关心能赚多少差价，为了实现利润最大化，一些外包公司甚至不惜牺牲员工的福利，他们似乎腰杆很值：反正我没有违反劳动法！&lt;/p&gt;&#xD;
&lt;p&gt;g. 国内的程序员活得很累，只要是工作无论什么都愿意做，他们经常加班到深夜，相当一部分公司不提供加班补助或换休，他们认为这是应该的。国外的程序员很多人本职工作不是程序员，他们只是把写程序作为一种爱好，我曾经见过F22飞行员去微软做程序员，真的很有趣。&lt;/p&gt;&#xD;
&lt;p&gt;h. 现在很多IT人扎堆去读在职研究生（读软件工程的极多），但我发觉一个很有趣的现象，很多人名义上是读书，但是很少去上课，到了快毕业了天天为毕业论文发愁，难道这2-3年你就一点灵感都没有？然后就出钱去买论文，要么就是报流水账，把自己公司系统的业务需求拷贝上去一大段。但有意思的是，我很少听到有人因为旷课或论文抄袭被取消文凭的，真不知道是拿文凭还是送文凭？现在的研究生论文恐怕连本科生论文都不如，经常看到《xxx系统详细实现》、《xxx技术在xx系统中的应用》，我记得以前有规定说研究生论文必须不能太过于应用化，要有理论深度，不知道啥时候改规则了？要说野鸡大学，我看国内比国外好不了多少。&lt;/p&gt;&#xD;
&lt;p&gt;i. 很多人只要钱多的公司就去，却不去了解一下这些公司是干什么的，有没有对社会造成危害，说白了这是个择业观的问题。比如说我是不去日本公司和做网游业务的公司，不去日本公司是因为我不想为小日本干活（尽管日资企业钱很多），不去网游公司是因为网游对青少年危害太大了，不想自作孽不可活，我也从来不认同&amp;#8220;所谓网游无害论&amp;#8221;。某高僧说过：尽管网游创造的是虚拟场景，但是打打杀杀死了以后还是要下十八层地狱的。&lt;/p&gt;&#xD;
&lt;p&gt;j. 技术社区/博客不应该出现非技术的文章。这一点在博客园十分突出，也不知道是谁定的规矩，其实有些国外牛人的blog经常会出现他们怎么生活、怎么建造自己的房子的文章，蛮有意思的，人家那叫活得惬意。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;希望大家看完此文，对号入座，有则改之，无则保持。如本文得罪了某某人或某某公司，我只能表示歉意，我没有得罪你们的意思，只是想让更多的人醒来。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/tonyqus/aggbug/1800168.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/tonyqus/archive/2010/08/15/1800168.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/tonyqus/archive/2010/06/03/html_editor_paste_filter2.html</id><title type="text">在线Html编辑器粘贴过滤技术详解（二）</title><summary type="text">在本文中，你将学习如何通过正则表达式在JavaScript中过滤粘贴进来的东西</summary><published>2010-06-03T14:35:00Z</published><updated>2010-06-03T14:35:00Z</updated><author><name>Tony  Qu</name><uri>http://www.cnblogs.com/tonyqus/</uri></author><link rel="alternate" href="http://www.cnblogs.com/tonyqus/archive/2010/06/03/html_editor_paste_filter2.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/tonyqus/archive/2010/06/03/html_editor_paste_filter2.html"/><content type="html">&lt;p&gt;作者：Tony Qu&lt;/p&gt;  &lt;p&gt;本章我们将来说一说filterPasteData函数的实现。&lt;/p&gt;  &lt;p&gt;上篇中提到我们采用的粘贴方式是浏览器自己提供的，只是使用了不少技巧，使得粘贴的东西不直接进入Html编辑器的iframe，所以从某种意义上讲，我们获得的粘贴数据内容都是html。根据我们之前所说的三种需求，文本、html以及Word内容，我们可以把过滤的内容分为两大类：&lt;/p&gt;  &lt;p&gt;a. html&lt;/p&gt;  &lt;p&gt;b. Word xml&lt;/p&gt;  &lt;p&gt;之所以纯文本可以当做html就是因为贴进来就是当html处理了，只不过是不带标签的html。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;说到过滤，自然要做匹配和替换，于是我们很自然的想到了正则表达式，先来处理比较简单的html过滤。我定义了以下一些规则：&lt;/p&gt;  &lt;p&gt;* 移除html, body, form, doctype, head, script,style, textarea, button,select, option, input,span标签&lt;/p&gt;  &lt;p&gt;* 移除id, name, class, language,type属性&lt;/p&gt;  &lt;p&gt;* 移除on开头的属性，如onclick&lt;/p&gt;  &lt;p&gt;* 移除a, table, tr,td,tbody, thead, th, img,input,iframe, div标签（我们的系统中不支持table）&lt;/p&gt;  &lt;p&gt;* 移除换行符（\n, \r）&lt;/p&gt;  &lt;p&gt;以上这些标签都是要移除的对象，因为它们并没有给系统带来任何好处，还会降低安全性。当然根据实际需要，你可以适当保留一些标签，比如select, button, input, img, table等&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; FilterPasteText(str)&#xD;
{&#xD;
    str = str.replace(/\r\n|\n|\r/ig, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove html body form&lt;/span&gt;&#xD;
    str = str.replace(/&amp;lt;\/?(html|body|form)(?=[\s\/&amp;gt;])[^&amp;gt;]*&amp;gt;/ig, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove doctype&lt;/span&gt;&#xD;
    str = str.replace(/&amp;lt;(!DOCTYPE)(\n|.)*?&amp;gt;/ig, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove xml tags&lt;/span&gt;&#xD;
    str = str.replace(/&amp;lt;(\/?(\?xml(:\w+)?|xml|\w+:\w+)(?=[\s\/&amp;gt;]))[^&amp;gt;]*&amp;gt;/gi,&lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove head&lt;/span&gt;&#xD;
    str = str.replace(/&amp;lt;head[^&amp;gt;]*&amp;gt;(\n|.)*?&amp;lt;\/head&amp;gt;/ig, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove &amp;lt;xxx /&amp;gt; &lt;/span&gt;&#xD;
    str = str.replace(/&amp;lt;(script|style|link|title|meta|textarea|option|select|iframe|hr)(\n|.)*?\/&amp;gt;/ig, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove empty span&lt;/span&gt;&#xD;
    str = str.replace(/&amp;lt;span[^&amp;gt;]*?&amp;gt;&amp;lt;\/span&amp;gt;/ig, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove &amp;lt;xxx&amp;gt;...&amp;lt;/xxx&amp;gt;&lt;/span&gt;&#xD;
    str = str.replace(/&amp;lt;(head|script|style|textarea|button|select|option|iframe)[^&amp;gt;]*&amp;gt;(\n|.)*?&amp;lt;\/\1&amp;gt;/ig, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove table and &amp;lt;a&amp;gt; tag, &amp;lt;img&amp;gt; tag,&amp;lt;input&amp;gt; tag (this can help filter unclosed tag)&lt;/span&gt;&#xD;
    str = str.replace(/&amp;lt;\/?(a|table|tr|td|tbody|thead|th|img|input|iframe|div)[^&amp;gt;]*&amp;gt;/ig, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove bad attributes&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;do&lt;/span&gt; {&#xD;
        len = str.length;&#xD;
        str = str.replace(/(&amp;lt;[a-z][^&amp;gt;]*\s)(?:id|name|language|type|&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;|on\w+|\w+:\w+)=(?:&lt;span style="color: #006080"&gt;&amp;quot;[^&amp;quot;&lt;/span&gt;]*&lt;span style="color: #006080"&gt;&amp;quot;|\w+)\s?/gi, &amp;quot;&lt;/span&gt;$1&amp;quot;);&#xD;
    } &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (len != str.length);&#xD;
    &#xD;
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; str;&#xD;
}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;这里str.replace(/&amp;lt;(html|body|form)[^&amp;gt;]*&amp;gt;([\s\S]+)&amp;lt;\/\1&amp;gt;/ig, &amp;#8220;$2&amp;#8221;)的意思是保留&amp;lt;html&amp;gt;&amp;lt;/html&amp;gt;里面的内容，但是移除&amp;lt;html&amp;gt;标签本身。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这里str.replace(/&amp;lt;input(\n|.)*?&amp;gt;/ig, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);的意思是移除input标签。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;以下是一些测试数据&lt;/p&gt;&#xD;
&#xD;
&lt;table border="1" cellspacing="0" cellpadding="2" width="600"&gt;&lt;tbody&gt;&#xD;
    &lt;tr&gt;&#xD;
      &lt;td valign="top" width="300"&gt;替换前&lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="300"&gt;替换后&lt;/td&gt;&#xD;
    &lt;/tr&gt;&#xD;
&#xD;
    &lt;tr&gt;&#xD;
      &lt;td valign="top" width="300"&gt;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;abc&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="300"&gt;abc&lt;/td&gt;&#xD;
    &lt;/tr&gt;&#xD;
&#xD;
    &lt;tr&gt;&#xD;
      &lt;td valign="top" width="300"&gt;&#xD;
        &lt;p&gt;&amp;lt;html&amp;gt; &#xD;
          &lt;br /&gt;&amp;lt;head&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;... &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;/script&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;/head&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;body&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;... &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;/script&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;form action=&amp;quot;target.html&amp;quot;&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;abc &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;/form&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;/body&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;&#xD;
      &lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="300"&gt;abc&lt;/td&gt;&#xD;
    &lt;/tr&gt;&#xD;
&#xD;
    &lt;tr&gt;&#xD;
      &lt;td valign="top" width="300"&gt;&#xD;
        &lt;p&gt;&amp;lt;html&amp;gt; &#xD;
          &lt;br /&gt;&amp;lt;body&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;form action=&amp;quot;target.html&amp;quot;&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;table&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;tr&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;td&amp;gt;abc&amp;lt;/td&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;td&amp;gt;cde&amp;lt;/td&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;/tr&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;/table&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;/form&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;/body&amp;gt; &#xD;
&#xD;
          &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;&#xD;
      &lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="300"&gt;abccde&lt;/td&gt;&#xD;
    &lt;/tr&gt;&#xD;
  &lt;/tbody&gt;&lt;/table&gt;&#xD;
&#xD;
&lt;p&gt;好了，接下来就来讲word xml的过滤。要想过滤word xml就必须知道当前贴进来的是word的数据，而非普通html，tinymce使用了一个技巧，如下：&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; IsWordDocument(strValue)&#xD;
{&#xD;
    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; re=&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RegExp(/(&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;=\&amp;quot;?Mso|style=\&amp;quot;[^\&amp;quot;]*\bmso\-|w:WordDocument)/ig);&#xD;
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; re.test(strValue);&#xD;
}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;只要是从Word贴过来的都会有这样的标记：class=&amp;#8221;MsoNormal&amp;#8221;或&amp;lt;w:WordDocument&amp;gt;&amp;lt;/w:WordDocument&amp;gt;或style=&amp;#8221;mso-font-charset:0&amp;#8221;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;一旦检测到这样的标签，就可以认为这是从Word粘贴过来的，当然如果有人特别无聊，故意做了这样的标签或样式贴进来也没关系，因为过滤器会把没有用的东西过滤掉，那些不在规则里面的不管你是Word数据还是html数据，都尽量保留。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Word的过滤会比普通的html复杂很多，主要原因还是浏览器自动贴进来的word xml保留了很多东西，通常一段十分简单的文本数据，通过word xml表示可能字符长度要达到上万。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;举个例子：这里有一段很简单的Word文本，如下&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/tonyqus/WindowsLiveWriter/Html_10650/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/tonyqus/WindowsLiveWriter/Html_10650/image_thumb.png" width="181" height="138" /&gt;&lt;/a&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;它对应的粘贴结果却是下面这么一大段，是不是很恐怖？&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #ff0000"&gt;http-equiv&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Content-Type&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/html; charset=utf-8&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ProgId&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Word.Document&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Generator&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Microsoft Word 12&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Originator&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Microsoft Word 12&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;link&lt;/span&gt; &lt;span style="color: #ff0000"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;File-List&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;file:///C:%5CUsers%5CTony%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;link&lt;/span&gt; &lt;span style="color: #ff0000"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;themeData&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;file:///C:%5CUsers%5CTony%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;link&lt;/span&gt; &lt;span style="color: #ff0000"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;colorSchemeMapping&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;file:///C:%5CUsers%5CTony%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;[&lt;span style="color: #ff0000"&gt;if&lt;/span&gt; &lt;span style="color: #ff0000"&gt;gte&lt;/span&gt; &lt;span style="color: #ff0000"&gt;mso&lt;/span&gt; &lt;span style="color: #ff0000"&gt;9&lt;/span&gt;]&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
 &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:WordDocument&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:View&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Normal&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:View&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:Zoom&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:Zoom&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:TrackMoves&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:TrackFormatting&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:PunctuationKerning&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DrawingGridVerticalSpacing&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;7.8 磅&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DrawingGridVerticalSpacing&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DisplayHorizontalDrawingGridEvery&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DisplayHorizontalDrawingGridEvery&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DisplayVerticalDrawingGridEvery&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DisplayVerticalDrawingGridEvery&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:ValidateAgainstSchemas&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:SaveIfXMLInvalid&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;false&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:SaveIfXMLInvalid&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:IgnoreMixedContent&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;false&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:IgnoreMixedContent&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:AlwaysShowPlaceholderText&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;false&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:AlwaysShowPlaceholderText&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DoNotPromoteQF&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LidThemeOther&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;EN-US&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LidThemeOther&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LidThemeAsian&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;ZH-CN&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LidThemeAsian&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LidThemeComplexScript&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;X-NONE&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LidThemeComplexScript&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:Compatibility&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:SpaceForUL&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:BalanceSingleByteDoubleByteWidth&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DoNotLeaveBackslashAlone&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:ULTrailSpace&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DoNotExpandShiftReturn&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:AdjustLineHeightInTable&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:BreakWrappedTables&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:SnapToGridInCell&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:WrapTextWithPunct&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:UseAsianBreakRules&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DontGrowAutofit&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:SplitPgBreakAndParaMark&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DontVertAlignCellWithSp&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DontBreakConstrainedForcedTables&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:DontVertAlignInTxbx&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:Word11KerningPairs&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:CachedColBalance&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:UseFELayout&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:Compatibility&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:BrowserLevel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;MicrosoftInternetExplorer4&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:BrowserLevel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:mathPr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:mathFont&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:val&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Cambria Math&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:brkBin&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:val&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;before&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:brkBinSub&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:val&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;amp;#45;-&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:smallFrac&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:val&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;off&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:dispDef&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:lMargin&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:val&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:rMargin&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:val&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:defJc&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:val&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;centerGroup&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:wrapIndent&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:val&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1440&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:intLim&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:val&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;subSup&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;m:naryLim&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:val&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;undOvr&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;m:mathPr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:WordDocument&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;[endif]--&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;[&lt;span style="color: #ff0000"&gt;if&lt;/span&gt; &lt;span style="color: #ff0000"&gt;gte&lt;/span&gt; &lt;span style="color: #ff0000"&gt;mso&lt;/span&gt; &lt;span style="color: #ff0000"&gt;9&lt;/span&gt;]&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
 &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LatentStyles&lt;/span&gt; &lt;span style="color: #ff0000"&gt;DefLockedState&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;DefUnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&#xD;
  &lt;span style="color: #ff0000"&gt;DefSemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;DefQFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;DefPriority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;99&amp;quot;&lt;/span&gt;&#xD;
  &lt;span style="color: #ff0000"&gt;LatentStyleCount&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;267&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Normal&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;9&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;heading 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;9&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;heading 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;9&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;heading 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;9&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;heading 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;9&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;heading 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;9&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;heading 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;9&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;heading 7&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;9&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;heading 8&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;9&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;heading 9&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;39&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;toc 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;39&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;toc 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;39&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;toc 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;39&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;toc 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;39&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;toc 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;39&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;toc 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;39&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;toc 7&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;39&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;toc 8&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;39&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;toc 9&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;35&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;caption&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Title&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Default Paragraph Font&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;11&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Subtitle&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;22&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Strong&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;20&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Emphasis&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;59&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Table Grid&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Placeholder Text&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;No Spacing&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;60&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Shading&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;61&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light List&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;62&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Grid&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;63&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;64&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;65&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;66&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;67&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;68&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;69&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;70&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Dark List&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;71&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Shading&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;72&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful List&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;73&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Grid&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;60&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Shading Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;61&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light List Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;62&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Grid Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;63&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 1 Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;64&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 2 Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;65&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 1 Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Revision&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;34&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;List Paragraph&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;29&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Quote&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;30&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Intense Quote&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;66&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 2 Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;67&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 1 Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;68&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 2 Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;69&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 3 Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;70&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Dark List Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;71&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Shading Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;72&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful List Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;73&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Grid Accent 1&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;60&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Shading Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;61&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light List Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;62&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Grid Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;63&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 1 Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;64&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 2 Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;65&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 1 Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;66&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 2 Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;67&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 1 Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;68&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 2 Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;69&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 3 Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;70&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Dark List Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;71&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Shading Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;72&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful List Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;73&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Grid Accent 2&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;60&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Shading Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;61&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light List Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;62&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Grid Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;63&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 1 Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;64&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 2 Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;65&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 1 Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;66&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 2 Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;67&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 1 Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;68&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 2 Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;69&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 3 Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;70&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Dark List Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;71&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Shading Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;72&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful List Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;73&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Grid Accent 3&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;60&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Shading Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;61&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light List Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;62&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Grid Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;63&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 1 Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;64&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 2 Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;65&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 1 Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;66&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 2 Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;67&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 1 Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;68&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 2 Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;69&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 3 Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;70&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Dark List Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;71&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Shading Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;72&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful List Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;73&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Grid Accent 4&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;60&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Shading Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;61&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light List Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;62&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Grid Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;63&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 1 Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;64&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 2 Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;65&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 1 Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;66&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 2 Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;67&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 1 Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;68&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 2 Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;69&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 3 Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;70&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Dark List Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;71&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Shading Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;72&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful List Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;73&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Grid Accent 5&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;60&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Shading Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;61&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light List Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;62&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Light Grid Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;63&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 1 Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;64&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Shading 2 Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;65&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 1 Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;66&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium List 2 Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;67&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 1 Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;68&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 2 Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;69&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Medium Grid 3 Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;70&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Dark List Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;71&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Shading Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;72&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful List Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;73&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Colorful Grid Accent 6&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;19&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Subtle Emphasis&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;21&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Intense Emphasis&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;31&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Subtle Reference&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;32&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Intense Reference&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;33&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SemiHidden&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&#xD;
   &lt;span style="color: #ff0000"&gt;UnhideWhenUsed&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Book Title&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;37&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Bibliography&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LsdException&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Locked&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Priority&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;39&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;QFormat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;TOC Heading&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&#xD;
 &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;w:LatentStyles&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;[endif]--&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;&amp;lt;!--&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt; /* Font Definitions */&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt; @font-face&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {font-family:Wingdings;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    panose-1:5 0 0 0 0 0 0 0 0 0;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-charset:2;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-generic-font-family:auto;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-pitch:variable;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-signature:0 268435456 0 0 -2147483648 0;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;@font-face&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {font-family:宋体;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    panose-1:2 1 6 0 3 1 1 1 1 1;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-alt:SimSun;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-charset:134;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-generic-font-family:auto;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-pitch:variable;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-signature:3 680460288 22 0 262145 0;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;@font-face&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {font-family:&amp;quot;Cambria Math&amp;quot;;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    panose-1:2 4 5 3 5 4 6 3 2 4;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-charset:1;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-generic-font-family:roman;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-format:other;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-pitch:variable;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-signature:0 0 0 0 0 0;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;@font-face&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {font-family:Calibri;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    panose-1:2 15 5 2 2 2 4 3 2 4;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-charset:0;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-generic-font-family:swiss;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-pitch:variable;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-signature:-1610611985 1073750139 0 0 159 0;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;@font-face&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {font-family:&amp;quot;\@宋体&amp;quot;;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    panose-1:2 1 6 0 3 1 1 1 1 1;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-charset:134;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-generic-font-family:auto;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-pitch:variable;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-signature:3 680460288 22 0 262145 0;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt; /* Style Definitions */&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt; p.MsoNormal, li.MsoNormal, div.MsoNormal&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {mso-style-unhide:no;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-style-qformat:yes;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-style-parent:&amp;quot;&amp;quot;;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    margin:0cm;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    margin-bottom:.0001pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    text-align:justify;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    text-justify:inter-ideograph;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-pagination:none;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    font-size:10.5pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-bidi-font-size:11.0pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-ascii-font-family:Calibri;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-ascii-theme-font:minor-latin;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-fareast-font-family:宋体;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-fareast-theme-font:minor-fareast;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-hansi-font-family:Calibri;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-hansi-theme-font:minor-latin;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-bidi-theme-font:minor-bidi;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-kerning:1.0pt;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {mso-style-priority:34;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-style-unhide:no;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-style-qformat:yes;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    margin:0cm;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    margin-bottom:.0001pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    text-align:justify;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    text-justify:inter-ideograph;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    text-indent:21.0pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-char-indent-count:2.0;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-pagination:none;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    font-size:10.5pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-bidi-font-size:11.0pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-ascii-font-family:Calibri;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-ascii-theme-font:minor-latin;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-fareast-font-family:宋体;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-fareast-theme-font:minor-fareast;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-hansi-font-family:Calibri;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-hansi-theme-font:minor-latin;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-bidi-theme-font:minor-bidi;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-font-kerning:1.0pt;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;.MsoChpDefault&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {mso-style-type:export-only;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-default-props:yes;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-bidi-theme-font:minor-bidi;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt; /* Page Definitions */&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt; @page&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {mso-page-border-surround-header:no;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-page-border-surround-footer:no;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;@page Section1&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {size:612.0pt 792.0pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    margin:72.0pt 90.0pt 72.0pt 90.0pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-header-margin:36.0pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-footer-margin:36.0pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-paper-source:0;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;div.Section1&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {page:Section1;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt; /* List Definitions */&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt; @list l0&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {mso-list-id:1862015348;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-list-type:hybrid;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-list-template-ids:1873287652 67698689 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;@list l0:level1&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {mso-level-number-format:bullet;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-level-text:l;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-level-tab-stop:none;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    mso-level-number-position:left;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    margin-left:21.0pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    text-indent:-21.0pt;&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    font-family:Wingdings;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;ol&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {margin-bottom:0cm;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;ul&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;    {margin-bottom:0cm;}&lt;/span&gt;&#xD;
&lt;span style="color: #008000"&gt;--&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;[&lt;span style="color: #ff0000"&gt;if&lt;/span&gt; &lt;span style="color: #ff0000"&gt;gte&lt;/span&gt; &lt;span style="color: #ff0000"&gt;mso&lt;/span&gt; &lt;span style="color: #ff0000"&gt;10&lt;/span&gt;]&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
 /* Style Definitions */&#xD;
 table.MsoNormalTable&#xD;
    {mso-style-name:普通表格;&#xD;
    mso-tstyle-rowband-size:0;&#xD;
    mso-tstyle-colband-size:0;&#xD;
    mso-style-noshow:yes;&#xD;
    mso-style-priority:99;&#xD;
    mso-style-qformat:yes;&#xD;
    mso-style-parent:&amp;quot;&amp;quot;;&#xD;
    mso-padding-alt:0cm 5.4pt 0cm 5.4pt;&#xD;
    mso-para-margin:0cm;&#xD;
    mso-para-margin-bottom:.0001pt;&#xD;
    mso-pagination:widow-orphan;&#xD;
    font-size:10.5pt;&#xD;
    mso-bidi-font-size:11.0pt;&#xD;
    font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;&#xD;
    mso-ascii-font-family:Calibri;&#xD;
    mso-ascii-theme-font:minor-latin;&#xD;
    mso-hansi-font-family:Calibri;&#xD;
    mso-hansi-theme-font:minor-latin;&#xD;
    mso-font-kerning:1.0pt;}&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;[endif]--&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;MsoNormal&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;lang&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;EN-US&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Abcde&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;MsoListParagraph&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;margin-left: 21pt; text-indent: -21pt;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;[&lt;span style="color: #ff0000"&gt;if&lt;/span&gt; !&lt;span style="color: #ff0000"&gt;supportLists&lt;/span&gt;]&lt;span style="color: #ff0000"&gt;--&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: Wingdings;&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;lang&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;EN-US&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;l&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: &amp;amp;quot;Times New Roman&amp;amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;nbsp;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;[&lt;span style="color: #ff0000"&gt;endif&lt;/span&gt;]&lt;span style="color: #ff0000"&gt;--&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: 宋体;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;你好&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;MsoListParagraph&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;margin-left: 21pt; text-indent: -21pt;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;[&lt;span style="color: #ff0000"&gt;if&lt;/span&gt; !&lt;span style="color: #ff0000"&gt;supportLists&lt;/span&gt;]&lt;span style="color: #ff0000"&gt;--&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: Wingdings;&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;lang&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;EN-US&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;l&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: &amp;amp;quot;Times New Roman&amp;amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;nbsp;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;[&lt;span style="color: #ff0000"&gt;endif&lt;/span&gt;]&lt;span style="color: #ff0000"&gt;--&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;lang&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;EN-US&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Aaa&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;color: rgb(192, 0, 0);&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;aaaaaaa&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;aaaa&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;MsoListParagraph&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;margin-left: 21pt; text-indent: -21pt;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;[&lt;span style="color: #ff0000"&gt;if&lt;/span&gt; !&lt;span style="color: #ff0000"&gt;supportLists&lt;/span&gt;]&lt;span style="color: #ff0000"&gt;--&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: Wingdings;&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;lang&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;EN-US&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;l&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: &amp;amp;quot;Times New Roman&amp;amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;nbsp;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;[&lt;span style="color: #ff0000"&gt;endif&lt;/span&gt;]&lt;span style="color: #ff0000"&gt;--&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;u&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;lang&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;EN-US&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Bbbb&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;bbbb&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;bbb&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;o:p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;o:p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;u&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;MsoListParagraph&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;margin-left: 21pt; text-indent: -21pt;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;[&lt;span style="color: #ff0000"&gt;if&lt;/span&gt; !&lt;span style="color: #ff0000"&gt;supportLists&lt;/span&gt;]&lt;span style="color: #ff0000"&gt;--&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: Wingdings;&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;lang&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;EN-US&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;l&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: &amp;amp;quot;Times New Roman&amp;amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;nbsp;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;[&lt;span style="color: #ff0000"&gt;endif&lt;/span&gt;]&lt;span style="color: #ff0000"&gt;--&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;u&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;lang&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;EN-US&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Ccccccccccccc&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;o:p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;o:p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;u&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如果你原来只允许用户输入1000个字符，你在数据库里面只给了nvarchar(1000)，这就意味着这东西保存进去必然会被截断，而且可能连正文部分都没保存进去，这肯定是不允许的。这也解释了为什么主流html编辑器提供了专门的Word粘贴功能。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;上面那段东西其实真正有用的东西也就是下面这么点：&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Abcde&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;margin-left: 21pt; text-indent: -21pt;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: Wingdings;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;l&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: &amp;amp;quot;Times New Roman&amp;amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;nbsp;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: 宋体;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;你好&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;margin-left: 21pt; text-indent: -21pt;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: Wingdings;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;l&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: &amp;amp;quot;Times New Roman&amp;amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;nbsp;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Aaa&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;color: rgb(192, 0, 0);&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;aaaaaaa&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;aaaa&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;margin-left: 21pt; text-indent: -21pt;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: Wingdings;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;l&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: &amp;amp;quot;Times New Roman&amp;amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;nbsp;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;u&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Bbbb&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;bbbb&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;bbb&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;u&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;margin-left: 21pt; text-indent: -21pt;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: Wingdings;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;l&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-family: &amp;amp;quot;Times New Roman&amp;amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;nbsp;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;u&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Ccccccccccccc&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;u&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;所以这就是我们需要的过滤结果，接下来就看你JavaScript正则表达式有多牛了！&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;我主要设置了以下这些规则：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1. 去除\r\n, \n, \r&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2. 去除文本开头的&amp;amp;nbsp;和文本结尾的&amp;amp;nbsp;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3. 去除Word的条件注释（如&amp;lt;!—[if gte mso 9]&amp;gt;）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4. 去除script, xml:*, img, meta,link, style, *:*标签&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5. 将Word的抬头转换成&amp;lt;strong&amp;gt;标签&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;6. 去除lang属性&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;7. 去除或替换所有没有意义的样式标签，如mso-padding-alt, mso-margin-top-alt,horiz-align, mso-default-width, mso-zero-height等&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;对应代码如下：&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; FilterPasteWord(str)&#xD;
{&#xD;
    &lt;span style="color: #008000"&gt;//remove link break&lt;/span&gt;&#xD;
    str = str.replace(/\r\n|\n|\r/ig, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove &amp;amp;nbsp; entities at the start of contents&lt;/span&gt;&#xD;
    str = str.replace(/^\s*(&amp;amp;nbsp;)+/ig,&lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove &amp;amp;nbsp; entities at the end of contents&lt;/span&gt;&#xD;
    str = str.replace(/(&amp;amp;nbsp;|&amp;lt;br[^&amp;gt;]*&amp;gt;)+\s*$/ig,&lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;// Word comments like conditional comments etc&lt;/span&gt;&#xD;
    str = str.replace(/&amp;lt;!--[\s\S]*?--&amp;gt;/ig, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);    &#xD;
    &lt;span style="color: #008000"&gt;// Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags&lt;/span&gt;&#xD;
    str = str.replace(/&amp;lt;(!|script[^&amp;gt;]*&amp;gt;.*?&amp;lt;\/script(?=[&amp;gt;\s])|\/?(\?xml(:\w+)?|xml|img|meta|link|style|\w:\w+)(?=[\s\/&amp;gt;]))[^&amp;gt;]*&amp;gt;/gi,&lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
&#xD;
    &lt;span style="color: #008000"&gt;//convert word headers to strong&lt;/span&gt;&#xD;
    str = str.replace(/&amp;lt;p [^&amp;gt;]*&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;=&lt;span style="color: #006080"&gt;&amp;quot;?MsoHeading&amp;quot;&lt;/span&gt;?[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;\/p&amp;gt;/gi, &lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span style="color: #008000"&gt;//remove lang attribute&lt;/span&gt;&#xD;
    str = str.replace(/(lang)\s*=\s*([\&lt;span style="color: #006080"&gt;'\&amp;quot;]?)[\w-]+\2/ig, &amp;quot;&amp;quot;);&#xD;
    // Examine all styles: delete junk, transform some, and keep the rest&#xD;
    str = str.replace(/(&amp;lt;[a-z][^&amp;gt;]*)\sstyle=&amp;quot;([^&amp;quot;]*)&amp;quot;/gi,function(str, tag, style) {&#xD;
                                var n = [],&#xD;
                                    i = 0,&#xD;
                                    s = style.trim().replace(/&amp;amp;quot;/gi, &amp;quot;'&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;).split(&amp;quot;&lt;/span&gt;;&lt;span style="color: #006080"&gt;&amp;quot;);&#xD;
&#xD;
                                // Examine each style definition within the tag's style attribute&#xD;
                                for(var i=0;i&amp;lt;s.length;i++)&#xD;
                                {&#xD;
                                    v=s[i];&#xD;
                                    var name, value,&#xD;
                                    parts = v.split(&amp;quot;&lt;/span&gt;:&lt;span style="color: #006080"&gt;&amp;quot;);&#xD;
&#xD;
                                    if (parts.length == 2) {&#xD;
                                        name = parts[0].toLowerCase();&#xD;
                                        value = parts[1].toLowerCase();&#xD;
                                        // Translate certain MS Office styles into their CSS equivalents&#xD;
                                        switch (name) {&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-padding-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-padding-top-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-padding-right-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-padding-bottom-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-padding-left-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-margin-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-margin-top-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-margin-right-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-margin-bottom-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-margin-left-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-table-layout-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-height&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-width&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-vertical-align-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                                n[i++] = name.replace(/^mso-|-alt$/g, &amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;) + &amp;quot;&lt;/span&gt;:&lt;span style="color: #006080"&gt;&amp;quot; + ensureUnits(value);&#xD;
                                                continue;&#xD;
&#xD;
                                            case &amp;quot;&lt;/span&gt;horiz-align&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                                n[i++] = &amp;quot;&lt;/span&gt;text-align:&lt;span style="color: #006080"&gt;&amp;quot; + value;&#xD;
                                                continue;&#xD;
&#xD;
                                            case &amp;quot;&lt;/span&gt;vert-align&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                                n[i++] = &amp;quot;&lt;/span&gt;vertical-align:&lt;span style="color: #006080"&gt;&amp;quot; + value;&#xD;
                                                continue;&#xD;
&#xD;
                                            case &amp;quot;&lt;/span&gt;font-color&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-foreground&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                                n[i++] = &amp;quot;&lt;/span&gt;color:&lt;span style="color: #006080"&gt;&amp;quot; + value;&#xD;
                                                continue;&#xD;
&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-background&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-highlight&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                                n[i++] = &amp;quot;&lt;/span&gt;background:&lt;span style="color: #006080"&gt;&amp;quot; + value;&#xD;
                                                continue;&#xD;
&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-&lt;span style="color: #0000ff"&gt;default&lt;/span&gt;-height&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                                n[i++] = &amp;quot;&lt;/span&gt;min-height:&lt;span style="color: #006080"&gt;&amp;quot; + ensureUnits(value);&#xD;
                                                continue;&#xD;
&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-&lt;span style="color: #0000ff"&gt;default&lt;/span&gt;-width&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                                n[i++] = &amp;quot;&lt;/span&gt;min-width:&lt;span style="color: #006080"&gt;&amp;quot; + ensureUnits(value);&#xD;
                                                continue;&#xD;
&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-padding-between-alt&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                                n[i++] = &amp;quot;&lt;/span&gt;border-collapse:separate;border-spacing:&lt;span style="color: #006080"&gt;&amp;quot; + ensureUnits(value);&#xD;
                                                continue;&#xD;
&#xD;
                                            case &amp;quot;&lt;/span&gt;text-line-through&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                                if ((value == &amp;quot;&lt;/span&gt;single&lt;span style="color: #006080"&gt;&amp;quot;) || (value == &amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;double&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;)) {&#xD;
                                                    n[i++] = &amp;quot;&lt;/span&gt;text-decoration:line-through&lt;span style="color: #006080"&gt;&amp;quot;;&#xD;
                                                }&#xD;
                                                continue;&#xD;
&#xD;
                                            case &amp;quot;&lt;/span&gt;mso-zero-height&lt;span style="color: #006080"&gt;&amp;quot;:&#xD;
                                                if (value == &amp;quot;&lt;/span&gt;yes&lt;span style="color: #006080"&gt;&amp;quot;) {&#xD;
                                                    n[i++] = &amp;quot;&lt;/span&gt;display:none&lt;span style="color: #006080"&gt;&amp;quot;;&#xD;
                                                }&#xD;
                                                continue;&#xD;
                                        }&#xD;
                                        // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name&#xD;
                                        if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?:align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) {&#xD;
                                            continue;&#xD;
                                        }&#xD;
                                        // If it reached this point, it must be a valid CSS style&#xD;
                                        n[i++] = name + &amp;quot;&lt;/span&gt;:&lt;span style="color: #006080"&gt;&amp;quot; + parts[1];        // Lower-case name, but keep value case&#xD;
                                    }&#xD;
                                }&#xD;
                                // If style attribute contained any valid styles the re-write it; otherwise delete style attribute.&#xD;
                                if (i &amp;gt; 0) {&#xD;
                                    return tag + ' style=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;' + n.join('&lt;/span&gt;;&lt;span style="color: #006080"&gt;') + '&lt;/span&gt;&amp;quot;';&#xD;
                                } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&#xD;
                                    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; tag;&#xD;
                                }&#xD;
                            });&#xD;
&#xD;
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; str;&#xD;
}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;到此，你应该对这项技术有了很详细的了解了。当然具体过滤哪些东西，你还是要多实践多测试，比如前两天客户一不小心把youtube视频贴近系统里面了，于是我又过滤了object, embed, param标签。当然有了这样一个模型之后，规则的维护变得很方便，无形中降低了代码的维护成本。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;最后提供一个完整的demo版本给大家下载：&lt;a title="htmleditor_paste_filter.zip" href="http://files.cnblogs.com/tonyqus/htmleditor_paste_filter.zip"&gt;htmleditor_paste_filter.zip&lt;/a&gt;。&lt;/p&gt; &lt;img src="http://www.cnblogs.com/tonyqus/aggbug/1749686.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/tonyqus/archive/2010/06/03/html_editor_paste_filter2.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/tonyqus/archive/2010/05/29/html_editor_paste_filter.html</id><title type="text">在线Html编辑器粘贴过滤技术详解（一）</title><summary type="text">Html编辑器虽然被n多人实现过了，也看到过很多博文描述如何实现Html编辑器，但在我这次自己实现Html编辑器的过程中，却发现网上很少有讲述如何过滤粘贴数据的文章，国外也没人写这方面的文章，不知道为啥。不管怎么说，希望这篇文章对大家有帮助。</summary><published>2010-05-29T04:43:00Z</published><updated>2010-05-29T04:43:00Z</updated><author><name>Tony  Qu</name><uri>http://www.cnblogs.com/tonyqus/</uri></author><link rel="alternate" href="http://www.cnblogs.com/tonyqus/archive/2010/05/29/html_editor_paste_filter.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/tonyqus/archive/2010/05/29/html_editor_paste_filter.html"/><content type="html">&lt;p&gt;作者：Tony Qu&lt;/p&gt;  &lt;p&gt;最近在解决数据粘贴方面取得了不少进展，作为Html在线编辑器所必须具备的技术，在这里详细给大家介绍并提供实现参考。在研究过程中，我也确实走了不少弯路，尝试了n种方式，由于美国的PM始终觉得有些影响用户体验的东西无法接受，导致好几个提案被否定，不过收获还是很丰富的。&lt;/p&gt;  &lt;p&gt;我现在写code喜欢需求驱动，让我们来看看这项技术的主要需求&lt;/p&gt;  &lt;p&gt;* 能够过滤用户贴进来的纯文本数据 &lt;/p&gt;  &lt;p&gt;* 能够过滤用户贴进来的html数据（未经Html编码） &lt;/p&gt;  &lt;p&gt;* 能够过滤用户贴进来的Word数据，并能把大部分Word格式保留下来。 &lt;/p&gt;  &lt;p&gt;* 在这一过程中尽量不要让用户知道我们在做过滤 &lt;/p&gt;  &lt;p&gt;* 不要去提示用户是否启用某种权限 &lt;/p&gt;  &lt;p&gt;本例所适用的场景为使用iframe实现的Html编辑器，而不是文本框(textarea或type为text的input）。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;在研究过程中，我主要参考了tinymce、ckeditor，但最后我还是选择了tinymce的实现方法，具体原因在你看完下面这段文字后就会明白。&lt;/p&gt;  &lt;p&gt;ckeditor的实现方式是在onpaste事件触发时，从剪贴板取出数据，处理取出的文本，然后再把处理好的文本存入剪贴板。有人说，那我能不能在onpaste中直接取消paste动作，然后自己把获得的内容放入iframe当中去，我当时就干过这事，但结果却出人意料，直接从剪贴板拿出的数据是不包括格式信息的文本，特别是从Word粘贴过来的数据，纯文本，颜色、布局等数据都不存在，这样的话，你的用户只能粘贴没有格式的数据过来，然后自己重新在Html编辑器里面编辑。但是如果让浏览器自己去做粘贴，格式信息都会保留，浏览器会自动把Word的粘贴数据转换为xml数据，放入dom中。所以为了保留格式信息，我们恐怕只能通过浏览器的标准粘贴行为的帮助实现这一点。&lt;/p&gt;  &lt;p&gt;另外ckeditor的实现在Firefox中有一个致命的弱点，如果你要从剪贴板读写数据，你就必须提示用户自己去设置一个叫signed.applets.codebase_principal_support的权限，javascript脚本是没有权限去设置的，虽然从技术人员来看这是很正常的，但是很多产品经理无法接受这一点，至少我的产品经理是这么认为的。&lt;/p&gt;  &lt;p&gt;以下是ckeditor获取和设置剪贴板的代码，供大家参考。&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;function setClipboard(maintext) {&#xD;
   &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (window.clipboardData) {&#xD;
      &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; (window.clipboardData.setData(&lt;span style="color: #006080"&gt;&amp;quot;Text&amp;quot;&lt;/span&gt;, maintext));&#xD;
   }&#xD;
   &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (window.netscape) {&#xD;
      netscape.security.PrivilegeManager.enablePrivilege(&lt;span style="color: #006080"&gt;'UniversalXPConnect'&lt;/span&gt;);&#xD;
      var clip = Components.classes[&lt;span style="color: #006080"&gt;'@mozilla.org/widget/clipboard;1'&lt;/span&gt;].createInstance(Components.interfaces.nsIClipboard);&#xD;
      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!clip) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&#xD;
      var trans = Components.classes[&lt;span style="color: #006080"&gt;'@mozilla.org/widget/transferable;1'&lt;/span&gt;].createInstance(Components.interfaces.nsITransferable);&#xD;
      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!trans) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&#xD;
      trans.addDataFlavor(&lt;span style="color: #006080"&gt;'text/unicode'&lt;/span&gt;);&#xD;
      var str = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Object();&#xD;
      var len = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Object();&#xD;
      var str = Components.classes[&lt;span style="color: #006080"&gt;&amp;quot;@mozilla.org/supports-string;1&amp;quot;&lt;/span&gt;].createInstance(Components.interfaces.nsISupportsString);&#xD;
      var copytext=maintext;&#xD;
      str.data=copytext;&#xD;
      trans.setTransferData(&lt;span style="color: #006080"&gt;&amp;quot;text/unicode&amp;quot;&lt;/span&gt;,str,copytext.length*2);&#xD;
      var clipid=Components.interfaces.nsIClipboard;&#xD;
      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!clip) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&#xD;
      clip.setData(trans,&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,clipid.kGlobalClipboard);&#xD;
      &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&#xD;
   }&#xD;
   &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&#xD;
}&#xD;
&#xD;
function getClipboard() {&#xD;
   &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (window.clipboardData) {&#xD;
      &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;(window.clipboardData.getData(&lt;span style="color: #006080"&gt;'Text'&lt;/span&gt;));&#xD;
   }&#xD;
   &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (window.netscape) {&#xD;
      netscape.security.PrivilegeManager.enablePrivilege(&lt;span style="color: #006080"&gt;'UniversalXPConnect'&lt;/span&gt;);&#xD;
      var clip = Components.classes[&lt;span style="color: #006080"&gt;'@mozilla.org/widget/clipboard;1'&lt;/span&gt;].createInstance(Components.interfaces.nsIClipboard);&#xD;
      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!clip) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&#xD;
      var trans = Components.classes[&lt;span style="color: #006080"&gt;'@mozilla.org/widget/transferable;1'&lt;/span&gt;].createInstance(Components.interfaces.nsITransferable);&#xD;
      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!trans) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&#xD;
      trans.addDataFlavor(&lt;span style="color: #006080"&gt;'text/unicode'&lt;/span&gt;);&#xD;
      clip.getData(trans,clip.kGlobalClipboard);&#xD;
      var str = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Object();&#xD;
      var len = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Object();&#xD;
      &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&#xD;
         trans.getTransferData(&lt;span style="color: #006080"&gt;'text/unicode'&lt;/span&gt;,str,len);&#xD;
      }&#xD;
      &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;(error) {&#xD;
         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&#xD;
      }&#xD;
      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (str) {&#xD;
         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Components.interfaces.nsISupportsWString) str=str.&lt;span style="color: #0000ff"&gt;value&lt;/span&gt;.QueryInterface(Components.interfaces.nsISupportsWString);&#xD;
         &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Components.interfaces.nsISupportsString) str=str.&lt;span style="color: #0000ff"&gt;value&lt;/span&gt;.QueryInterface(Components.interfaces.nsISupportsString);&#xD;
         &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; str = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&#xD;
      }&#xD;
      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (str) {&#xD;
         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;(str.data.substring(0,len.&lt;span style="color: #0000ff"&gt;value&lt;/span&gt; / 2));&#xD;
      }&#xD;
   }&#xD;
   &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&#xD;
} &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;以下是提示用户启用权限的代码&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (window.netscape) &#xD;
{&#xD;
    &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; &#xD;
    {   &#xD;
        netscape.security.PrivilegeManager.enablePrivilege(&lt;span style="color: #006080"&gt;&amp;quot;UniversalXPConnect&amp;quot;&lt;/span&gt;);   &#xD;
    }&#xD;
    &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (ex) &#xD;
    {   &#xD;
        alert(&lt;span style="color: #006080"&gt;&amp;quot;If you want to do paste, please input 'about:config' in address bar, then input Enter.\n Set \&amp;quot;signed.applets.codebase_principal_support\&amp;quot; to \&amp;quot;true\&amp;quot;&amp;quot;&lt;/span&gt;);&#xD;
    }&#xD;
} &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;于是我参考了tinymce的实现方式，我在看它的代码的时候特别留意到它尽然不需要权限就能在Firefox下面搞定粘贴，并且还能保留Word格式，于是就仔细阅读了其中的代码。tinymce的实现步骤在IE和Firefox下面是不同的：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;IE实现&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1. 在onpaste回调函数中创建一个临时的iframe，用于粘贴内容，这个iframe放在主窗口的body下面即可。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2. 在当前光标位置创建一个Range，用来保存光标位置和选中信息。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3. 让临时iframe获得焦点，执行粘贴命令，即document.execCommand(“paste”)，内容会粘贴在临时的iframe中&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4. 通过innerHTML获得临时iframe中的内容并进行过滤&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5. 让Html编辑器的iframe获得焦点，用之前创建的Range对象执行pasteHTML方法来粘贴过滤后的内容&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;6. 最后取消默认的paste动作&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;（临时iframe可以根据个人喜好从DOM中删除，但由于这个iframe可以在多个htmleditor之间共用，所以我的实现中仅仅改变了iframe的left, top来调整iframe的位置，而不是移除它，调整left和top的目的在于焦点移到临时iframe的时候如果Html编辑器的iframe和临时iframe不在一个视图之内，屏幕会滚动，这样会导致屏幕没有原因的闪烁。）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Firefox实现&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1. 在onpaste回调函数中创建一个临时的div，这个div放在Html编辑器的iframe里面，这也是绕过权限问题的关键。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2. 保存当前光标和焦点位置，然后将光标移到临时创建的div中&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3. 通过window.setTimeout设置一个回调函数在paste动作瞬间完成之后执行&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4. 让paste动作执行（onpaste回调函数执行完毕）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5. 刚才设置的回调函数执行，在里面获得临时div的innerHTML并进行过滤&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;6. 恢复刚才保存的光标和焦点位置，并移除临时div&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;7. 通过inserthtml命令（execCommand(“inserthtml”)）把过滤后的内容贴到Html编辑器的iframe中。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;详细代码如下：&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; getSel(w)&#xD;
{&#xD;
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; w.getSelection ? w.getSelection() : w.document.selection;    &#xD;
}&#xD;
&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; setRange(sel,r)&#xD;
{&#xD;
        sel.removeAllRanges();&#xD;
        sel.addRange(r);&#xD;
}&#xD;
&#xD;
&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; filterPasteData(originalText)&#xD;
{&#xD;
    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; newText=originalText;&#xD;
    &lt;span style="color: #008000"&gt;//do something to filter unnecessary data&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; newText;&#xD;
}&#xD;
&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; block(e)&#xD;
{&#xD;
    e.preventDefault();    &#xD;
}&#xD;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; w,or,divTemp,originText;&#xD;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; newData;&#xD;
&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; pasteClipboardData(editorId,e)&#xD;
{&#xD;
     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; objEditor = document.getElementById(editorId);    &#xD;
     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; edDoc=objEditor.contentWindow.document;&#xD;
        &#xD;
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(isIE)&#xD;
    {&#xD;
        &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; orRange=objEditor.contentWindow.document.selection.createRange();&#xD;
        &#xD;
      &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; ifmTemp=document.getElementById(&lt;span style="color: #006080"&gt;&amp;quot;ifmTemp&amp;quot;&lt;/span&gt;);&#xD;
      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(!ifmTemp)&#xD;
      {&#xD;
            ifmTemp=document.createElement(&lt;span style="color: #006080"&gt;&amp;quot;IFRAME&amp;quot;&lt;/span&gt;);&#xD;
            ifmTemp.id=&lt;span style="color: #006080"&gt;&amp;quot;ifmTemp&amp;quot;&lt;/span&gt;;&#xD;
            ifmTemp.style.width=&lt;span style="color: #006080"&gt;&amp;quot;1px&amp;quot;&lt;/span&gt;;&#xD;
            ifmTemp.style.height=&lt;span style="color: #006080"&gt;&amp;quot;1px&amp;quot;&lt;/span&gt;;&#xD;
            ifmTemp.style.position=&lt;span style="color: #006080"&gt;&amp;quot;absolute&amp;quot;&lt;/span&gt;;&#xD;
            ifmTemp.style.border=&lt;span style="color: #006080"&gt;&amp;quot;none&amp;quot;&lt;/span&gt;;&#xD;
            ifmTemp.style.left=&lt;span style="color: #006080"&gt;&amp;quot;-10000px&amp;quot;&lt;/span&gt;;&#xD;
            ifmTemp.src=&lt;span style="color: #006080"&gt;&amp;quot;iframeblankpage.html&amp;quot;&lt;/span&gt;;&#xD;
            document.body.appendChild(ifmTemp);&#xD;
            ifmTemp.contentWindow.document.designMode = &lt;span style="color: #006080"&gt;&amp;quot;On&amp;quot;&lt;/span&gt;;&#xD;
            ifmTemp.contentWindow.document.open();&#xD;
            ifmTemp.contentWindow.document.write(&lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&amp;quot;&lt;/span&gt;);&#xD;
            ifmTemp.contentWindow.document.close();&#xD;
        }&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
        {&#xD;
            ifmTemp.contentWindow.document.body.innerHTML=&lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;    &#xD;
        }&#xD;
&#xD;
        originText=objEditor.contentWindow.document.body.innerText;&#xD;
&#xD;
        ifmTemp.contentWindow.focus();&#xD;
        ifmTemp.contentWindow.document.execCommand(&lt;span style="color: #006080"&gt;&amp;quot;Paste&amp;quot;&lt;/span&gt;,&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;,&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&#xD;
        objEditor.contentWindow.focus();&#xD;
                &#xD;
        newData=ifmTemp.contentWindow.document.body.innerHTML;&#xD;
        &lt;span style="color: #008000"&gt;//filter the pasted data&lt;/span&gt;&#xD;
        newData=filterPasteData(newData);        &#xD;
        ifmTemp.contentWindow.document.body.innerHTML=newData;&#xD;
        &lt;span style="color: #008000"&gt;//paste the data into the editor&lt;/span&gt;&#xD;
     orRange.pasteHTML(newData);&#xD;
     &lt;span style="color: #008000"&gt;//block default paste&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(e)&#xD;
        {&#xD;
            e.returnValue = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&#xD;
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(e.preventDefault)&#xD;
                e.preventDefault();&#xD;
        }&#xD;
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&#xD;
    }&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
    {&#xD;
        enableKeyDown=&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&#xD;
          &lt;span style="color: #008000"&gt;//create the temporary html editor&lt;/span&gt;&#xD;
        &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; divTemp=edDoc.createElement(&lt;span style="color: #006080"&gt;&amp;quot;DIV&amp;quot;&lt;/span&gt;);&#xD;
        divTemp.id=&lt;span style="color: #006080"&gt;'htmleditor_tempdiv'&lt;/span&gt;;&#xD;
        divTemp.innerHTML=&lt;span style="color: #006080"&gt;'\uFEFF'&lt;/span&gt;;&#xD;
        divTemp.style.left=&lt;span style="color: #006080"&gt;&amp;quot;-10000px&amp;quot;&lt;/span&gt;;    &lt;span style="color: #008000"&gt;//hide the div&lt;/span&gt;&#xD;
        divTemp.style.height=&lt;span style="color: #006080"&gt;&amp;quot;1px&amp;quot;&lt;/span&gt;;&#xD;
        divTemp.style.width=&lt;span style="color: #006080"&gt;&amp;quot;1px&amp;quot;&lt;/span&gt;;&#xD;
        divTemp.style.position=&lt;span style="color: #006080"&gt;&amp;quot;absolute&amp;quot;&lt;/span&gt;;&#xD;
        divTemp.style.overflow=&lt;span style="color: #006080"&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt;;&#xD;
        edDoc.body.appendChild(divTemp);&#xD;
        &lt;span style="color: #008000"&gt;//disable keyup,keypress, mousedown and keydown&lt;/span&gt;&#xD;
            objEditor.contentWindow.document.addEventListener(&lt;span style="color: #006080"&gt;&amp;quot;mousedown&amp;quot;&lt;/span&gt;,block,&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&#xD;
            objEditor.contentWindow.document.addEventListener(&lt;span style="color: #006080"&gt;&amp;quot;keydown&amp;quot;&lt;/span&gt;,block,&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&#xD;
            enableKeyDown=&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&#xD;
            &lt;span style="color: #008000"&gt;//get current selection;&lt;/span&gt;&#xD;
            w=objEditor.contentWindow;&#xD;
            or=getSel(w).getRangeAt(0);&#xD;
            &#xD;
            &lt;span style="color: #008000"&gt;//move the cursor to into the div&lt;/span&gt;&#xD;
            &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; docBody=divTemp.firstChild;&#xD;
            rng = edDoc.createRange();&#xD;
            rng.setStart(docBody, 0);&#xD;
            rng.setEnd(docBody, 1);&#xD;
            setRange(getSel(w),rng);&#xD;
            &#xD;
            originText=objEditor.contentWindow.document.body.textContent;&#xD;
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(originText===&lt;span style="color: #006080"&gt;'\uFEFF'&lt;/span&gt;)&#xD;
            {&#xD;
                    originText=&lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&#xD;
            }&#xD;
&#xD;
            window.setTimeout(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;()&#xD;
                {&#xD;
                    &lt;span style="color: #008000"&gt;//get and filter the data after onpaste is done&lt;/span&gt;&#xD;
                    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(divTemp.innerHTML===&lt;span style="color: #006080"&gt;'\uFEFF'&lt;/span&gt;)&#xD;
                    {&#xD;
                        newData=&lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&#xD;
                        edDoc.body.removeChild(divTemp);&#xD;
                        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&#xD;
                    }&#xD;
&#xD;
                        newData=divTemp.innerHTML;&#xD;
&#xD;
                         &lt;span style="color: #008000"&gt;// Restore the old selection&lt;/span&gt;&#xD;
                        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (or)&#xD;
                        {&#xD;
                            setRange(getSel(w),or);&#xD;
                        }&#xD;
                        &#xD;
                        newData=filterPasteData(newData);&#xD;
                        divTemp.innerHTML=newData;&#xD;
                        &lt;span style="color: #008000"&gt;//paste the new data to the editor&lt;/span&gt;&#xD;
                        objEditor.contentWindow.document.execCommand(&lt;span style="color: #006080"&gt;'inserthtml'&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;, newData );                            &#xD;
                        edDoc.body.removeChild(divTemp);    &#xD;
                },0);&#xD;
            &lt;span style="color: #008000"&gt;//enable keydown,keyup,keypress, mousedown;&lt;/span&gt;&#xD;
            enableKeyDown=&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&#xD;
            objEditor.contentWindow.document.removeEventListener(&lt;span style="color: #006080"&gt;&amp;quot;mousedown&amp;quot;&lt;/span&gt;,block,&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&#xD;
            objEditor.contentWindow.document.removeEventListener(&lt;span style="color: #006080"&gt;&amp;quot;keydown&amp;quot;&lt;/span&gt;,block,&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&#xD;
            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这里的pasteClipboardData是用做onpaste回调函数的，要使用它的话，可以通过下面的代码把它加到Html编辑器的iframe的onpaste事件上。&lt;/p&gt;&#xD;
&#xD;
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&#xD;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; ifrm=document.getElementById(&lt;span style="color: #006080"&gt;&amp;quot;editor&amp;quot;&lt;/span&gt;)&#xD;
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(isIE)&#xD;
{&#xD;
    ifrm.contentWindow.document.documentElement.attachEvent(&lt;span style="color: #006080"&gt;&amp;quot;onpaste&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(e){&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; pasteClipboardData(ifrm.id,e);});&#xD;
}&#xD;
&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
{&#xD;
    ifrm.contentWindow.document.addEventListener(&lt;span style="color: #006080"&gt;&amp;quot;paste&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(e){&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; pasteClipboardData(ifrm.id,e);},&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&#xD;
}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;这里的filterPasteData函数就是我们专门用来做过滤的函数，具体要怎么去过滤纯文本、html及Word数据将在下一篇讲解。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/tonyqus/aggbug/1746964.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/tonyqus/archive/2010/05/29/html_editor_paste_filter.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
