Introduction
The WHIP! data format is intended only for the efficient viewing of 2D
vector data as electronic plots, within the context of a DWF package. It is
not intended for the interchange of higher level data between applications,
since most WHIP! data is post-tessellation.
For example, a CAD application generates WHIP! data contained in a .dwf file based on a drawing in the application’s native format. This .dwf file is then transmitted and displayed by a much simpler viewing application, such as an Internet Web browser. Due to the lack of non-visual data, the WHIP! data in the DWF file is not intended to be read back into the original CAD application, although the WHIP! data or .dwf file can refer to another file in the application’s native format with a hyperlink or an embedding operation.
WHIP! Data Organization
WHIP! data is organized into three main sections as shown in
figure 1.
The data in the header and the trailer are encoded as readable ASCII text. Data in the file data block is delimited by operation codes (opcodes) and argument data used by the opcodes (operands), shown in table 1.
Table 1. Data block
<opcode> | <operand> | <opcode> | <operand> | <opcode> | <operand> |
There are two types of opcode-operand pairs: readable ASCII text and coded binary. All WHIP! opcodes have a readable ASCII opcode/operand form, and most operations also have a coded binary opcode/operand form. By using the proper opcode form, you can create data that is humanly readable or one that is more efficient from a processing and storage point of view or, more commonly, a mixture of both types.
An application reading WHIP! data may not understand a set of opcodes, especially when the application reading the file outdates the application that created the file. For this reason, WHIP! data is designed to allow a reader to skip most opcodes. In order for the reader to skip an opcode, it must know the length of its operand. WHIP! data has three categories of opcodes:
A reader application need not implement these opcodes but must be able to compute their operand length, which requires that the opcode be recognized. If a single-byte opcode is unrecognized by a WHIP! data reading application, the rest of the file cannot be read.
2. Extended ASCII opcodes (humanly readable) that have delimited and nestable operands.
By following some simple rules, a reader application can safely skip such an opcode/operand pair without understanding the operation or its contents.
3. Extended binary opcodes that indicate their operand length so that a reader application can easily skip past the unknown operation and data.
WHIP! Data Format
Details
This section describes each block of the WHIP! data format in
detail.
Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
Character | ( | W | 2 | D | (space) | V | 0 | 6 | . | 0 | 0 | ) |
ASCII (Hex) | 28 |
|
|
|
20 |
|
|
|
|
|
|
|
Table 3. The 5-byte revision number
|
|
|
6 & 7 | <0 .. 99> | ASCII integer; The major revision value of the format used. |
8 | .(period) | ASCII decimal point |
9 & 10 | <0 .. 99> | ASCII integer; minor revision value of the format used |
<opcode> | <operand> | <opcode> | <operand> | <opcode> | <operand> |
Opcode Forms
Opcodes are a single byte in length except for two special cases: extended
ASCII and extended binary. This allows for over 200 operations.
Note: Some values in the range from 0 to 255 of a byte are not legal for opcode use.
These single-byte opcodes may have operands that are either readable ASCII or coded binary. Some common operations have separate opcodes for both ASCII and binary operand forms. Generally, if an operand is formatted as readable ASCII, then its single-byte opcode is also a readable ASCII character, which allows the file to be edited with a normal text editor. The following example shows a line drawing operation using the L single-byte opcode followed by a readable ASCII operand:
L 500,20300 90100,48000This line could also be represented using a binary-coded operand, as shown in the following example, which uses the l opcode. In this example, each underlined character represents a byte of binary operand data:
lXXXXYYYYxxxxyyyyExcept for the two special types of opcodes extended ASCII and extended binary, a file reader must know how to compute the operand length.
Illegal Opcodes
The ASCII representations for the following cannot be used as opcodes:
|
|
|
|
|
|
|
|
|
|
|
|
|
The Extended ASCII opcode
The single-byte opcode, (, open parenthesis
character, indicates an extended and possibly nested readable ASCII opcode.
Following the open parenthesis character, (,
is a multiple-byte, string token opcode followed by white space, followed
by zero or more operands, followed by a close parenthesis terminator, ),:
(Origin 240 120)Extended ASCII opcodes may be nested:
(Owner (FirstName Brian)(LastName Mathews))Extended ASCII opcodes may contain literal strings surrounded by the single quote mark, ',:
(Account (Person 'Brian Mathews ;-)') (Company 'Autodesk \'ADSK\''))Note: Inside a quoted string, the, \ , character may be used to treat a subsequent, ' , or, \ , character as literal data.
The Extended binary opcode
The single-byte opcode open curly brace character, {
, indicates an extended and possibly nested binary section of data. Immediately
following the open curly brace character, {
, is a 4-byte integer that represents the length (in bytes) of the binary
data. Following the length field is a 2-byte extended-binary opcode, which
allows for over 65,000 operations. Finally, the binary stream is terminated
with a closed curl brace character, }.
For example, the binary data for a raster of pixels can be represented
as
{cccceexxxxxxxxx}where cccc is the length of the binary data, ee is the opcode for a raster, and xxxxxxxxx is the raster data. The extended binary opcode and the terminating character, } , are counted as part of the binary data stream. Thus, the value of cccc is 12 (nine x’s, two e’s, and one } ) in this example, which is encoded as a little-endian binary value.
For a listing of "Extended Binary Opcodes," see appendix A.
Skipping Unrecognized Opcodes
Skipping extended ASCII and extended binary opcodes.
Note: While parentheses may be nested, single quote marks are not, as the latter always contain a single literal string.
A backslash character, \ , indicates a literal character will follow that should not be used for literal string termination. Thus, the following would pass the operand This is\was a 'happy' face :-) comment! to the Comment opcode:
(Comment 'This is\\was a \'happy\' face :-) comment!')Skipping extended binary opcodes
(Embedded_DWG (FileName house.dwg) {ccccXXXXXXXXXX})where cccc represents a 4-byte little-endian integer indicating the length of the binary data, 11 in this example represented by "XXXXXXXXXX" plus the terminating curly brace, }.
To skip any binary object, either opcode or operand data, the four byte count cccc must be used rather than searching for the curly brace character, }. Also, notice that this method allows a reader application to skip even a nested set of binary streams as the parent stream’s cccc count includes the subobjects’ data.
If the four-byte binary data run count cccc has
the value zero, this indicates that the WHIP! data writing application
was unable to compute the length of the binary data. Such an opcode can
not be skipped, and therefore the reading application must either know
how to parse the opcode, or must fail to read the remainder of the WHIP! data.
Obviously, WHIP! data writing applications should refrain from this practice
whenever possible.
The Logical Coordinate System
Most of the coordinates specified in WHIP! data are in logical
coordinates, as opposed to screen or device coordinates.
Logical coordinates are specified as the positive range of 32-bit signed
integers (31 bits of precision) with a legal range from 0 to a maximum
of 2,147,483,647 (231 - 1).
Normally, a WHIP! data writing application should scale the geometric primitives
of the illustration that is being stored so that a large portion of this
31-bit range is used. This allows a WHIP! data reading application to scale the
illustration for the desired display or a user to zoom in on the drawing
with sufficient precision to render fine details.
If a map were drawn with WHIP! data’s 31-bit integer coordinates, over 21,000 kilometers (>12,000 miles) of distance could be uniquely resolved down to 1-centimeter increments. If 32-bit floating-point coordinates were used, only 167 kilometers (100 miles) could be resolved to this level of detail. By contrast, AutoCAD uses 64 bit double-sized floating point coordinates to address this issue, with a resulting 52 bits of precision and an enormous range. For the more limited purpose of representing an electronic plot, WHIP! data's 31 bits of precision are more than adequate.
Relative Logical Coordinates
Depending upon the opcode in use, these logical coordinate values may
be encoded in WHIP! data literally as absolute coordinates or as
relative coordinates. Whereas absolute logical coordinates may only range
from 0 to 2,147,483,647 (31-bit unsigned), relative coordinates may range
from negative 2,147,483,647 to positive 2,147,483,647 (32-bit signed).
A relative coordinate is formed from an absolute coordinate by taking the
literal coordinate and subtracting from it the previous absolute coordinate
in the file.
Relative coordinates are used in order to increase the effectiveness of the WHIP! data compression algorithm, which tries to find repeating patterns of data. Common drawings have objects, represented by sequences of lines, circles, and so forth, that may occur multiple times, such as the four tires in an illustration of a car. If absolute coordinates were used, each of the lines and circles that make up an object would have differing coordinates for each instance of that object in an illustration, due to their differing positions. If relative coordinates are used, however, only the first coordinate in the sequence of coordinates differs for each instance of the object. Since the remainder of the coordinate sequence is independent of the object instance, the data compression algorithm will find longer and more frequent sequences of repeating data.
Sixteen bit coordinates
For many applications, the extreme level of detail allowed by WHIP! data’s
31-bit logical coordinates is not necessary and may be undesirable due
to the increased file size needed to store such large values. For this
reason, many drawing operations allow for 16-bit integer relative coordinates
to be used—16-bit signed relative values. When a WHIP! data reading application
is given either a 32-bit or a 16-bit relative coordinate, its value is
converted to a full 31-bit absolute logical coordinate before use. This
is a lossless form of compression since the full 31 bits of precision are
preserved even when storing only a 16 bit value.
Blockrefs - DEPRECATED
In version 0.55 of the DWF Toolkit, DWF files could
store data in "blocks", each of which is separately compressed and
uniquely identified with some meta-data. When serialized, the BlockRef
opcode signaled the beginning of a block of data. Opcodes that follow
a BlockRef (up until the next
BlockRef) constitute a block
of data. Block information can be either in compressed or uncompressed
or ASCII format, although the
BlockRef opcode will always stay uncompressed.
Block_Ref holds meta-data pertaining to the block of data that follows it (up until the next BlockRef opcode is encountered in the data). Since BlockRef seems to hold attributes pertaining to a block, it was added as a rendition attribute.
Currently there are blockrefs for the following functions for viewers and plotters:
Processing of the WHIP! Data Block
To preserve proper drawing order, the opcodes found in the data should be
processed in the order they are received.
Termination
Trailer
The file termination trailer is simply a special opcode indicating the end of the
WHIP! data sequence file—normally at the end of the file. It is possible
for an application to store non-WHIP! data following the termination opcode.
Table 5 shows the format.
Table 5. File trailer
Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Character | ( | E | n | d | 0 | f | D | W | F | ) |
ASCII (Hex) |
|
|
|
|
|
|
|
|
|
|
Sample 2(DWF V00.42) (Comment 'This is a DWF comment!') (Author scottsh) (Creator 'AutoCAD 14.0') (Created 891274953 '03/30/98 08:22:33') (Description 'This is an example ASCII DWF file.') (Modified 891274953 '03/30/98 08:22:33') (SourceFilename simple.dwg) (SourceCreated 891273528 '03/30/98 07:58:48') (SourceModified 891274913 '03/30/98 08:21:53') (NamedView 1055732,648214 1583598,972322 INITIAL) (NamedView 1021856,759719 1347292,959536 JUST_RED) (Units inches ((56251.8 0 0 0) (0 56251.8 0 0) (0 0 1 0) (926921 552481 0 1))) (Embed 'image/vnd.dwg;' 'AutoCAD-r14' 'simple.dwg' '') (View 1055732,648214 1583598,972322) (ColorMap 256 0,0,0,255 128,0,0,255 0,128,0,255 128,128,0,255 0,0,128,255 128,0,128,255 0,128,128,255 192,192,192,255 192,220,192,255 166,202,240,255 0,0,0,255 0,0,51,255 0,0,102,255 0,0,153,255 0,0,204,255 0,0,255,255 0,51,0,255 0,51,51,255 0,51,102,255 0,51,153,255 0,51,204,255 0,51,255,255 0,102,0,255 0,102,51,255 0,102,102,255 0,102,153,255 0,102,204,255 0,102,255,255 0,153,0,255 0,153,51,255 0,153,102,255 0,153,153,255 0,153,204,255 0,153,255,255 0,204,0,255 0,204,51,255 0,204,102,255 0,204,153,255 0,204,204,255 0,204,255,255 0,255,0,255 0,255,51,255 0,255,102,255 0,255,153,255 0,255,204,255 0,255,255,255 51,0,0,255 51,0,51,255 51,0,102,255 51,0,153,255 51,0,204,255 51,0,255,255 51,51,0,255 51,51,51,255 51,51,102,255 51,51,153,255 51,51,204,255 51,51,255,255 51,102,0,255 51,102,51,255 51,102,102,255 51,102,153,255 51,102,204,255 51,102,255,255 51,153,0,255 51,153,51,255 51,153,102,255 51,153,153,255 51,153,204,255 51,153,255,255 51,204,0,255 51,204,51,255 51,204,102,255 51,204,153,255 51,204,204,255 51,204,255,255 51,255,0,255 51,255,51,255 51,255,102,255 51,255,153,255 51,255,204,255 51,255,255,255 102,0,0,255 102,0,51,255 102,0,102,255 102,0,153,255 102,0,204,255 102,0,255,255 102,51,0,255 102,51,51,255 102,51,102,255 102,51,153,255 102,51,204,255 102,51,255,255 102,102,0,255 102,102,51,255 102,102,102,255 102,102,153,255 102,102,204,255 102,102,255,255 102,153,0,255 102,153,51,255 102,153,102,255 102,153,153,255 102,153,204,255 102,153,255,255 102,204,0,255 102,204,51,255 102,204,102,255 102,204,153,255 102,204,204,255 102,204,255,255 102,255,0,255 102,255,51,255 102,255,102,255 102,255,153,255 102,255,204,255 102,255,255,255 153,0,0,255 153,0,51,255 153,0,102,255 153,0,153,255 153,0,204,255 153,0,255,255 153,51,0,255 153,51,51,255 153,51,102,255 153,51,153,255 153,51,204,255 153,51,255,255 153,102,0,255 153,102,51,255 153,102,102,255 153,102,153,255 153,102,204,255 153,102,255,255 153,153,0,255 153,153,51,255 153,153,102,255 153,153,153,255 153,153,204,255 153,153,255,255 153,204,0,255 153,204,51,255 153,204,102,255 153,204,153,255 153,204,204,255 153,204,255,255 153,255,0,255 153,255,51,255 153,255,102,255 153,255,153,255 153,255,204,255 153,255,255,255 204,0,0,255 204,0,51,255 204,0,102,255 204,0,153,255 204,0,204,255 204,0,255,255 204,51,0,255 204,51,51,255 204,51,102,255 204,51,153,255 204,51,204,255 204,51,255,255 204,102,0,255 204,102,51,255 204,102,102,255 204,102,153,255 204,102,204,255 204,102,255,255 204,153,0,255 204,153,51,255 204,153,102,255 204,153,153,255 204,153,204,255 204,153,255,255 204,204,0,255 204,204,51,255 204,204,102,255 204,204,153,255 204,204,204,255 204,204,255,255 204,255,0,255 204,255,51,255 204,255,102,255 204,255,153,255 204,255,204,255 204,255,255,255 255,0,0,255 255,0,51,255 255,0,102,255 255,0,153,255 255,0,204,255 255,0,255,255 255,51,0,255 255,51,51,255 255,51,102,255 255,51,153,255 255,51,204,255 255,51,255,255 255,102,0,255 255,102,51,255 255,102,102,255 255,102,153,255 255,102,204,255 255,102,255,255 255,153,0,255 255,153,51,255 255,153,102,255 255,153,153,255 255,153,204,255 255,153,255,255 255,204,0,255 255,204,51,255 255,204,102,255 255,204,153,255 255,204,204,255 255,204,255,255 255,255,0,255 255,255,51,255 255,255,102,255 255,255,153,255 255,255,204,255 255,255,255,255 0,0,0,255 13,13,13,255 26,26,26,255 40,40,40,255 53,53,53,255 67,67,67,255 80,80,80,255 93,93,93,255 107,107,107,255 120,120,120,255 134,134,134,255 147,147,147,255 161,161,161,255 174,174,174,255 187,187,187,255 201,201,201,255 214,214,214,255 228,228,228,255 241,241,241,255 255,255,255,255 255,251,240,255 160,160,164,255 128,128,128,255 255,0,0,255 0,255,0,255 255,255,0,255 0,0,255,255 255,0,255,255 0,255,255,255 255,255,255,255) (Background 0) C 190 (Layer 2 ELECTRICAL) (Comment 'drawing a line') L 1057527,761954 1310375,942166 C 15 (URL http://www.autodesk.com) (Layer 3 PLUMBING) L 1219275,678351 1581814,798182 C 225 (URL '') (Layer 1 0) P 5 1286338,807295 1311906,844764 1274436,870332 1248869,832862 1286338,807295 T 5 1286338,807295 1311906,844764 1280387,838813 1274436,870332 1248869,832862 T 3 1280387,838813 1248869,832862 1286338,807295 (Font (Name Arial) (Family swiss) (Height 15716)) (Text 1424932,870381 'Hello world') (EndOfDWF)
(DWF V00.55) (BlockRef 'Graphics_Hdr' 00000001460 (Guid 2293737895 28613 20209 B86117C1AA7782AF ) (Time 02397820982 00029429533) (Time 02397820982 00029429533) (Encryption 'None ') 1 1 00000000001 0 0 0 000000.0025 (Orientation 'Decoupled ') 0 (Alignment 'Align_None ') 00000001556 00000001988 400 00000000000 00000000000 00000000196,00000000196 00000053346,00000069094 ) V (Background 225) (Author manathn) (Creator 'Genuine AutoCAD 2002 (K.0.72) - Autodesk(R) Design Your World (tm)') (Created 995414815 '07/17/2001 05:06:55 PM' '{61532BFE-CE7A-4426-B0E2-AAB4450AA610}') (Modified 995414815 '07/17/2001 05:06:55 PM' '{61532BFE-CE7A-4426-B0E2-AAB4450AA610}') (SourceFilename Drawing1.dwg) (SourceCreated 995321041 '07/16/2001 03:04:01 PM' '{4E19B40B-D0EF-4180-BCF3-A1563D2F0436}') (SourceModified 995321063 '07/16/2001 03:04:23 PM' '{4B0BEF38-238E-46A2-BBD2-ED87DB82481F}+') (Units '' ((265.86413065 0 0 0) (0 265.86413065 0 0) (0 0 1 0) (2147479274 0 0 1))) (Embed 'image/vnd.dwg;' 'Genuine AutoCAD 2002 (K.0.72) - Autodesk(R) Design Your World (tm)' 'Drawing1.dwg' '') (NamedView 2147479273,0 2147483647,2392 INITIAL) (View 2147479273,0 2147483647,2392) (PlotInfo hide 90 in 10.99999976 8.4999997597 0.031250480592 0.031249999531 10.96874976 8.4687498799 ((0.0025 0 0) (0 0.0025 0) (0 0 1))) (InkedArea 2147482064,314 2147482064,1870 2147480076,1870 2147480076,314) (BlockRef 'Thumbnail' 00000004445 (Guid 2264850732 14877 17258 A2C292BEE4E02654 ) (Time 02397820982 00029429533) (Time 02397820982 00029429533) (Encryption 'None ') 1 (Guid 50047226 29394 20034 9DE8CFF8581A1C66 ) 00000000000 00000000170 00000000219 00000000256 ((00000000001 00000000000 00000000000 00000000000) (00000000000 00000000001 00000000000 00000000000) (00000000000 00000000000 00000000001 00000000000) (00000000000 00000000000 00000000000 00000000001)) ) v (Group4PNGImage 'PNG' 0 219,170 0,0 219,170 (1838 89504E470D0A1A0A0000000D49484452000000DB000000AA080300000013 23CA1600000300504C544500000080000000800080800000008080008000 8080C0C0C0C0DCC0D4D0C80000333300003300330033331616161C1C1C22 22222929295555554D4D4D424242393939FF7C80FF5050D60093CCECFFEF D6C6E7E7D6ADA99033FF00660000990000CC000000330033330066330099 3300CC3300FF3300006600336600666600996600CC6600FF660000990033 9900669900999900CC9900FF990000CC0033CC0066CC0099CC00CCCC00FF CC0066FF0099FF00CCFF0000FF333300FF660033990033CC0033FF003300 33FF333333663333993333CC3333FF3333006633336633666633996633CC 6633FF6633009933339933669933999933CC9933FF993300CC3333CC3366 CC3399CC33CCCC33FFCC3333FF3366FF3399FF33CCFF33FFFF3300006633 0066660066990066CC0066FF0066003366333366663366993366CC3366FF 3366006666336666666666996666CC6666009966339966669966999966CC 9966FF996600CC6633CC6699CC66CCCC66FFCC6600FF6633FF6699FF66CC FF66FF00CCCC00FF009999993399990099CC0099000099333399660099CC 3399FF0099006699336699663399996699CC6699FF339933999966999999 9999CC9999FF999900CC9933CC9966CC6699CC99CCCC99FFCC9900FF9933 FF9966CC9999FF99CCFF99FFFF990000CC3300996600CC9900CCCC00CC00 33993333CC6633CC9933CCCC33CCFF33CC0066CC3366CC6666999966CCCC 66CCFF66990099CC3399CC6699CC9999CCCC99CCFF99CC00CCCC33CCCC66 CCCC99CCCCCCCCCCFFCCCC00FFCC33FFCC66FF9999FFCCCCFFCCFFFFCC33 00CC6600FF9900FF0033CC3333FF6633FF9933FFCC33FFFF33FF0066FF33 66FF6666CC9966FFCC66FFFF66CC0099FF3399FF6699FF9999FFCC99FFFF 99FF00CCFF33CCFF66CCFF99CCFFCCCCFFFFCCFF33FFFF66FFCC99FFFFCC FFFFFF666666FF66FFFF666666FFFF66FF66FFFFA500215F5F5F77777786 8686969696CBCBCBB2B2B2D7D7D7DDDDDDE3E3E3EAEAEAF1F1F1F8F8F8FF FBF0A0A0A4808080FF000000FF00FFFF000000FFFF00FF00FFFFFFFFFF4C FC227F000003E94944415478DAEDDCCB92A3300C05D0DE69DFFFFF87B0D1 7451DA0E0E0921B6E547F00BEA66375DD4944F6424D9E0FCFCFBBBEDE7E7 6FB9ED0736D860830D36D860830D36D860830D36D860830D36D860830D36 D860830D36D860830D36D860830D36D860830D36D860830D36D860830D36 D860830D36D860830D36D860830D36D860830D36D87ADAF8C6B659E4B636 5948F8B6B66568DD599BD1DDD7B6B0D06D6D093A16E9F00514B1457046B6 5ECDD7B43DC6AF5CF48A18CB556D0F857D01C9F16F4C17B2D983FDCC9866 2672E8BB18BB9F74A6D91E26F2E58ED6813BD72B3BA3DD928A96151BA793 93EB003741D0EF24E9570FBDC6B12267B247A01E105FC9768805BD9207EB EB83A6B3B2C0DA549E658C83F5A0C3AC2C606362712C5A07DD72569EB7AD 5371F6372429057FE83C69E6A2BF70F99BCC86813B637B15E8357093D384 A8BA76E9E47BDBA679247D3191238FCE9731DBA593EF6C46B4A9F858E7C8 43F174D03CAC8D65FE9DDD29F80C87676E3ABA56B332D746D3DA537993C4 2BA1C4EB41AB5999699359FFD289DE91A260E81ACDCA5CDBE24D88CE906D 9D9531654C9B92329C78B0C5FBD0B59995DFD88C8EE2ADB0A5FBA8074D66 659E8DE4D890C4BB0E563B6819CEF6E9F1E54B22A579B1FE8316FB0B9936 3B43B83A77B67D342C7BE41B14B94C9BAF59A648E42CDEBE801DDEE6D179 F3C441F7CC98F5D3C9799B9B329451BF79CFDD30BE82CDD669A3DEEBFEA3 1E547FB855C866DD53FA7CDB2BE3AAAB3D2BB36CB12FFACD230A2ED595A6 7A64DB41178AC9A6A3ABD9DEDDE61CBE6A7AEC3E4BD57C52DEB6B522E1C7 A4EB055BE9A8FA3CB9866DD9F65022817D56C68ABA1C5BDAFDC17BAAA078 2934FFE45A13B3B8ED301B5D1DBB3798F953A5A49265A38498B1DE8F6937 A1D99996DEB6388DF46E9382B7E0340F6DD3C2B2DD53B19B8AA69947B585 46BF8E7B96E8E7771ED316CAE469AF0455A80519367D1B2050A939B57050 D7FB4DF287CF894D559D027EDA161856EAFB69B55A93B336FDDDD0E437EF AAED9C9CB2E9538E925B8D31FA49494E219CFEB664CD35DCF7B640CC9223 517775FAA54DCD8D94B1DCA471D6DD12CF2039B245C6D9E792988CB37608 64A47D65894C47CA1AAD0CF5AC434289222F668B0CF66C510231CB93B53A 0B9263D3933BD178B20C9B4CC225FA2619F07D2E0AAF1C1323D7F46852B1 738B29916B7CE8AADC99CCF8136CBAD67BE619916B7F52AEE859DAC0E87B 9C012C7B4E587F1DAAC7F1C6C267A0FD8FDD3A1DDC2C7DBE3BF5CDDE2BDA 9C42D7F1C466F973F94483D06AFCE6C0A1D0F53D665BE3F7145EB8DE0788 ABFC56C4B611D2FD6C74A5DFC1304FA5BA9FFAAE646319E0B708F0FB25B0 C1061B6CB0C1061B6CB0C1061B6CD7F8FC07967A8282420A538E00000000 49454E44AE426082)) V (BlockRef 'Graphics' 00000000779 (Guid 50047226 29394 20034 9DE8CFF8581A1C66 ) (Time 02397820982 00029429533) (Time 02397820982 00029429533) 1 ) (PlotOptimized 1) C 0 (LineWeight 4) (LineStyle (LineJoin round) (LineStartCap round) (LineEndCap round)) (Layer 1 0) (Viewport '' (Contour 1 4 2147483647,0 2147483647,2393 2147479273,2393 2147479273,0) (Units '' ((265.86413065 0 0 0) (0 265.86413065 0 0) (0 0 1 0) (2147479274 0 0 1)))) P 15 2147480705,1487 2147482064,938 2147481018,314 2147480649,655 2147481761,1132 2147481359,1761 2147480194,1383 2147480076,598 2147481042,1094 2147480455,1690 2147480455,1870 2147482064,938 2147481310,938 2147480194,1383 2147480705,1487 (BlockRef 'Preview' 00000007223 (Guid 4291207406 34418 19561 B55DEE798E940114 ) (Time 02397820982 00029429533) (Time 02397820982 00029429533) (Encryption 'None ') 1 (Guid 50047226 29394 20034 9DE8CFF8581A1C66 ) 00000000000 00000000438 00000000566 00000000256 ((00000000001 00000000000 00000000000 00000000000) (00000000000 00000000001 00000000000 00000000000) (00000000000 00000000000 00000000001 00000000000) (00000000000 00000000000 00000000000 00000000001)) ) v (Group4PNGImage 'PNG' 0 566,438 0,0 566,438 (3162 89504E470D0A1A0A0000000D4948445200000236000001B608030000005B 303C4200000300504C544500000080000000800080800000008080008000 8080C0C0C0C0DCC0D4D0C80000333300003300330033331616161C1C1C22 22222929295555554D4D4D424242393939FF7C80FF5050D60093CCECFFEF D6C6E7E7D6ADA99033FF00660000990000CC000000330033330066330099 3300CC3300FF3300006600336600666600996600CC6600FF660000990033 9900669900999900CC9900FF990000CC0033CC0066CC0099CC00CCCC00FF CC0066FF0099FF00CCFF0000FF333300FF660033990033CC0033FF003300 33FF333333663333993333CC3333FF3333006633336633666633996633CC 6633FF6633009933339933669933999933CC9933FF993300CC3333CC3366 CC3399CC33CCCC33FFCC3333FF3366FF3399FF33CCFF33FFFF3300006633 0066660066990066CC0066FF0066003366333366663366993366CC3366FF 3366006666336666666666996666CC6666009966339966669966999966CC 9966FF996600CC6633CC6699CC66CCCC66FFCC6600FF6633FF6699FF66CC FF66FF00CCCC00FF009999993399990099CC0099000099333399660099CC 3399FF0099006699336699663399996699CC6699FF339933999966999999 9999CC9999FF999900CC9933CC9966CC6699CC99CCCC99FFCC9900FF9933 FF9966CC9999FF99CCFF99FFFF990000CC3300996600CC9900CCCC00CC00 33993333CC6633CC9933CCCC33CCFF33CC0066CC3366CC6666999966CCCC 66CCFF66990099CC3399CC6699CC9999CCCC99CCFF99CC00CCCC33CCCC66 CCCC99CCCCCCCCCCFFCCCC00FFCC33FFCC66FF9999FFCCCCFFCCFFFFCC33 00CC6600FF9900FF0033CC3333FF6633FF9933FFCC33FFFF33FF0066FF33 66FF6666CC9966FFCC66FFFF66CC0099FF3399FF6699FF9999FFCC99FFFF 99FF00CCFF33CCFF66CCFF99CCFFCCCCFFFFCCFF33FFFF66FFCC99FFFFCC FFFFFF666666FF66FFFF666666FFFF66FF66FFFFA500215F5F5F77777786 8686969696CBCBCBB2B2B2D7D7D7DDDDDDE3E3E3EAEAEAF1F1F1F8F8F8FF FBF0A0A0A4808080FF000000FF00FFFF000000FFFF00FF00FFFFFFFFFF4C FC227F000009154944415478DAEDDDDD76DB281480D1F3FECFD4D7D2FDAC D57412E7C78E408038B0BFBBE9A4E3D6ECC1928550FC918A8B3F87541A36 C246D8081B61236C246C848DB01136C246C246D8081B61236C246C848DB0 1136C246C246D8081B61236C246C848DB01136C246C246D8081B61236C24 6C848DB01136C246C246D8081B61236C246C848DB01136C246C246D8081B 61236C246C848DB01136C246C246D8081B61236C246C848DB01136C246C2 46D8081B61236C246C848DB01136C246C246D8081B61236C246C848DB011 36C246D848D8081B61236C848D848DB01136C246D848D8081B61236C848D 848DB01136C246D848D8081B61236C848D848DB01136C246D848D8081B61 236C848D848DB01136C246D848D8081B61236C848D848DB01136C246D848 D8081B61236C848D848DB01136C246D848D8081B61236C848D848DB01136 C246D848D8081B61236C848D848DB01136C246D848D8081B61236C848DB0 91B01136C246D8081B091B61236C848DB091B01136C246D8081B293D9B30 38D854FCC9021C6C6A661B70B0A9FA9002079BAA631B6EB0A9392436E160 537526050E365527E0DC6053C1C684834D0D1B70B0A962030E36556C1CE2 6053C5C684834D0D1B70B0A962D3170E94CBB2E97688F3F7923B37CBB2E9 3129FCBF4C039B75D9B486F3B8B4879B85D9341CDEAFCBC1B859994D9B09 E7872584D82CCDE63A9C27CB4EB9599BCD2538CF972A63B33A9BCA318ED7 CBDBB9599E4DF98473E28E086EF2B2393D782570CEDD45834D6236E7472F 5A9AE126399B0237D1D00C37C9D9148C5E443B33D8246773141DB6B432C3 4D7636C7D54F96DA3BC9B149CDA6CC4DB431C34D7A3665E3F77829FBE2B5 076E52B3291CBF881666B049CFA67400A3D1CE38DCE46653787CD36C3F25 6E72B329B8CE10AF4FC6B1D989CDC95514D178C8B949CEE6C45ABF0EF78C 63939DCDEB1B19A2D32D9CDC6467F36C085F1D003B0BC7E6C7BD04A2F3FD 0DD8A46773D45C3AB8BC4C1D91EC6C1EC7B060C9956B0C9BB379DF74366A 2F5461B3239BB7ADD163E8D873B3009BDAE533C1CDB687C4577612A98783 4D6236EFF3CCF8E1E726299B36979B6A271C6C32B2F97EB9E9180C879B6C 6C7E3C068EFAB55895BF0B94446C9E5DA28C88B104B049C3E627331F622E 9C8FBB6D6A5936DF3D7C59EC1997100437EBB1F9B69B5EBCDC2BADEA6BE3 C06625365F84BC58501E63A70F6EA665F3F963E8B793A5F8FDE8B9E18483 CD9C6C1E06FEE44D2B57570F175E4787653A361F970E4ABE90895327ECAD 287033179BF7AF611A0C7BD4DCFA8B4D3A366F97B5ABBFF43D73EEDE0A0E 3793B0897F5DF82F343868096E12B18916B76B57DC0653CF019BDBD9B4BA C13F9A1CB6043749D81CBDDD14C93CF7A3D8DCCFA6D58C13030F78B99980 CD31E00EFFC6375471732B9B767BECFD3E962DE16033099B16534EF13626 F570B89986CD886D3D9B9D2C71330F9BCB53CEA95D04CE1DF5063689D85C 9C729A9038F553DCCCC5E6DA9473F2697771FD618ADCCCC6E6CA9433EC44 1B9BBBD87479367CC1E3A7AE1D427333239BEA29A7ED55A8E73F82CD9C6C 6AA79CC2EDD2EB3F49B19994CD88FD8F226A7F20B099954DD59453FE588F AA3F013633B319F194CB3A3881CDC46A2AA69C9A5B342BBEDF0B6CE66633 E261CC51FC8D0036D3B33906DC99F29AE64FBB5F60333F9BA229A7F6EBC2 2238D8A4605332E5D46F275AF0DD70609383CDF929A7CBF67EEDF610C466 2C9B63C03D062F687EFE37D8E4517376CAB9B6E8EBDC6585C026119B63C0 62F1E7BB31053769D99C9972A213CD875FC7261B9B63C0AADF67341F3670 C2261D9B5FA79CE84633B049CCE628FCAAA5DD0B5C7E700836B7B279FD61 15FD5EE0DF2F063639D5BC9C72A2E30BFCFD356CF2B27975DED3F305E268 B5DD0A36F7B0793AE544CF1708C736D9D93C3D08E9F60261B65982CD93E7 C2747981D8F9646A35363F4E391DCEDC3E6FF38F4D7E364D1F9378EE05B6 8373039B216F71CFD9E0EDC47B6B38ABB2F998111A0FE8C744131BAFBE59 97CD9B98E6689EFFE34E13CED26C8E88E877FAFD7DCAD907CECA6CAE3CBF F7DCA9FDF7C3286CD21FDBFC3AE0D7269A1F456D32E18C671383D1B418CD 137B9AEC05674D36BF1D84B4F9747A7E8A854D4236D1723FC9AA07C50436 D9D8BC5CED57BCED49E52607AB4F38ABB1A9DF20AB01B2C717581BCE5A6C A2E1E66E71F58EE395E1ACC4A6604B8AE887E6E1B70736D3AB297DAE6AF4 43F3FE02CB4E38ABB089763B2D4534BCFD6F51388BB089FA19A1FD44F3F9 05029B49D944B3ED6CDA4F0E8DAFA66233019ACF534EA7015E114E7A36D1 EA46EF9E63BB1C9CE46C1AAE8AE81D36B3A8E9BE9466BA3F293613A139A0 D9854D1E348733A959DEC268B503C97DCB38B019CD2622CD80FA96781636 89D01CAE494DF236A642B3EC25F0646CA2D1871C341BB18948349C56F7CD F15EE642B3F662E2346C62CCD6E9D02CC526320DA6FBA4E678432332A1D9 E0B6CCB16CE2AE711878057A8B9BC0E7671391E9FF7F5B074CC1061A6C8A D944B767FBF87C5A964D0B3423FF7236619B800D34D814B3498666B7ADD0 87B28961433E78C9B7EDAC276013916B146D9E3F019B6C683CAA63823738 463C5ADE54B3169BEB680E687663930E8DC7C7DFFF2E37DB01C054B3169B 8E8F7ABF61043746330D9B6B6370C708EE8C661236716D89F11D68F65633 039B886CE3B73B9A09D8E443736C8FE6763619D15033944DDB5D39039A3D D95C4373D3DB45CCBD6C52A2A1E65E36D06053CCE6EA75049F4F1BB269B0 DED354B31B9B365B0040B30B9BB60FE5F6F9B40F9B86FFD38EBC698E9A3B D944A41C4C68EEFF904A379EA69ABB0F8913CE03D02CC8A6FF23C5F95891 4DDF7135D5ACCA668AA74363C38DCFA72DD81C9D1E6F49C6DA6CE67B662B 365BBA81660B3647CE6F9FB1B9FD2F11D06073DF8403CD5E6C723D93019B 75DC40B3239BAB6EA0D993CD91EF064F6C52BB81666736D54FABC2606B36 773D78089BDDDC40834DB91B68B0299E3E4C35D814CF20D06053EE061A6C 8A45986AB02977030D36C52C4C35D814BB81069B7237D06053ECC654834D B11B68B02977030D3667FE7261AAC1E6D284030D36E56EA0C1A6D88DA906 9B6237D060D3E4445CD8081B61236C246C848DB01136C246C246D8081B61 236C246C848DB01136C246C246D8081B61236C848D848DB01136C246D848 D8081B61236C848D848DB01136C246D848D8A85FFF01E2E052E465AFE565 0000000049454E44AE426082)) V (Directory 00000000004 (BlockRef 'Graphics_Hdr' 00000000012 00000001460 (Guid 2293737895 28613 20209 B86117C1AA7782AF ) (Time 02397820982 00029429533) (Time 02397820982 00029429533) (Encryption 'None ') 1 1 00000000001 0 0 0 000000.0025 (Orientation 'Decoupled ') 0 (Alignment 'Align_None ') 00000001556 00000001988 400 00000000000 00000000000 00000000196,00000000196 00000053346,00000069094 ) (BlockRef 'Thumbnail' 00000001472 00000004445 (Guid 2264850732 14877 17258 A2C292BEE4E02654 ) (Time 02397820982 00029429533) (Time 02397820982 00029429533) (Encryption 'None ') 1 (Guid 50047226 29394 20034 9DE8CFF8581A1C66 ) 00000000000 00000000170 00000000219 00000000256 ((00000000001 00000000000 00000000000 00000000000) (00000000000 00000000001 00000000000 00000000000) (00000000000 00000000000 00000000001 00000000000) (00000000000 00000000000 00000000000 00000000001)) ) (BlockRef 'Graphics' 00000005917 00000000779 (Guid 50047226 29394 20034 9DE8CFF8581A1C66 ) (Time 02397820982 00029429533) (Time 02397820982 00029429533) 1 ) (BlockRef 'Preview' 00000006696 00000007223 (Guid 4291207406 34418 19561 B55DEE798E940114 ) (Time 02397820982 00029429533) (Time 02397820982 00029429533) (Encryption 'None ') 1 (Guid 50047226 29394 20034 9DE8CFF8581A1C66 ) 00000000000 00000000438 00000000566 00000000256 ((00000000001 00000000000 00000000000 00000000000) (00000000000 00000000001 00000000000 00000000000) (00000000000 00000000000 00000000001 00000000000) (00000000000 00000000000 00000000000 00000000001)) ) 00000013919) (EndOfDWF)