MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_NextPart_01C708D8.1CCA5A10" This document is a Single File Web Page, also known as a Web Archive file. If you are seeing this message, your browser or editor doesn't support Web Archive files. Please download a browser that supports Web Archive, such as Microsoft Internet Explorer. ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17 =3D 0), isMac =3D (app= Ver.indexOf("Macintosh") >=3D 0) if( msie >=3D 0 ) ver =3D parseFloat( appVer.substring( msie+5, appVer.indexOf ( ";", msie = ) ) ) else ver =3D parseInt( appVer ) browserSupported=3D0 if( !isMac && ver >=3D 4 && msie >=3D 0 ) { browserSupported=3D1 window.location.replace( 'cse303-06au-lecture17_files/frame.htm'+document= .location.hash ) } =09 //-->

This presentation contains content that your browser may not be able to = show properly. This presentation was optimized for more recent versions of Micro= soft Internet Explorer.

If you would like to proceed anyway, click here.

------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/master03.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii"
Click to edit Master title style
Click to edit Master text styles
Second level
Third level
Fourth level
Fifth level
‹date/time›
‹footer›
‹#›
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/master03.xml Content-Transfer-Encoding: quoted-printable Content-Type: text/xml; charset="utf-8" ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/preview.wmf Content-Transfer-Encoding: base64 Content-Type: image/x-wmf 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 ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/master04.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii"
Click to edit Master title style
Click to edit Master text styles
Second level
Third level
Fourth level
Fifth level
‹date/time›
‹footer›
‹#›
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/master04.xml Content-Transfer-Encoding: quoted-printable Content-Type: text/xml; charset="utf-8" ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/master02.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii"
<= /div>
<= /div>
<= /div>
‹h= eader›
<= /div>
<= /div>
<= /div>
‹date/time›
<= /div>
<= /div>
<= /div>
‹f= ooter›
<= /div>
<= /div>
<= /div>
‹#›
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/pres.xml Content-Transfer-Encoding: quoted-printable Content-Type: text/xml; charset="utf-8" ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0001.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
CSE 303
Concepts and Tools for
Software Developme= nt
Richard C. Davis
UW CSE – 11/13/2006 Lecture 17 –
Specification and Testing
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0001_image001.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlhyAF2AHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADG AXUAgAAAAJkAAAL/jI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8woMCBBAsaPIgwocKFDBs6fAgxosSJFCtavIgxo8aNNhw7evwIMqTIkSRLmjyJMqXK lSxbunwJM6bMmTRr2ryJM6fOnTx7+vwJNKjQoUSLGj2KNOmkAgA7 ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0004.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
2
=
Administravia: Midterm
<= span style=3D'font-size:86%'>Lowest: 17.5 (30%)
<= span style=3D'font-size:86%'>Highest: 51.5 (89%)
Average: 36 (62%)
Std Dev: 9.6 (17%)
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0004_image002.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAJkAAALkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0004_image003.emz Content-Transfer-Encoding: base64 Content-Type: image/x-emz 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 k4Su3jl14zIe7ZuiPO430J5T/QuMMEnYXCUAAC== ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0004_image004.gif Content-Transfer-Encoding: base64 Content-Type: image/gif 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 mqu6Wo8hAAA7 ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0005.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
3
Administravia: Midterm
D= on't Panic! 
T= his was a very hard exam
I= t's only 20% of your grade
W= e'll adjust scores
4= (b) will be extra credit
W= e'll make sure people who invested time won't be penalized
Y= ou can still pull up your score
D= o well on homework
F= inal will be easier
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0005_image005.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAJkAAALkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0016.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
4
Administravia: HW4
•<= /span>Many used .c and .h files improperly
–<= /span>.h
•<= /span>Contain function prototypes & typedefs
•<= /span>For a set of related functions <= /div>
•<= /span>In C++, contain class definitions
–<= /span>.c
•<= /span>These are the files you compile =
•<= /span>They include the ".h" files needed <= /span>
We won't count off much for this on homework <= /span>
–<= /span>Hard for you to understand why we use this structure
–<= /span>You'll understand more when we cover build scripting
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0016_image006.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAJkAAALkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0010.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
5
Administravia: Study Session
&#= 8226;Struggled with C on midterm or HW4?
&#= 8226;Come to study session tonight
&= #8211;Need to make sure you're not falling behind
&#= 8211;We'll cover midterm and HW4 questions
&#= 8226;Office hours today if you can't make it
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0010_image007.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAJkAAALkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0007.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
6
Administravia: HW6
&#= 8226;Repeat: Choose a partner now!
&= #8211;Send e-mail with choice to Lincoln Ritter
&= #8211;Team project directories will be created
&#= 8211;This will take a day after Lincoln gets e-mail
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0007_image008.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAJkAAALkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0002.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
7
Where Are We?
&#= 8226;Up to Now
&= #8211;Getting around Unix
&= #8211;Shell Scripting
&= #8211;C
&= #8211;C++
&#= 8226;From Now On
&= #8211;Good software development practices
&= #8211;Tools for managing larger projects
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0002_image009.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0008.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
8
Today
&#= 8226;Basic Software Engineering
&= #8211;Development Process
&= #8211;Specification
&= #8211;Unit Testing and Stubs
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0008_image010.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0011.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
9
Software Development Process
&#= 8226;Main steps in building a system
&= #8211;Requirements Analysis
&= #8211;Specification
&= #8211;Design
&= #8211;Implementation
&= #8211;Testing
&= #8211;Documentation
&= #8211;Maintenance
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0011_image011.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0012.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
10
Software Development Process
R= equirements analysis
W= hat are we supposed to build? What do our customers need?
S= pecification
P= recise description of provided functionality
H= ow Precise? Depends on what's being built
D= esign
D= efine the internal software architecture
B= reak system into components
M= odules, interfaces, classes, etc.
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0012_image012.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0013.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
11
Software Development Process
Implementation
Write the code and per= form simple tests
Testing
Extensive testing of p= arts and whole system
Documentation
All steps in the proce= ss must be documented
User guide, developer's guide, etc.
Maintenance
Fixing bugs, working on later releases
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0013_image013.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0014.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
12
Software Development Process
•<= /span>Main steps in building a system =
–<= /span>Requirements Analysis
–<= /span>Specification
–<= /span>Design
–<= /span>Implementation
–<= /span>Testing
–<= /span>Documentation
–<= /span>Maintenance
•<= /span>Order of steps varies, frequent iteration
•<= /span>How formal? Depends on what you're building=
The software process
<= span style=3D'font-size:111%'>Guides yo= ur efforts
<= span style=3D'font-size:111%'>Helps cla= rify thoughts
<= span style=3D'font-size:111%'>Helps you communicate ideas
<= span style=3D'font-size:111%'>You can v= iew it as a tool!
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0014_image014.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0014_image015.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh2QBhAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADY AF8AgQAAAAAAALvg4wECAwL/jI+py+0Po5y02ouX2Lz7D4biSJbmiabqyrad4cbyTNf2vcL4zvf+ P9MBh8Si0SY8KpfMpiDpjEqnwQD1is2WoNquV8r9isfEMPmMRlrT7HbVDY+nzPJ6nW7Pt/H6Ppnv F9gFKFhIRWiY2ISo2GjE6Bj5AylZiUNpmfmmyTmE2QmK8hlKOjJaiupxmsq6yorq+koaKwtKW8t5 i5upu1vZ6xsJHNw4TJxofFyYrBzI3Nz3DJ0nPX23Zo1bnQ23zb2H/d0aLg5LXj57jm6rvp7b7s4L H/87Ty9sf1+cr4/M37/sH0BnAgdGK2iQGsKE1xjWcyjJG0QnEicyqWhRCcaMaI8WckSz8aMnjyLH hCzp4yRKHipXXiLpUkvLmDVm0tx0U47NnC528mTh86eKoEJFwSy66CjSJUSXkmjqVATUqCCmUlWl 9OpIrSazck3p9SvLsGJflh1E9mzNtGqrZHgLN67cuXTrXigAADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0015.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
13
Specification
Writing a complete specification is hard
Often as difficult as writing code
Even worse when specification is formal
Partial specification = is better than none
Specification helps lat= er parts of process
Implementation
Test Development <= /span>
Maintenance
Iterating is normal= ! Often need to fix spec.
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0015_image016.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0017.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
14
Specification Example
&#= 8226;Let's write an informal specification for
R= 11;void insert(Node** he= ad, char * val);
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0017_image017.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0018.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
15
Specification First Attempt
/** = ;
* Inser= ts a value into the list
* @para= m head : address of pointer to
*        the first element in the list
* @para= m val : new string to insert
* @retu= rn nothing
*/ =
void insert(Node** head, char * val);
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0018_image018.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0019.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
16
A Better Specification
/**
* Inserts a value into the list.
* Does not check for duplicates.
* Makes a copy of the inserted string.
* Precondition: val is not NULL.
* Postcondition: List is sorted in <= /div>
*        = ;        alphabetical order
* @param head : address of pointer to
*        the first element in the list
* @param val : new string to insert <= /div>
* @return nothing
*/
void insert(Node** head, char * val);
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0019_image019.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0009.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
17
Minimum Specification
Describe what the f= unction/method does
Describe parameters<= /i> (are they modified?)
Describe what the func= tion returns
State preconditions=
Assumptions about parameter values
E.g., string not NULL, units are inches, x > 0…
Avoid trusting callers.  Check preconditions= .
Describe side effects&= #13;
E.g., modifies global vars, reads/writes file
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0009_image020.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0021.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
18
Testing
Goal: Verification and validation
Does the system work?&= #13;
Does it do what it is supposed to do?
Increase our confidenc= e in the system
How do we know when we= are done?
Coverage metrics exist
Execute each statement= at least once
Execute each branch or path at least once
In Practice, you're ne= ver done testing = ;
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0021_image021.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0022.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
19
Two Basic Types of Tests
Black Box Tests
Test without looking at implementation
Design test cases in t= erms of specification
Very useful in practice
Ideally, someone else should write them
White Box Tests (a.k.a. "Glass Box" tests)
Take implementation in= to account
Easier to ensure good coverage
Common sense: Test all branches once
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0022_image022.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0023.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
20
More Types of Tests
&#= 8226;Unit testing
&= #8211;Test one class at a time
&#= 8226;Integration testing
&= #8211;Test a number of classes together
&#= 8226;System testing
&= #8211;Test an entire working system
&#= 8226;Perform them all as you develop
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0023_image023.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0024.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
21
Regression Testing
&#= 8226;Save tests as you develop
&= #8211;Tests exercise more and more features
&#= 8226;Run all tests automatically
&= #8211;Every time you add a feature
&= #8211;Every time you fix a bug
&#= 8226;Helps to verify that everything still works
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0024_image024.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0025.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
22
Stubs
&#= 8226;How test a class when it uses classes that…
&= #8211;Do not exist?
&= #8211;Are buggy?
&= #8211;Are too large and slow?
&#= 8226;Answer: create "fake classes"
&= #8211;One for each class that doesn't exist
&= #8211;Just good enough for the tests
&= #8211;As small as possible, so often called a stub
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0025_image025.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0020.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
23
Summary
&#= 8226;Software devel. involves several steps
&#= 8211;Carefully think about what you must build
&= #8211;Carefully think about how to build it
&= #8211;Prepare tests based on your specs
&= #8211;Implement, test, and document
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0020_image026.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0003.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
24
Next Time
Version Control Tools
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0003_image027.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg AUMAgAAAAJkAAALkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si 8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7 CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P n6+/z9/v/w8wYIgCADs= ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/master01.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii"
<= /div>
<= /div>
<= /div>
‹h= eader›
<= /div>
<= /div>
<= /div>
‹date/time›
Click to edit Master text styles
Second level
Third level
Fourth level
Fifth level
<= /div>
<= /div>
<= /div>
‹f= ooter›
<= /div>
<= /div>
<= /div>
‹#›
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/master03_stylesheet.css Content-Transfer-Encoding: base64 Content-Type: text/css Ym9keQ0KCXt3aWR0aDo1MzRweDsNCgloZWlnaHQ6NDAwcHg7fQ0KLlRCDQoJe21zby1zcGVjaWFs LWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5UDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQt ZmFtaWx5OkFyaWFsOw0KCWNvbG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQt c2l6ZToyMDklOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N Ci5CQg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMjI7fQ0KLkINCgl7dGV4dC1hbGln bjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOiM5OTAwMDA7DQoJZm9udC1zaXpl OjE1MiU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkIx Qg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMTM7fQ0KLkIxDQoJe3RleHQtYWxpZ246 bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5k ZXg6MTsNCglmb250LXNpemU6MTMzJTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Ut b3ZlcmZsb3c6MTt9DQouQjJCDQoJe21zby1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMjAyMjt9DQou QjINCgl7dGV4dC1hbGlnbjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNr Ow0KCW1zby1jb2xvci1pbmRleDoxOw0KCWZvbnQtc2l6ZToxMTQlOw0KCW1zby1jaGFyLXdyYXA6 MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5CM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0 OmJ1bGxldFwyMDEzO30NCi5CMw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1pbHk6QXJp YWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXplOjk1JTsN Cgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQjRCDQoJe21z by1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMDBCQjt9DQouQjQNCgl7dGV4dC1hbGlnbjpsZWZ0Ow0K CWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNrOw0KCW1zby1jb2xvci1pbmRleDoxOw0K CWZvbnQtc2l6ZTo5NSU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93 OjE7fQ0KLk5CDQoJe21zby1zcGVjaWFsLWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5ODQoJe3Rl eHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28t Y29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28t a2luc29rdS1vdmVyZmxvdzoxO30NCi5OMUINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0 XDIwMjI7fQ0KLk4xDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCglj b2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1j aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5OMkINCgl7bXNvLXNwZWNp YWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4yDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250 LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250 LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N Ci5OM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4zDQoJe3RleHQt YWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29s b3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu c29rdS1vdmVyZmxvdzoxO30NCi5ONE4NCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw MjI7fQ0KLk40DQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xv cjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFy LXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PQg0KCXttc28tc3BlY2lhbC1m b3JtYXQ6bm9idWxsZXRcMjAyMjt9DQouTw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1p bHk6QXJpYWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXpl Ojg1JTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzEN Cgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLk8yDQoJe21z by1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PMw0KCXttc28tY2hh ci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzQNCgl7bXNvLWNoYXItd3Jh cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCQg0KCXttc28tc3BlY2lhbC1mb3Jt YXQ6bm9idWxsZXRcMjAyMjt9DQouQ0INCgl7dGV4dC1hbGlnbjpjZW50ZXI7DQoJZm9udC1mYW1p bHk6QXJpYWw7DQoJY29sb3I6Izk5MDAwMDsNCglmb250LXNpemU6MTUyJTsNCgltc28tY2hhci13 cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0IxDQoJe21zby1jaGFyLXdyYXA6 MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5DQjINCgl7bXNvLWNoYXItd3JhcDoxOw0K CW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCMw0KCXttc28tY2hhci13cmFwOjE7DQoJbXNv LWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0I0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu c29rdS1vdmVyZmxvdzoxO30NCi5DVEINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw MjI7fQ0KLkNUDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNv bG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQtc2l6ZToyMDklOw0KCW1zby1j aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQkINCgl7bXNvLXNwZWNp YWwtZm9ybWF0OmJ1bGxldFwyMDIyO30NCi5IQg0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1m YW1pbHk6QXJpYWw7DQoJY29sb3I6Izk5MDAwMDsNCglmb250LXNpemU6MTMzJTsNCgltc28tY2hh ci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEIxDQoJe21zby1jaGFyLXdy YXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjINCgl7bXNvLWNoYXItd3JhcDox Ow0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkhCMw0KCXttc28tY2hhci13cmFwOjE7DQoJ bXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEI0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t a2luc29rdS1vdmVyZmxvdzoxO30NCi5RQg0KCXtjb2xvcjojOTkwMDAwOw0KCW1zby1jaGFyLXdy YXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjENCgl7bXNvLWNoYXItd3JhcDox Ow0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCMg0KCXttc28tY2hhci13cmFwOjE7DQoJ bXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouUUIzDQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t a2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjQNCgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5z b2t1LW92ZXJmbG93OjE7fQ0KLlRibA0KCXtjb2xvcjojOTkwMDAwOw0KCW1zby1jaGFyLXdyYXA6 MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwxDQoJe21zby1jaGFyLXdyYXA6MTsN Cgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwyDQoJe21zby1jaGFyLXdyYXA6MTsNCglt c28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwzDQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t a2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmw0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu c29rdS1vdmVyZmxvdzoxO30NCi5kZWZhdWx0Qg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6bm9idWxs ZXRcMjAyMjt9DQouZGVmYXVsdA0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1pbHk6QXJp YWw7DQoJZm9udC13ZWlnaHQ6bm9ybWFsOw0KCWZvbnQtc3R5bGU6bm9ybWFsOw0KCXRleHQtZGVj b3JhdGlvbjpub25lOw0KCXRleHQtc2hhZG93Om5vbmU7DQoJdGV4dC1lZmZlY3Q6bm9uZTsNCglt c28tZmFyZWFzdC1oaW50Om5vOw0KCWxheW91dC1mbG93Omhvcml6b250YWw7DQoJY29sb3I6Ymxh Y2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXplOjg1JTsNCgltc28tdGV4dC1yYWlz ZTowJTsNCgltc28tbGluZS1zcGFjaW5nOiIxMDAgMCAwIjsNCgltc28tbWFyZ2luLWxlZnQtYWx0 OjA7DQoJbXNvLXRleHQtaW5kZW50LWFsdDowOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu c29rdS1vdmVyZmxvdzoxOw0KCWRpcmVjdGlvbjpsdHI7DQoJbXNvLXdvcmQtd3JhcDoxOw0KCW1z by12ZXJ0aWNhbC1hbGlnbi1zcGVjaWFsOmJhc2VsaW5lOw0KCW1zby1hbnNpLWxhbmd1YWdlOkVO LVVTO30NCmE6bGluaw0KCXtjb2xvcjojMDA5OTk5ICFpbXBvcnRhbnQ7fQ0KYTphY3RpdmUNCgl7 Y29sb3I6IzMzMzM5OSAhaW1wb3J0YW50O30NCmE6dmlzaXRlZA0KCXtjb2xvcjojOTlDQzAwICFp bXBvcnRhbnQ7fQ0K ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/master04_stylesheet.css Content-Transfer-Encoding: base64 Content-Type: text/css Ym9keQ0KCXt3aWR0aDo1MzRweDsNCgloZWlnaHQ6NDAwcHg7fQ0KLlRCDQoJe21zby1zcGVjaWFs LWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5UDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQt ZmFtaWx5OkFyaWFsOw0KCWNvbG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQt c2l6ZToyMDklOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N Ci5CQg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMjI7fQ0KLkINCgl7dGV4dC1hbGln bjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOiMwMDAwOTk7DQoJZm9udC1zaXpl OjE1MiU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkIx Qg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMTM7fQ0KLkIxDQoJe3RleHQtYWxpZ246 bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5k ZXg6MTsNCglmb250LXNpemU6MTMzJTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Ut b3ZlcmZsb3c6MTt9DQouQjJCDQoJe21zby1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMjAyMjt9DQou QjINCgl7dGV4dC1hbGlnbjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNr Ow0KCW1zby1jb2xvci1pbmRleDoxOw0KCWZvbnQtc2l6ZToxMTQlOw0KCW1zby1jaGFyLXdyYXA6 MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5CM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0 OmJ1bGxldFwyMDEzO30NCi5CMw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1pbHk6QXJp YWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXplOjk1JTsN Cgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQjRCDQoJe21z by1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMDBCQjt9DQouQjQNCgl7dGV4dC1hbGlnbjpsZWZ0Ow0K CWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNrOw0KCW1zby1jb2xvci1pbmRleDoxOw0K CWZvbnQtc2l6ZTo5NSU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93 OjE7fQ0KLk5CDQoJe21zby1zcGVjaWFsLWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5ODQoJe3Rl eHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28t Y29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28t a2luc29rdS1vdmVyZmxvdzoxO30NCi5OMUINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0 XDIwMjI7fQ0KLk4xDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCglj b2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1j aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5OMkINCgl7bXNvLXNwZWNp YWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4yDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250 LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250 LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N Ci5OM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4zDQoJe3RleHQt YWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29s b3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu c29rdS1vdmVyZmxvdzoxO30NCi5ONE4NCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw MjI7fQ0KLk40DQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xv cjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFy LXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PQg0KCXttc28tc3BlY2lhbC1m b3JtYXQ6bm9idWxsZXRcMjAyMjt9DQouTw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1p bHk6QXJpYWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXpl Ojg1JTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzEN Cgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLk8yDQoJe21z by1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PMw0KCXttc28tY2hh ci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzQNCgl7bXNvLWNoYXItd3Jh cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCQg0KCXttc28tc3BlY2lhbC1mb3Jt YXQ6bm9idWxsZXRcMjAyMjt9DQouQ0INCgl7dGV4dC1hbGlnbjpjZW50ZXI7DQoJZm9udC1mYW1p bHk6QXJpYWw7DQoJY29sb3I6IzAwMDA5OTsNCglmb250LXNpemU6MTUyJTsNCgltc28tY2hhci13 cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0IxDQoJe21zby1jaGFyLXdyYXA6 MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5DQjINCgl7bXNvLWNoYXItd3JhcDoxOw0K CW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCMw0KCXttc28tY2hhci13cmFwOjE7DQoJbXNv LWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0I0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu c29rdS1vdmVyZmxvdzoxO30NCi5DVEINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw MjI7fQ0KLkNUDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNv bG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQtc2l6ZToyMDklOw0KCW1zby1j aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQkINCgl7bXNvLXNwZWNp YWwtZm9ybWF0OmJ1bGxldFwyMDIyO30NCi5IQg0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1m YW1pbHk6QXJpYWw7DQoJY29sb3I6IzAwMDA5OTsNCglmb250LXNpemU6MTMzJTsNCgltc28tY2hh ci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEIxDQoJe21zby1jaGFyLXdy YXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjINCgl7bXNvLWNoYXItd3JhcDox Ow0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkhCMw0KCXttc28tY2hhci13cmFwOjE7DQoJ bXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEI0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t a2luc29rdS1vdmVyZmxvdzoxO30NCi5RQg0KCXtjb2xvcjojMDAwMDk5Ow0KCW1zby1jaGFyLXdy YXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjENCgl7bXNvLWNoYXItd3JhcDox Ow0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCMg0KCXttc28tY2hhci13cmFwOjE7DQoJ bXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouUUIzDQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t a2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjQNCgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5z b2t1LW92ZXJmbG93OjE7fQ0KLlRibA0KCXtjb2xvcjojMDAwMDk5Ow0KCW1zby1jaGFyLXdyYXA6 MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwxDQoJe21zby1jaGFyLXdyYXA6MTsN Cgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwyDQoJe21zby1jaGFyLXdyYXA6MTsNCglt c28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwzDQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t a2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmw0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu c29rdS1vdmVyZmxvdzoxO30NCi5kZWZhdWx0Qg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6bm9idWxs ZXRcMjAyMjt9DQouZGVmYXVsdA0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1pbHk6QXJp YWw7DQoJZm9udC13ZWlnaHQ6bm9ybWFsOw0KCWZvbnQtc3R5bGU6bm9ybWFsOw0KCXRleHQtZGVj b3JhdGlvbjpub25lOw0KCXRleHQtc2hhZG93Om5vbmU7DQoJdGV4dC1lZmZlY3Q6bm9uZTsNCglt c28tZmFyZWFzdC1oaW50Om5vOw0KCWxheW91dC1mbG93Omhvcml6b250YWw7DQoJY29sb3I6Ymxh Y2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXplOjg1JTsNCgltc28tdGV4dC1yYWlz ZTowJTsNCgltc28tbGluZS1zcGFjaW5nOiIxMDAgMCAwIjsNCgltc28tbWFyZ2luLWxlZnQtYWx0 OjA7DQoJbXNvLXRleHQtaW5kZW50LWFsdDowOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu c29rdS1vdmVyZmxvdzoxOw0KCWRpcmVjdGlvbjpsdHI7DQoJbXNvLXdvcmQtd3JhcDoxOw0KCW1z by12ZXJ0aWNhbC1hbGlnbi1zcGVjaWFsOmJhc2VsaW5lOw0KCW1zby1hbnNpLWxhbmd1YWdlOkVO LVVTO30NCmE6bGluaw0KCXtjb2xvcjojMDA5OTk5ICFpbXBvcnRhbnQ7fQ0KYTphY3RpdmUNCgl7 Y29sb3I6IzMzMzM5OSAhaW1wb3J0YW50O30NCmE6dmlzaXRlZA0KCXtjb2xvcjojOTlDQzAwICFp bXBvcnRhbnQ7fQ0K ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/script.js Content-Transfer-Encoding: quoted-printable Content-Type: application/javascript; charset="us-ascii" function LoadSld() { var sld=3DGetObj("SlideObj") if( !g_supportsPPTHTML ) { =09 sld.style.visibility=3D"visible" return } if( MakeNotesVis() ) return runAnimations =3D _InitAnimations(); =09 if( IsWin("PPTSld") ) parent.SldUpdated(GetSldId()) g_origSz=3DparseInt(SlideObj.style.fontSize) g_origH=3Dsld.style.posHeight g_origW=3Dsld.style.posWidth g_scaleHyperlinks=3D(document.all.tags("AREA").length>0) if( g_scaleHyperlinks ) InitHLinkArray() if( g_scaleInFrame||(IsWin("PPTSld") && parent.IsFullScrMode() ) ) document.body.scroll=3D"no" _RSW() if( IsWin("PPTSld") && parent.IsFullScrMode() ) FullScrInit(); =09 MakeSldVis(); ChkAutoAdv() if( runAnimations ) { if( document.all("NSPlay") ) document.all("NSPlay").autoStart =3D false; if( sld.filters && sld.filters.revealtrans ) setTimeout( "document.body.start()", sld.filters.revealtrans.duration * = 1000 ); else document.body.start(); } } function MakeSldVis()=20 { var fTrans=3Dg_showAnimation && SldHasTrans() if( fTrans )=09 { if( g_bgSound ) { idx=3Dg_bgSound.indexOf(","); pptSound.src=3Dg_bgSound.substr( 0, idx ); pptSound.loop=3D -(parseInt(g_bgSound.substr(idx+1))); } SlideObj.filters.revealtrans.Apply()=09 } SlideObj.style.visibility=3D"visible" if( fTrans ) SlideObj.filters.revealtrans.Play() } function MakeNotesVis()=20 { if( !IsNts() ) return false=20 SlideObj.style.display=3D"none" nObj =3D document.all.item("NotesObj") parent.SetHasNts(0) if( nObj ) {=20 nObj.style.display=3D"" parent.SetHasNts(1) } return 1 } function ChkAutoAdv() { if(SldHasTrans()) SlideObj.onfilterchange=3DAutoAdv else AutoAdv() } function AutoAdv() { if(!IsWin("PPTSld") || !gUseSldTimings )return var sld=3DGetCurSld() if( (sld.mAdvDelay>0) && !parent.IsFramesMode() ) setTimeout("parent.GoToNextSld()",sld.mAdvDelay) } function GetObj(id) { if(g_supportsPPTHTML) return document.all(id); else return document.getElementById(id); } function SldHasTrans() { return SlideObj.style.filter !=3D ""; } function GetSldId()=20 { var regExp =3D /file:\/\/\//i var pos =3D location.href.search(regExp) if (MHTMLPrefix !=3D "" && pos !=3D -1) sId =3D location.href.substring(pos) else { sId =3D RemoveFilePrefixFromHref(location.href); var regExp =3D /\// var fixedHref =3D sId var pos =3D -1 =09 pos =3D fixedHref.search(regExp) while (pos !=3D -1) { fixedHref =3D fixedHref.replace(regExp, "\\") pos =3D fixedHref.search(regExp) } =09 if (g_fBaseHyperlink =3D=3D true) sId =3D "file:///" + fixedHref; else sId =3D fixedHref.substring(fixedHref.lastIndexOf('\\') + 1) } =09 return sId } function HideMenu() { if( frames["PPTSld"] && PPTSld.document.all.item("ctx= tmenu") && PPTSld.ctxtmenu.style.display!=3D"none" ) { PPTSld.ctxtmenu.styl= e.display=3D'none'; return true } return false } function IsWin( name ) { return window.name =3D=3D name } function IsNts() { return IsWin("PPTNts") } function IsSldOrNts() { return( IsWin("PPTSld")||IsWin("PPTNts") ) } function SupportsPPTAnimation() { return( navigator.platform =3D=3D "Win32"= && navigator.appVersion.indexOf("Windows")>0 ) } function SupportsPPTHTML() { var appVer=3Dnavigator.appVersion, msie=3DappVer.indexOf("MSIE "), ver=3D0 if( msie >=3D 0 ) ver=3DparseFloat( appVer.substring( msie+5, appVer.indexOf(";",msie) ) ) else ver=3DparseInt(appVer) return( ver >=3D 4 && msie >=3D 0 ) } function _RSW() { if( !g_supportsPPTHTML || IsNts() || ( !g_scaleInFrame && (!IsWin("PPTSld") || !parent.IsFullScrMode()) ) ) return var padding=3D0; if( IsWin("PPTSld") && parent.IsFramesMode() ) padding=3D6 cltWidth=3Ddocument.body.clientWidth-padding cltHeight=3Ddocument.body.clientHeight-padding factor=3D(1.0*cltWidth)/g_origW if( cltHeight < g_origH*factor ) factor=3D(1.0*cltHeight)/g_origH newSize =3D g_origSz * factor if( newSize < 1 ) newSize=3D1 s=3DSlideObj.style s.fontSize=3DnewSize+"px" s.posWidth=3Dg_origW*factor s.posHeight=3Dg_origH*factor s.posLeft=3D(cltWidth-s.posWidth+padding)/2 s.posTop=3D(cltHeight-s.posHeight+padding)/2 if( g_scaleHyperlinks ) ScaleHyperlinks( factor ) } function _InitAnimations() { animRuntimeInstalled =3D ''+document.body.localTime !=3D 'undefined'; isFullScreen =3D (window.name =3D=3D "PPTSld") && !parent.IsFramesMode(); g_animUseRuntime =3D g_showAnimation && animRuntimeInstalled && !(isFullSc= reen && parent.IsSldVisited()); if( g_animUseRuntime ) { collSeq =3D document.all.tags("seq"); if( collSeq !=3D null ) { for(ii=3D0;ii numSlds ) gSldJumpIdx =3D numSlds; if ( gSldJumpIdx >=3D 0 ) { if ( gSldJumpIdx =3D=3D 0 ) gSldJumpIdx =3D 1; var jumpTo =3D parseInt(gSldJumpIdx); gSldJump =3D 0; gSldJumpIdx =3D ""; win.GoToSld( parent.GetSldList().mList[jumpTo-1].mSldHref ) } } } function _KDH() { if( event.keyCode =3D=3D 8 ) { event.returnValue =3D 0; parent.GoToPrevSld(); } } function DocumentOnClick() { if( IsNts() || parent.HideMenu() ) return; if( ( g_allowAdvOnClick && !parent.IsFramesMode() ) || (event && (event.keyCode=3D=3D32) ) ) parent.GoToNextSld(); } var g_supportsPPTHTML =3D SupportsPPTHTML(), g_scaleInFrame =3D 1, gId=3D""= , g_bgSound=3D"", g_scaleHyperlinks =3D false, g_allowAdvOnClick =3D 1, g_showInBrowser = =3D 0, gLoopCont =3D 0, gUseSldTimings =3D 1; var g_showAnimation =3D g_supportsPPTHTML && SupportsPPTAnimation() && ( (w= indow.name=3D=3D"PPTSld" && !parent.IsFramesMode()) || g_showInBrowser );va= r g_animManager =3D null; var g_animUseRuntime =3D false; var g_animItemsToHide, g_animInteractiveItems, g_animSlideTime; var g_animMainSequence =3D null; var ENDSHOW_MESG=3D"End of slide show, click to exit.", SCREEN_MODE=3D"Fram= es", gIsEndShow=3D0, NUM_VIS_SLDS=3D24, SCRIPT_HREF=3D"script.js", FULLSCR_= HREF=3D"fullscreen.htm"; var gCurSld =3D gPrevSld =3D 1, g_offset =3D 0, gNtsOpen =3D gHasNts =3D gO= tlTxtExp =3D 0, gHasNarration =3D 0, gOtlOpen =3D true window.gPPTHTML=3DSupportsPPTHTML() var g_fBaseHyperlink =3D false; var gMainDoc=3Dnew Array(new hrefList("slide0001.htm",1,-1,1),new hrefList(= "slide0004.htm",1,-1,1),new hrefList("slide0005.htm",1,-1,1),new hrefList("= slide0016.htm",1,-1,1),new hrefList("slide0010.htm",1,-1,1),new hrefList("s= lide0007.htm",1,-1,1),new hrefList("slide0002.htm",1,-1,1),new hrefList("sl= ide0008.htm",1,-1,1),new hrefList("slide0011.htm",1,-1,1),new hrefList("sli= de0012.htm",1,-1,1),new hrefList("slide0013.htm",1,-1,1),new hrefList("slid= e0014.htm",1,-1,1),new hrefList("slide0015.htm",1,-1,1),new hrefList("slide= 0017.htm",1,-1,1),new hrefList("slide0018.htm",1,-1,1),new hrefList("slide0= 019.htm",1,-1,1),new hrefList("slide0009.htm",1,-1,1),new hrefList("slide00= 21.htm",1,-1,1),new hrefList("slide0022.htm",1,-1,1),new hrefList("slide002= 3.htm",1,-1,1),new hrefList("slide0024.htm",1,-1,1),new hrefList("slide0025= .htm",1,-1,1),new hrefList("slide0020.htm",1,-1,1),new hrefList("slide0003.= htm",1,-1,1)); /********************************************* Frameset functions These functions control slide navigation and state of the frameset. **********************************************/ function RemoveFilePrefixFromHref(href) { var regExp =3D /^file:\/\/\//i; return href.replace(regExp, "") } function FullScrInit() { g_allowAdvOnClick =3D GetCurSld().mAdvOnClk document.body.style.backgroundColor=3D"black" document.oncontextmenu=3Dparent._CM; document.onkeydown =3D _KDH; document.ondragstart=3DCancel document.onselectstart=3DCancel self.focus() } function Redirect( frmId ) {=09 var str=3Ddocument.location.hash,idx=3Dstr.indexOf('#'), sId=3DGetSldId() if(idx>=3D0) str=3Dstr.substr(1); if( window.name !=3D frmId && ( sId !=3D str) ) { obj =3D GetObj("Main-File") window.location.href=3Dobj.href+"#"+sId return 1 } return 0 } var MHTMLPrefix =3D CalculateMHTMLPrefix();=20 function CalculateMHTMLPrefix() { if ( document.location.protocol =3D=3D 'mhtml:') {=20 href=3Dnew String(document.location.href)=20 Start=3Dhref.indexOf('!')+1=20 End=3Dhref.lastIndexOf('/')+1=20 if (End < Start)=20 return href.substring(0, Start)=20 else=20 return href.substring(0, End)=20 } return ''; } function GetTags(base,tag) { if(g_supportsPPTHTML) return base.all.tags(tag); else return base.getElementsByTagName(tag); } function UpdNtsPane(){ if(frames["PPTNts"]) PPTNts.location.replace( MHTMLP= refix+GetHrefObj( gCurSld ).mNtsHref ) } function UpdNavPane( sldIndex ){ if(gNavLoaded) PPTNav.UpdNav() } function UpdOtNavPane(){ if(gOtlNavLoaded) PPTOtlNav.UpdOtlNav() } function UpdOtlPane(){ if(gOtlLoaded) PPTOtl.UpdOtl() } function SetHasNts( fVal ) { if( gHasNts !=3D fVal ) { gHasNts=3DfVal UpdNavPane() } } function ToggleOtlText() { gOtlTxtExp=3D!gOtlTxtExp UpdOtlPane() } function ClearMedia() { // Clear any sounds playing before launching another browser window. Other= wise, // in fullscreen mode, you'll continue to hear the sound in the frames mod= e. if (PPTSld.pptSound) PPTSld.pptSound.loop =3D 0; } function FullScreen() {=20 if ( PPTSld.g_animUseRuntime ) PPTSld.document.body.pause(); ClearMedia(); var href =3D ( document.location.protocol =3D=3D 'mhtml:') ? FULLSCR_HREF = : FULLSCR_HREF+"#"+GetHrefObj(gCurSld).mSldHref; if (MHTMLPrefix !=3D "") href =3D RemoveFilePrefixFromHref(href) if(PPTNav.event.ctrlKey) { var w =3D (window.screen.availWidth * 1.0) / 2.0 var h =3D w * (PPTSld.g_origH * 1.0) / PPTSld.g_origW win =3D window.open( MHTMLPrefix+href,null,"toolbar=3D0,resizable=3D1,top= =3D0,left=3D0," + "width=3D"+ w + ",height=3D" + h ); if( win.document.body && PPTSld.g_animUseRuntime ) win.document.body.PPTSldFrameset=3Dwindow; } else { win =3D window.open( MHTMLPrefix+href,null,"fullscreen=3Dyes" ); if( win.document.body && PPTSld.g_animUseRuntime ) win.document.body.PPTSldFrameset=3Dwindow; } } function ToggleVNarration() { rObj=3DPPTSld.document.all("NSPlay") if( rObj && !PPTSld.g_animUseRuntime ) { if( (rObj.playState =3D=3D 1)||(rObj.playState =3D=3D 0) ) rObj.Play() else if( rObj.playState =3D=3D 2 ) rObj.Pause() else return; } else if( PPTSld.g_animUseRuntime ) { narObj =3D PPTSld.document.all("narrationID") if( narObj ) narObj.togglePause() } } function GetCurSldNum() { =20 obj=3DGetHrefObj(gCurSld) if( obj.mOrigVis =3D=3D 1 ) return obj.mSldIdx else =20 return gCurSld } function GetNumSlds() { =20 if( GetHrefObj(gCurSld).mOrigVis =3D=3D 1 ) return GetSldList().mNumVisSlds; else return GetSldList().mList.length } function GetSldNum( href ) { for(ii=3D0; ii 1 ) PopSldList(); else if( !IsFramesMode() ) { if( gLoopCont ) GoToFirst() else EndShow() } } function GoToPrevSld() { ii=3DgCurSld-1 if( ii > 0 ) { obj=3DGetHrefObj(ii) while ( obj && ( obj.mVis =3D=3D 0 ) && ( ii>0 ) ) obj=3DGetHrefObj(--ii) if( ii =3D=3D 0 ) ii=3D1 GoToSldNum(ii) } } function GoToFirst(){ GoToSld( GetHrefObj(1).mSldHref ) } function GoToLast() { ii=3DGetSldList().mList.length if( ii !=3D gCurSld ) GoToSld( GetHrefObj(ii).mSldHref ) } function GoToSldNum( num ) { if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue obj =3D GetHrefObj( num ) obj.mVis=3D1 gPrevSld=3DgCurSld gCurSld =3D num; =09 if (MHTMLPrefix !=3D "") PPTSld.location.replace(MHTMLPrefix+RemoveFilePrefixFromHref(obj.mSldHref= )) else PPTSld.location.replace(obj.mSldHref) =09 if( IsFramesMode() ) { UpdNavPane(); UpdOtlPane(); UpdNtsPane() } } function GoToSld( href ) { if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue GetHrefObj( GetSldNum(href) ).mVis=3D1 if (MHTMLPrefix !=3D "") PPTSld.location.replace(MHTMLPrefix+RemoveFilePrefixFromHref(href)) else PPTSld.location.replace(href) } function SldUpdated( id ) { if( id =3D=3D GetHrefObj(gCurSld).mSldHref ) return gPrevSld=3DgCurSld gCurSld=3DGetSldNum(id) if( IsFramesMode() ) { UpdNavPane(); UpdOtlPane(); UpdNtsPane() } } function PrevSldViewed(){ GoToSld( GetHrefObj(gPrevSld).mSldHref ) } function HasPrevSld() { return ( gIsEndShow || ( gCurSld !=3D 1 && GetHrefO= bj( gCurSld-1 ).mVis =3D=3D 1 )||( GetCurSldNum() > 1 ) ) } function HasNextSld() { return (GetCurSldNum() !=3D GetNumSlds()) } function CloseWindow() { if( HideMenu() ) return; =09 var event =3D PPTSld.event; if( !IsFramesMode() && event && (event.keyCode=3D=3D27 || event.keyCode=3D= =3D32 || event.type=3D=3D"click" ) ) window.close( self ); CatchNumKeys( self, event ); } function Unload() { gIsEndShow=3D0; } function SetupEndShow() { gIsEndShow=3D1; PPTSld.document.body.scroll=3D"no"; PPTSld.document.onkeypress=3DCloseWindow; PPTSld.document.onclick=3DCloseWindow; PPTSld.document.oncontextmenu=3D_CM; } function EndShow() { if( IsFramesMode() ) return if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue doc=3DPPTSld.document var dir =3D doc.body.dir if( dir !=3D "rtl" ) dir =3D "ltr"; doc.open() doc.writeln('


' + ENDSHOW_MESG + '

') doc.close() } function SetSldVisited(){ GetSldList().mList[gCurSld-1].mVisited=3Dtrue } function IsSldVisited(){ return GetSldList().mList[gCurSld-1].mVisited } function hrefList( sldHref, visible, advDelay, advClk ) { this.mSldHref=3D this.mNtsHref =3D sldHref this.mOrigVis=3D this.mVis =3D visible this.mVisited=3D false this.mAdvDelay=3D advDelay this.mAdvOnClk=3D advClk } function SldList(arr,curSld,fEnd) { this.mCurSld =3D curSld; this.mList =3D new Array(); var idx =3D 1; for(ii=3D0;ii 0) { PushSldList(sldList,fEnd); gCurSld =3D 1; } else if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue } function PushSldList(arr,fEnd) { var ii =3D gSldStack.length; gSldStack[ii] =3D new SldList(arr,gCurSld,fEnd); GoToSld( gSldStack[ii].mList[0].mSldHref ); } function PopSldList() { if (gSldStack[gSldStack.length-1].fEndShow) EndShow() else { gCurSld =3D gSldStack[gSldStack.length-1].mCurSld; gSldStack[gSldStack.length-1] =3D null; gSldStack.length--; var sldList =3D gSldStack[gSldStack.length-1]; GoToSld( sldList.mList[gCurSld - 1].mSldHref ); } } var custShowList=3Dnew Array(); /********************************************* Navigation button implementation There are 2 types of buttons: ImgBtn, TxtBtn implemented as function objects. They share a similiar interface so the event handlers can call SetActive, for example, on a button=20 object without needing to know exactly=20 what type of button it is. **********************************************/ //---------------------------------- function ImgBtn( oId,bId,w,action ) //---------------------------------- { var t=3Dthis t.Perform =3D _IBP t.SetActive =3D _IBSetA t.SetInactive=3D _IBSetI t.SetPressed =3D _IBSetP t.SetDisabled=3D _IBSetD t.Enabled =3D _IBSetE t.ChangeIcon =3D null t.UserAction =3D action t.ChgState =3D _IBUI t.mObjId =3D oId t.mBorderId=3D bId t.mWidth =3D w t.mIsOn =3D t.mCurState =3D 0 } function _IBSetA() { if( this.mIsOn ) { obj=3Dthis.ChgState( gHiliteClr,gShadowClr,2 ) obj.style.posTop=3D0 } } function _IBSetI() { if( this.mIsOn ) { obj=3Dthis.ChgState( gFaceClr,gFaceClr,1 ) obj.style.posTop=3D0=20 } } function _IBSetP() { if( this.mIsOn ) { obj=3Dthis.ChgState( gShadowClr,gHiliteClr,2 ) obj.style.posLeft+=3D1; obj.style.posTop+=3D1 } } function _IBSetD() { =20 obj=3Dthis.ChgState( gFaceClr,gFaceClr,0 ) obj.style.posTop=3D0=20 } function _IBSetE( state ) { var t=3Dthis GetObj( t.mBorderId ).style.visibility=3D"visible" if( state !=3D t.mIsOn ) { t.mIsOn=3Dstate if( state ) t.SetInactive() else t.SetDisabled() } } function _IBP() { var t=3Dthis if( t.mIsOn ) { if( t.UserAction !=3D null ) t.UserAction() if( t.ChangeIcon ) { obj=3DGetObj(t.mObjId) if( t.ChangeIcon() ) obj.style.posLeft=3Dobj.style.posLeft+(t.mCurState-4)*t.mWidth else obj.style.posLeft=3Dobj.style.posLeft+(t.mCurState-0)*t.mWidth } t.SetActive() } =20 } function _IBUI( clr1,clr2,nextState ) { var t=3Dthis SetBorder( GetObj( t.mBorderId ),clr1,clr2 ) obj=3DGetObj( t.mObjId ) obj.style.posLeft=3Dobj.style.posLeft+(t.mCurState-nextState)*t.mWidth-obj= .style.posTop t.mCurState=3DnextState return obj } //----------------------------------------- function TxtBtn( oId,oeId,action,chkState ) //----------------------------------------- { var t=3Dthis t.Perform =3D _TBP t.SetActive =3D _TBSetA t.SetInactive=3D _TBSetI t.SetPressed =3D _TBSetP t.SetDisabled=3D _TBSetD t.SetEnabled =3D _TBSetE t.GetState =3D chkState t.UserAction =3D action t.ChgState =3D _TBUI t.mObjId =3D oId t.m_elementsId=3D oeId t.mIsOn =3D 1 } function _TBSetA() { var t=3Dthis if( t.mIsOn && !t.GetState() ) t.ChgState( gHiliteClr,gShadowClr,0,0 ) } function _TBSetI() { var t=3Dthis if( t.mIsOn && !t.GetState() ) t.ChgState( gFaceClr,gFaceClr,0,0 ) } function _TBSetP() { if( this.mIsOn ) this.ChgState( gShadowClr,gHiliteClr,1,1 ) } function _TBSetD() { =20 this.ChgState( gFaceClr,gFaceClr,0,0 ) this.mIsOn =3D 0 } function _TBSetE() { var t=3Dthis if( !t.GetState() ) t.ChgState( gFaceClr,gFaceClr,0,0 ) else t.ChgState( gShadowClr,gHiliteClr,1,1 ) t.mIsOn =3D 1 } function _TBP() { var t=3Dthis if( t.mIsOn ) {=20 if( t.UserAction !=3D null ) t.UserAction() if( !t.GetState ) return if( t.GetState() ) t.SetPressed() else t.SetActive() } =20 } function _TBUI( clr1,clr2,lOffset,tOffset ) { SetBorder( GetObj( this.mObjId ),clr1,clr2 ) Offset( GetObj( this.m_elementsId ),lOffset,tOffset ) } function Offset( obj, top, left ){ obj.style.top=3Dtop; obj.style.left=3Dle= ft } function SetBorder( obj, upperLeft, lowerRight ) { s=3Dobj.style; s.borderStyle =3D "solid" s.borderWidth =3D 1=20 s.borderLeftColor =3D s.borderTopColor =3D upperLeft s.borderBottomColor=3D s.borderRightColor =3D lowerRight } function GetBtnObj(){ return gBtnArr[window.event.srcElement.id] } function BtnOnOver(){ b=3DGetBtnObj(); if( b !=3D null ) b.SetActive() } function BtnOnDown(){ b=3DGetBtnObj(); if( b !=3D null ) b.SetPressed() } function BtnOnOut(){ b=3DGetBtnObj(); if( b !=3D null ) b.SetInactive() } function BtnOnUp() { b=3DGetBtnObj() if( b !=3D null ) b.Perform() else Upd() } function GetNtsState(){ return parent.gNtsOpen } function GetOtlState(){ return parent.gOtlOpen } function GetOtlTxtState(){ return parent.gOtlTxtExp } function NtsBtnSetFlag( fVal ) { s=3Ddocument.all.item( this.m_flagId ).style s.display=3D"none" if( fVal ) s.display=3D"" else s.display=3D"none" } function _BSetA_Border(){ b =3D gBtnArr[this.mObjId]; if( b !=3D null ) b.S= etActive() } function _BSetI_Border(){ b =3D gBtnArr[this.mObjId]; if( b !=3D null ) b.S= etInactive() } function _BSetP_Border(){ b =3D gBtnArr[this.mObjId]; if( b !=3D null ) b.S= etPressed() } function _BSetA_BorderImg() {=20 b =3D gBtnArr[this.mBorderId]=20 if( b !=3D null && this.mIsOn && !b.GetState() ) { obj=3Dthis.ChgState( gHiliteClr,gShadowClr,2 ) obj.style.posTop=3D0 } } function _BSetI_BorderImg() {=20 b =3D gBtnArr[this.mBorderId] if( b !=3D null && this.mIsOn && !b.GetState() ) { obj=3Dthis.ChgState( gFaceClr,gFaceClr,1 ) obj.style.posTop=3D0 } } var gHiliteClr=3D"THREEDHIGHLIGHT",gShadowClr=3D"THREEDSHADOW",gFaceClr=3D"= THREEDFACE" var gBtnArr =3D new Array() gBtnArr["nb_otl"] =3D new TxtBtn( "nb_otl","nb_otlElem",parent.ToggleOtlPan= e,GetOtlState ) gBtnArr["nb_otlElem"] =3D new TxtBtn( "nb_otl","nb_otlElem",parent.ToggleOt= lPane,GetOtlState ) gBtnArr["nb_nts"] =3D new ImgBtn( "nb_nts","nb_ntsBorder",10,parent.ToggleN= tsPane ) gBtnArr["nb_nts"].SetActive =3D _BSetA_BorderImg; gBtnArr["nb_nts"].SetInactive =3D _BSetI_BorderImg; gBtnArr["nb_ntsBorder"] =3D new TxtBtn( "nb_ntsBorder","nb_ntsElem",parent.= ToggleNtsPane,GetNtsState ) gBtnArr["nb_ntsElem"] =3D new TxtBtn( "nb_ntsBorder","nb_ntsElem",parent.To= ggleNtsPane,GetNtsState ) gBtnArr["nb_prevBorder"] =3D gBtnArr["nb_prev"]=3D new ImgBtn( "nb_prev","n= b_prevBorder",30,parent.GoToPrevSld ) gBtnArr["nb_nextBorder"] =3D gBtnArr["nb_next"]=3D new ImgBtn( "nb_next","n= b_nextBorder",30,parent.GoToNextSld ) gBtnArr["nb_sldshw"]=3D new ImgBtn( "nb_sldshw","nb_sldshwBorder",18,parent= .FullScreen ) gBtnArr["nb_sldshwBorder"] =3D new TxtBtn( "nb_sldshw","nb_sldshwBorder",pa= rent.FullScreen,null ) gBtnArr["nb_sldshwBorder"].SetActive =3D _BSetA_Border; gBtnArr["nb_sldshwBorder"].SetInactive =3D _BSetI_Border; gBtnArr["nb_sldshwText"] =3D new TxtBtn( "nb_sldshw","nb_sldshwText",parent= .FullScreen,null ) gBtnArr["nb_sldshwText"].SetActive =3D _BSetA_Border; gBtnArr["nb_sldshwText"].SetInactive =3D _BSetI_Border; gBtnArr["nb_voice"] =3D gBtnArr["nb_voiceBorder"] =3D new ImgBtn( "nb_voice= ","nb_voiceBorder",18,parent.ToggleVNarration ) gBtnArr["nb_otlTxtBorder"] =3D gBtnArr["nb_otlTxt"]=3D new ImgBtn( "nb_otlT= xt","nb_otlTxtBorder",23,parent.ToggleOtlText ) gBtnArr["nb_ntsBorder"].m_flagId=3D "nb_nts" gBtnArr["nb_ntsBorder"].SetFlag =3D NtsBtnSetFlag gBtnArr["nb_otlTxt"].ChangeIcon=3D GetOtlTxtState /********************************************* Context menu implementation _CM() is the function that's hooked up to the oncontextmenu event. Once we're asked to show the menu, we first build it by creating DIVs on-the-fly. Then we position it=20 within the screen area so it doesn't get clipped. Creating the DIVs using createElement() means we don't have to write out any extra HTML into the slide HTML files. **********************************************/ var sNext=3D"Next",sPrev=3D"Previous",sEnd=3D"End Show",sFont=3D"Arial",sAr= row=3D"Arrow",sFreeform=3D"Freeform",sRect=3D"Rectangle",sOval=3D"Oval" function ShowMenu() { BuildMenu(); var doc=3DPPTSld.document.body,x=3DPPTSld.event.clientX+doc.scrollLeft,y= =3DPPTSld.event.clientY+doc.scrollTop m =3D PPTSld.document.all.item("ctxtmenu") m.style.pixelLeft=3Dx if( (x+m.scrollWidth > doc.clientWidth)&&(x-m.scrollWidth > 0) ) m.style.pixelLeft=3Dx-m.scrollWidth m.style.pixelTop=3Dy if( (y+m.scrollHeight > doc.clientHeight)&&(y-m.scrollHeight > 0) ) m.style.pixelTop=3Dy-m.scrollHeight m.style.display=3D"" } function _CM() { if( !parent.IsFullScrMode() ) return; if(!PPTSld.event.ctrlKey) { ShowMenu() return false } else HideMenu() } function BuildMenu() { if( PPTSld.document.all.item("ctxtmenu") ) return var mObj=3DCreateItem( PPTSld.document.body ) mObj.id=3D"ctxtmenu" mObj.style.visibility=3D"hidden" var s=3DmObj.style s.position=3D"absolute" s.cursor=3D"default" s.width=3D"120px" SetCMBorder(mObj,"menu","black") var iObj=3DCreateItem( mObj ) SetCMBorder( iObj, "threedhighlight","threedshadow" ) iObj.style.padding=3D2 CreateMenuItem( iObj,sNext,M_GoNextSld,M_True ) CreateMenuItem( iObj,sPrev,M_GoPrevSld,M_HasPrevSld ) =09 CreateSeparator( iObj ) CreateMenuItem( iObj,sEnd,M_End,M_True ) mObj.style.visibility=3D"visible" } function Cancel() { window.event.cancelBubble=3Dtrue; window.event.returnVa= lue=3Dfalse } function Highlight() { ChangeClr("activecaption","threedhighlight") } function Deselect() { ChangeClr("threedface","menutext") } function Perform() { e=3DPPTSld.event.srcElement if( e.type=3D=3D"menuitem" && e.IsActive() ) e.Action() else PPTSld.event.cancelBubble=3Dtrue } function ChangeClr( bg,clr ) { e=3DPPTSld.event.srcElement if( e.type=3D=3D"menuitem" && e.IsActive() ) { e.style.backgroundColor=3Dbg e.style.color=3Dclr } } function M_HasPrevSld() { return( parent.HasPrevSld() ) } function M_GoNextSld() { if( gIsEndShow ) M_End(); else GoToNextSld() } function M_GoPrevSld() { if( gIsEndShow ) { gIsEndShow=3D0; history.back();= PPTSld.event.cancelBubble=3Dtrue; } else GoToPrevSld() } function M_True() { return true } function M_End() { window.close( self ) } function CreateMenuItem( node,text,action,eval ) { var e=3DCreateItem( node ) e.type=3D"menuitem" e.Action=3Daction e.IsActive=3Deval e.innerHTML=3Dtext if( !e.IsActive() ) e.style.color=3D"threedshadow" e.onclick=3DPerform e.onmouseover=3DHighlight e.onmouseout=3DDeselect s=3De.style; s.fontFamily=3DsFont s.fontSize=3D"9pt" s.paddingLeft=3D2 } function CreateSeparator( node ) { var sObj=3DCreateItem( node ) SetCMBorder(sObj,"menu","menu") var s=3DsObj.style s.borderTopColor=3D"threedshadow" s.borderBottomColor=3D"threedhighlight" s.height=3D1 s.fontSize=3D"0px" } function CreateItem( node ) { var elem=3DPPTSld.document.createElement("DIV") node.insertBefore( elem ) return elem } function SetCMBorder( o,ltClr,rbClr ) { var s=3Do.style s.backgroundColor=3D"menu" s.borderStyle=3D"solid" s.borderWidth=3D1 s.borderColor=3DltClr+" "+rbClr+" "+rbClr+" "+ltClr } ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/fullscreen.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/buttons.gif Content-Transfer-Encoding: base64 Content-Type: image/gif R0lGODlhWAESAPf4AAAAAIAAAACAAICAAAAAgIAAgACAgICAgAQEBISEBASEBISEhAQEhMTExAQE /KTM9Pz8/ERERPz8BAT8/KSkpGRkhMTcxCRkxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAMDAwP8AAAD/AP//AAAA//8A/wD//////yH5BAEAAPgALAAAAABYARIA QAj/APEJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGCEiQKCRo8YDIEHig2DxAD4LKD1avDDhgUuV GUOGbHBR5QGYFBG4fHAB58EKECJEwCfUYAWPFGAygLCRKQIIUKM6WAohKUGgCikcFWh1INWoYKVS 7SrQ41GbIhGYLAuVQVOoC+IyXUuUAkG1HE3KFDhAwkgJc5/qDZmxsOHDiBMrXsy4sePDGyP7lChT 5MULmDPnlDw5YmW6FTNrfgi0aNGEZPEtbfo2bNTUpYeeRph69dPWrqvCNFuBIGG1A59CYPAVQtwF cw0OxWdTIOiBCQAjaAB17fOFII8voGmRc+eOkilm/z9OvTtnjN4hYk1YoT3H2rnBOphPAB9skgq3 2lcaX/5YnJVt9BloAar12UEIRGCZdQghMABI1Tn32IQUVthYexhmqGGGMBHAgIfEhSiiiATAtOGJ GnYI4ogsEldicAYOGNJGZaml3Y0L3NTZUBz1xlB0PUoUI0jlVWRSVN89xBKSGB1YU1TMoRfVBEle hR9HQs1GEHxQ3RZZbveZthxt/LEmXHyp5XWABSCpaRJwbM13gAACPHVccgJFgF+NEhqUAEkQSCfc ddhVhh5dVTaEAEsTUNlkZUWKN9BNGDE6QU8OrSdbllzpxyVTTrU21Uj3scfhp7nNpyoDaTIEJ3P9 If8J2kbLNYegg9JRBwGhFvbq66+ZUiDssMQWK2yHxiZLrInKNotss8l+B5yBrr5p2UIJvortANoC 6+234IbLla/elRtZjeamh5CC3Sb0YLvixivvYkDFGlZqBNh7r4n6goVvv6/ZlCicN+kL71ALTnpQ dCIZp7CihkLA3UQmoWRBogyxtBPGCTnZncVR1rSTo5nuydC/Eo8kUH+lOoTyyvjoCuZu+PjYIKLD rZybtrM1d10C0QXKEVz48GrQkEeWdFJKlbb0UmEeV0SzyC6RvNB646LWIVjUNeC1zAFb+RDKXksM 9r531bwmpQW9+hQDDsx5pqwDRWBXcFES2hc+gEn/wJGdEEWdE6LoWcoxQweaTNmkhydkKaYMYY2Q p1unbLl/pPKbn3v7EZRvrKvqlja2ONvrtoIw9tn2g32/tQBlhtYkU+MNikZ7QYlPDPuMldpOmuJX nVo5VF3HjI+q89mteX5IDd/fVFClma5kiE4f2XUJhlz09gj2NbTDRifkmu7zXjR++RVJ/lPznuvr QH2iD6S+UewP9Dnon6d2NLwN8n90BB6hC68cFMCHoe+ACASP9c4DowUyEF0OPFcDI0ij/VXPaAKC UfhS95AKGoQ7IBRICI1HwhGaUIQoLGEKT6jCFrLwhSuMoQtlCMMZ2rCGOKShDm+4wxzy8Ic+DGIP B4cIRCKGMCAAOy== ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/frame.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" CSE 303 - Autum 2006 - Lecture 17 ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/outline.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii"
 No= tes
Slide Show
Outline
------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/oledata.mso Content-Transfer-Encoding: base64 Content-Type: application/x-mso 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA EAAA/v///wAAAAD+////AAAAAAAAAAD///////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////9 /////v///wMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8A AAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAA AB4AAAAfAAAAIAAAACEAAAAiAAAA/v////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////1IA bwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAWSCsbCccB /v///wAAAAAAAAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAQAAgH///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAACAAAA8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// ////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPoA AHic7Z0JeCRXdairWy2ptbf2XSrt+77bs0gzmt1jDx7jHeweqWbUI6l73JJmLBMewx4SSBwgQB4m THgsIQSeIUBIgm2xJEDYHBJiExye2YxZAkMSHiQkzDvn3KXO7b6akcd8IX6ekm5316mqc6tu/XXu uWs9/MXix//g/TVfd1KWHU6G84sLOU4WkwUgBNVKxHEypewXFy5cQFEGhAtXlmfUcr2TgL9Vx3X2 OHH4TjrrqShcdKkACpQuZKEpLAjZEJv38n0ffvWHGmpzPhXIUrDAchPEnnQWnWN0HotPKW5cSpxg IMjY28oxYQgHvyN+B5zdEO+yc8q5Ds7h5GXFn+n43G/lmFwIMfk70znqrEH8y06U0v4A3IXjlCYo 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 5cwoTdFrDYTuYkfsK+QlWl5K8lEpxwmBkZwpihl9IT+eTva7nz4VOVNOLe0NywYjZwrVMHKmaE4V Mf0K81imGDlTNGcHkjNFUy8Io7TLJ0folORMKXKmaJi7qNT8J67ZJ2eKRniee9Vrn/fmzt/zyZlC cqYUOVM0iBDJmaJRWGkzZ2D0BjlTSM4UJ2fKJOdBZ5bGGae/+Htrf2JSpgZKwKtY9ZpDr4qly7xK XiZic5UckosvB3kQ1q6+zKiroVyQD0fjbGMZUM5MnMEbfTXLfYb8Gx1AAjZqN3YFsug8ryYTQf0d r/tb/3ZczW701dJEoE7fRPSYOuGymE4/3/nyzrCvU117Luwirr1J6k2fmFDqbd5oJr2YQNueRgIV wNGYQCEoAsROLGCs21jj0AFbCmXT1WxjMxGxR2EbS6FtOoW2WYyokUJKJzefYV+nn0LbjBTaZvH3 jRTKphTa/rQQ2q4Qmjl9AiPd7uCExvc+vuMlPw/vMi9GJFAmXcx2UTB/65fO/94TbCK57SyBtkMC VThCZwP82n+q8WMvfNnVtgRSOjGBrtr4wOffmPGEn0DbWQJtNxJoOyXQ+CNz7/6b5e/bEiiTEmjH 00igIji6hu6zc3R1ftY7jfHuoDQ6/Gsdr37+RIstjfLpenZQGj337O+G9oz+pZ9GO1ga7dBptIPS 6OzCX3fP51XZ0kjppFLlK65uPrLtE34a7WBptMNIox2URje/9f888o3dn7SlEb6m9RqaBuFy0ghr uSrk7NLir9nBqUA+sRunArkzOBvcF7w9uB/+7gw+P3g0OB0chc/DsD4RnAtuDz4P/p4fPBKMBseD M8HbglcFX+A0BZoDTYHWAE7PMI09s1OmbJixyHZZZLstslmLbI9Fttci22eR7bfIDlhkBy2yQyky zPCntX3CtRm5VjaNa7vkWiut7ZZr/bQ2K9dGaW2PXJuitb1ybQet7RNrZ2dobb/cNktrB+S2vbR2 UG47QGuH5LZD048A128CX+kxeiFd+t8OcKEepEk7JMe0zNALiAPwh69sqBdGh65c7oAi+J2hRRkZ KArK6T/oT+xFYyFQhN3enQs/cjALwqJprvNMXf4fWssdYXcJYWRvdGJlbG93CkFob29rYWJvdmUK YWhvb2thYm92ZRBBY2lyY3VtZmxleGFjdXRlEGFjaXJjdW1mbGV4YWN1dGUQQWNpcmN1bWZsZXhn cmF2ZRBhY2lyY3VtZmxleGdyYXZlFEFjaXJjdW1mbGV4aG9va2Fib3ZlFGFjaXJjdW1mbGV4aG9v a2Fib3ZlEEFjaXJjdW1mbGV4dGlsZGUQYWNpcmN1bWZsZXh0aWxkZRNBY2lyY3VtZmxleGRvdGJl bG93E2FjaXJjdW1mbGV4ZG90YmVsb3cLQWJyZXZlYWN1dGULYWJyZXZlYWN1dGULQWJyZXZlZ3Jh dmULYWJyZXZlZ3JhdmUPQWJyZXZl ------=_NextPart_01C708D8.1CCA5A10 Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/filelist.xml Content-Transfer-Encoding: quoted-printable Content-Type: text/xml; charset="utf-8" ------=_NextPart_01C708D8.1CCA5A10--