home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / comp / sys / next / programm / 7289 < prev    next >
Encoding:
Text File  |  1992-11-18  |  39.1 KB  |  726 lines

  1. Newsgroups: comp.sys.next.programmer
  2. Path: sparky!uunet!dtint!usenet
  3. From: nevin@dtint.dtint.com
  4. Subject: Re: Coding Rules/Suggestions (RTF)
  5. Message-ID: <1992Nov18.211536.25711@dtint.uucp>
  6. Sender: usenet@dtint.uucp
  7. Reply-To: nevin@dtint.dtint.com
  8. Organization: Digital Technology, International
  9. Date: Wed, 18 Nov 92 21:15:36 GMT
  10. Lines: 714
  11.  
  12.  
  13. Interesting stuff and a lot of good point, some of which end up being  
  14. applicable only to the NeXT environment. Consider what kind of  
  15. porting problems you may run into if you implement your standards.
  16.  
  17. It'll port easily to every NeXTSTEP supported platform and that's all  
  18. I care about.  Other programmers may not be as lucky, though, and may  
  19. not have that luxury.
  20.  
  21. More that a particular standard, it probably is important for a group  
  22. of people to agree on a standard implementation. This includes  
  23. subproject setup, object naming conventions, code outlining, file  
  24. commenting and organization, method/function commenting, line or  
  25. cluster commenting, etc.
  26.  
  27. I covered "object naming conventions" by requiring them to follow the  
  28. panel/window example, the names of which must be logical from an  
  29. end-user point of view.  Commenting was covered to the degree that I  
  30. think it matters beyond that, let each developer decide.  I didn't  
  31. cover subproject setup not that I overlooked it but that I'm not yet  
  32. ready to voice my thoughts.
  33.  
  34. I've been the route of extremely strict conventions (see Charles  
  35. Symoni, MIT/Microsoft on type naming calculus commonly referred to as  
  36. "Hungarian"), and I find the middle ground more appealing (i.e. a  
  37. 'relaxed' but enforceable, democratic group of standards).
  38.  
  39. I'm against Hungarian notation.  I'm also not inclined to make any  
  40. rules governing instance variable names, but class names are covered  
  41. (see comment above).
  42.  
  43.  
  44. > All panels and windows should be in a separate NIB file, one per  
  45. NIB, with a separate Class object to control and manage each NIB.   
  46. For example, for the Info NIB file, there should also be files Info.h  
  47. and Info.m that manages the NIB file.  The panel or window in the NIB  
  48. file should have the name of it's NIB file (and associated class  
  49. files) as the name of the panel/window (this is setable via the  
  50. Inspector panel of I.B. I'm talking about the name that will appear  
  51. in the title bar of the panel/window, not the name as it might appear  
  52. in the "Objects" part of the NIB).
  53.  
  54. This doesn't account for sub-panels or micro-panel management. Also,  
  55. if you have a large collection of NIBs it means a propagation of  
  56. objects/classes. Again, a standard method within the application may  
  57. be what's really called for, not a standard approach to all  
  58. applications.
  59.  
  60. Yes, you are right.  I have ammended the applicable part of this rule  
  61. to read as follows:
  62.  
  63. All panels and windows that are instantiated in a NIB file should be  
  64. in separate NIB files, one per NIB, with a separate Class object to  
  65. control and manage each NIB.  For example, for the Info NIB file,  
  66. there should also be files Info.h and Info.m that manages the NIB  
  67. file.  The panel or window in the NIB file should have the name of  
  68. it's NIB file (and associated class files) as the name of the  
  69. panel/window (this is setable via the Inspector panel of I.B. I'm  
  70. talking about the name that will appear in the title bar of the  
  71. panel/window, not the name as it might appear in the "Objects" part  
  72. of the NIB).  Note that this applies only to the NIB files associated  
  73. with the Class creator's primary language (i.e., if you are French,  
  74. you'll create French class names, and create the French NIB files to  
  75. follow this rule.  The other language NIB files German, English,  
  76. Swiss, etc. will be created based on the French NIB files, and those  
  77. alternate language NIB's won't necessarily match your French class  
  78. names). 
  79.  
  80. Notice that the rule now only applies to panels/windows that are  
  81. already instantiated in the NIB (this is what I initially meant,  
  82. anyway).  Alert panels, micro-panels, and the like are generally  
  83. instantiated via program logic (via "NXRunAlterPanel()", as one  
  84. possible example).
  85.  
  86. Also notice the clarification at the end of the paragraph regarding  
  87. localized NIB's (I had one person email me in disagreement, arguing  
  88. that they wanted localized NIB names instead).
  89.  
  90. >    
  91. > Or, at the very least, the name of the NIB file (and therefore the  
  92. associated class files) should be obvious to determine simply by  
  93. looking at the panel (or window) name.  In this way, simply running  
  94. the program will give another programmer a very good idea of the  
  95. object structure of the program, since he can plainly see all of the  
  96. panels and windows, and their names, while the program is running.
  97.  
  98. Again, many nibs don't show titles. Another (possible) consideration:  
  99. information hiding. If you are distributing source for public  
  100. consumption then is probably not what you want to do. If you are  
  101. selling an application, you may wish to encode some things. Some  
  102. venders do consider it appropriate.
  103.  
  104. I presume you mean: "some panels/windows in some NIB's don't have  
  105. titles".  My question would then be: why doesn't the panel/window  
  106. have a title?  What would it hurt to put a title in?  Note that the  
  107. rule I gave does give you some discretion in the choice of the title:
  108.  
  109. Or, at the very least, the name of the NIB file (and therefore the  
  110. associated class files) should be obvious to determine simply by  
  111. looking at the panel (or window) name.  In this way, simply running  
  112. the program (with the appropriate default language) will give another  
  113. programmer a very good idea of the object structure of the program,  
  114. since he can plainly see all of the panels and windows, and their  
  115. names, while the program is running.
  116.  
  117. However, you make a good point about encoding.  It might be an issue  
  118. on some projects.
  119.  
  120. > *****************************
  121. > When given a choice of fewer objects that do more, versus more  
  122. objects that are smaller and do less, favor the use of smaller  
  123. objects.  You'll find that your objects will grow larger during  
  124. development anyway.
  125.  
  126. Generally I'd agree. However, if you're talking about managing say,  
  127. 1000 classes, you'll find a certain redundancy starts to creep in.  
  128. OOP in general has to do with the management of information. Do you  
  129. want to manage more or less things within a file? Do you want to  
  130. manage more or less things among files?
  131.  
  132. An object can manage more and still be small in terms of the code it  
  133. contains if it delegates it's work to other objects.  To use a  
  134. house-construction metaphor: 4 boards and some nails might make a  
  135. panel; 3 or 4 panels might make a wall, 4 walls and a floor might  
  136. make a room, 3 rooms might make a floor, and 3 floors and a roof  
  137. might make a house.  And, in each case, the object is small even the  
  138. "house" object.
  139.  
  140. People are still enamored enough with OOP enough to not see the  
  141. second situation:  objects allow a encapsulization of related code so  
  142. we can avoid situations of tightly wrapped coding. Object systems  
  143. still end up being tightly bound among sets of objects. OOP has not  
  144. 'solved' the problem, only pushed it further back, at which stage the  
  145. problem becomes even bigger. Consider the impacts of favoring smaller  
  146. objects when your objects become interdependent and abundant.
  147.  
  148. Is the "room" object tightly bound to the "house" object from my  
  149. metaphor above?  No.
  150.  
  151. Is the "room" object tightly bound to the "board" object from my  
  152. metaphor above?  No.  It's perfectly acceptable to build the walls of  
  153. the room with another material (such as brick), as long as the room  
  154. is still a room.  In other words, it's OK to improve the algorithm.
  155.  
  156. If you make a mistake and discover that your rooms built with boards  
  157. are obsolete (maybe you used balsa wood?), and you no longer want  
  158. rooms that way (but must keep your old balsa-wood rooms around  
  159. because of some peculiar backwards compatability problem), just mark  
  160. your "room" object as obsolete (and also it's support objects) so  
  161. nobody will use it again for any new floor of any new house.   Then  
  162. create a "brick-rooms" object (and it's support objects) for future  
  163. use.  Then, keep both "room" objects (and their support objects) in  
  164. your library.  All new code will use the new objects, and eventually  
  165. the old objects will die a natural death.
  166.  
  167. Incidentally, I think this is one of the neat things of Objective-C  
  168. (versus C++).  You can create new, logically-related object Classes,  
  169. and polymorphically message them, without them all having to inherit  
  170. from the same base class.  Thus, it's more forgiving of mistakes in  
  171. your initial Class hierarchy design than C++ is.  With C++, if you  
  172. poorly design your class hierarchy, you're screwed, since you'll  
  173. probably now have to re-implement major parts of the Class hierarchy.
  174.  
  175. I'm neither for or against large/small objects; I'm for applying what  
  176. best suits the big picture.
  177.  
  178. > *****************************
  179. >     
  180. > I have not, as yet, seen a single convincing situation where public  
  181. instance variables were necessary or even desirable, although I am  
  182. hesitant to say that there are none. ...
  183. Unless otherwise convinced for special occassions, all instance  
  184. variables should only be modifiable by a class method (i.e., NOT be  
  185. public).  It should also not be modifiable by more than one class  
  186. method.
  187.  
  188. It depends on how "purist" or theoretical vs. practical you want to  
  189. get. Within the same module/class it may be acceptable to refer to  
  190. the instance variable vs. the method, especially where speed is  
  191. concerned.
  192.  
  193. If it's within the same instance of a class (i.e., the same "module"?  
  194. what do you mean by a "module", anyway?), the instance variables of a  
  195. given instance of a class are accessible to all methods of that  
  196. instance anyway, regardless of the variables' classification (public,  
  197. protected, or private) so in this case there would be no advantage to  
  198. declaring any of them public.
  199.  
  200. But, if you are talking about different instances of the same class  
  201. what relevance does the fact that they are of the same class have?  I  
  202. guess if it executes faster, then we should all just go back to  
  203. having global variables for everything (ala Windoze)?
  204.  
  205. I fully expect to eventually encounter some case where the instance  
  206. variables need to be public for speed of execution reasons as you  
  207. suggest.  I just haven't seen that case yet.  And, when it happens, I  
  208. just think it should be suitably documented in the code (i.e.,  
  209. explained why the public declarations were necessary and also in  
  210. non-ambiguous, very specific terms) .  Otherwise, stay away from  
  211. public declarations.
  212.  
  213. >  
  214. > *****************************
  215. >      
  216. > Reality Checking in 'C' code (as well as all of the 'C' language  
  217. derivatives, such as Objective-C) is accomplished with the assert()  
  218. macro.  Brad Cox, the creator of Objective-C, recommends using  
  219. asserts (p. 98 and 99 of his book, Object-Oriented Programming, An  
  220. Evolutionary Approach, 2nd Edition) for Reality Checking (he calls it  
  221. something else, though) and clustering the checks into two groups:  
  222. (1) preconditions, and (2) postconditions.  The advantage of using  
  223. assert() is that this debugging code can be turned off with a  
  224. compile-time switch.
  225. > I don't entirely agree with this approach, for a couple of reasons:
  226. >    
  227. > A precondition assert should verify that the argument values and/or  
  228. types are as they should be for the method to work properly.   
  229. Interestingly enough, except possibly with really obscure code (and I  
  230. can't even think of an example), the compiler and/or runtime system  
  231. will do this for you, so why do you need an assert for this case?   
  232. (Objective-C has a unique runtime system that almost no other  
  233. language has).
  234.  
  235. You might be able to gain a fuller appreciation for preconditions by  
  236. reading "Object Oriented Design" by Bertrand Meyer, which is where  
  237. Brad Cox picked up the notion of preconditions and postconditions.
  238.  
  239. There are several things that your discussion misses. A compiler can  
  240. check type information (is this an int, a const char*, the correct  
  241. object), but it cannot guarantee the condition of that argument (is  
  242. this int between values A and B, is the const char* a unique string,  
  243. is this object initialized to the proper state). Furthermore,  
  244. preconditions may extend to implicit arguments (global state, object  
  245. state), which also needs to be verified. For example; are we  
  246. currently printing? Is the associated nib for this object already  
  247. loaded.
  248.  
  249. Postconditions are treated in a similar fashion (the method operates  
  250. on state to produce a range of results; are the results in the  
  251. expected range?).
  252.  
  253. A third checking that is left out (I'll have to re-read Cox, as I  
  254. believe he misses this as well), is invarients. That is, what are  
  255. those states which may effect outcome which have nothing to do with  
  256. inputs. This includes environment conditions (memory, disk, threads,  
  257. etc), globals and some local state.
  258.  
  259. Some very good points.  I need to study it some more.
  260.  
  261. I've been finding that the third checking you mention (invarients) is  
  262. especially important with Distributed Objects.  These types of  
  263. objects seem to either need state-machine logic inside of them, or  
  264. else provide some sort of mutex-locking methods.  And in any case, to  
  265. implement such mechanisms, the object must "remember" who sent each  
  266. message so "state" information is quite common.
  267.  
  268. For example, suppose you message a remote object to load an NXImage,  
  269. with the intent to message it afterwards to attach some additional  
  270. information to the image, then finally message it to save the image  
  271. and it's tagged data to a database.  Now suppose that before you send  
  272. the message to save the data, some other remote object messages it to  
  273. load a different NXImage.  Disaster....
  274.  
  275. The ability for any object on the network to message any other object  
  276. on the network can lead to chaos if suitable precautions aren't  
  277. taken.  And, as I said above, these precautions seem to always  
  278. require some sort of "state" memory for the object.
  279. ..
  280.  
  281. protocols are cool, but not supported outside NeXT :-(
  282.  
  283.  
  284.  So? :-) 
  285.  
  286.  
  287. >  
  288. > *****************************
  289. > Methods must appear in both the implementation-module and  
  290. interface-module in the same order that they appear in standard NeXT  
  291. class documentation ...
  292.  
  293. Seeing as NeXT keeps tweaking their own definitions (witness 3.0  
  294. docs), and knowing some of the shortcomings (like delegate method  
  295. lookup) I'm not enamored with the suggestion. We break things into  
  296. logical groupings (existence, accessor, i/o, etc) within the header  
  297. and module files. This allows a programmer quick access to related  
  298. regions (which we deem pretty important). In fact, I'd wager you'll  
  299. encounter more production problems (i.e. bugs) by code that is spread  
  300. out alphabetically that clustered into logical groups.
  301.  
  302. Your point here is well-taken.  In fact, I considered this approach  
  303. for quite a while, and even initially wrote my code in the manner you  
  304. suggest.  The problem was that it just wasn't that easy to categorize  
  305. many of the methods, and what made sense to me for a category for a  
  306. method didn't necessarily make sense to others, and visa-versa.  It  
  307. seems that, for those gray areas where a method could actually be  
  308. multiply-categorized, everyone has their own idea of where it  
  309. belongs.  After awhile, chaos seems to ensue.
  310.  
  311. I still think it's better to alphabetize them within their respective  
  312. groups, with Class methods at the top, instance methods in the  
  313. middle, and delegate methods at the bottom.
  314.  
  315. However, those 3 groups should only be sub-groups of the bigger  
  316. groups implied by interface objects across multiple (sub)projects.   
  317. This will be a part of my "sub-projects" guidelines.
  318.  
  319. regards,
  320.  
  321. Kevin
  322. --
  323. Kevin Sven Berg               /    /    /    /  P /  a /  g /  e /  s
  324. kevin@pages.com              /    /    /    /    /    /    /    / 
  325. Pages Software Inc.         /    /    /    /    /    /    /    /   
  326. 619-492-9050  
  327.  
  328.  
  329. --
  330. Nevin Pratt, Digital Technology, Int'l    Orem, Ut
  331. NeXTmail preferred, but ONLY at my REAL email address:  
  332. nevin@dtint.dtint.com
  333.  
  334.  
  335.  
  336. -- NewsGrazer, a NeXTstep(tm) news reader, posting --
  337. M>UQR=&8P7&%N<VE[7&9O;G1T8FQ<9C!<9G-W:7-S($AE;'9E=&EC83M<9C)<
  338. M9FYI;"!4:6UE<RU2;VUA;CM<9C%<9FUO9&5R;B!#;W5R:65R.WT*7&UA<F=L
  339. M,3(P"EQM87)G<C$R,`I[7&-O;&]R=&)L.UQR960P7&=R965N,%QB;'5E,#M]
  340. M"EQP87)D7'1X-3(P7'1X,3`V,%QT>#$V,#!<='@R,3(P7'1X,C8V,%QT>#,R
  341. M,#!<='@S-S(P7'1X-#(V,%QT>#0X,#!<='@U,S(P7&8P7&(P7&DP7'5L;F]N
  342. M95QF<S(T7&9C,%QC9C`@7`I);G1E<F5S=&EN9R!S='5F9B!A;F0@82!L;W0@
  343. M;V8@9V]O9"!P;VEN="P@<V]M92!O9B!W:&EC:"!E;F0@=7`@8F5I;F<@87!P
  344. M;&EC86)L92!O;FQY('1O('1H92!.95A4(&5N=FER;VYM96YT+B!#;VYS:61E
  345. M<B!W:&%T(&MI;F0@;V8@<&]R=&EN9R!P<F]B;&5M<R!Y;W4@;6%Y(')U;B!I
  346. M;G1O(&EF('EO=2!I;7!L96UE;G0@>6]U<B!S=&%N9&%R9',N7`I<"@I<8B!)
  347. M="=L;"!P;W)T(&5A<VEL>2!T;R!E=F5R>2!.95A44U1%4"!S=7!P;W)T960@
  348. M<&QA=&9O<FW086YD('1H870G<R!A;&P@22!C87)E(&%B;W5T+B`@3W1H97(@
  349. M<')O9W)A;6UE<G,@;6%Y(&YO="!B92!A<R!L=6-K>2P@=&AO=6=H+"!A;F0@
  350. M;6%Y(&YO="!H879E('1H870@;'5X=7)Y+EP*"EQB,"!<"DUO<F4@=&AA="!A
  351. M('!A<G1I8W5L87(@<W1A;F1A<F0L(&ET('!R;V)A8FQY(&ES(&EM<&]R=&%N
  352. M="!F;W(@82!G<F]U<"!O9B!P96]P;&4@=&\@86=R964@;VX@82!S=&%N9&%R
  353. M9"!I;7!L96UE;G1A=&EO;BX@5&AI<R!I;F-L=61E<R!S=6)P<F]J96-T('-E
  354. M='5P+"!O8FIE8W0@;F%M:6YG(&-O;G9E;G1I;VYS+"!C;V1E(&]U=&QI;FEN
  355. M9RP@9FEL92!C;VUM96YT:6YG(&%N9"!O<F=A;FEZ871I;VXL(&UE=&AO9"]F
  356. M=6YC=&EO;B!C;VUM96YT:6YG+"!L:6YE(&]R(&-L=7-T97(@8V]M;65N=&EN
  357. M9RP@971C+EP*7`H*7&(@22!C;W9E<F5D(")O8FIE8W0@;F%M:6YG(&-O;G9E
  358. M;G1I;VYS(B!B>2!R97%U:7)I;F<@=&AE;2!T;R!F;VQL;W<@=&AE('!A;F5L
  359. M+W=I;F1O=R!E>&%M<&QE+"!T:&4@;F%M97,@;V8@=VAI8V@@;75S="!B92!L
  360. M;V=I8V%L(&9R;VT@86X@96YD+75S97(@<&]I;G0@;V8@=FEE=RX@($-O;6UE
  361. M;G1I;F<@=V%S(&-O=F5R960@=&\@=&AE(&1E9W)E92!T:&%T($D@=&AI;FL@
  362. M:70@;6%T=&5R<]!B97EO;F0@=&AA="P@;&5T(&5A8V@@9&5V96QO<&5R(&1E
  363. M8VED92X@($D@9&ED;B=T(&-O=F5R('-U8G!R;VIE8W0@<V5T=7#0;F]T('1H
  364. M870@22!O=F5R;&]O:V5D(&ETT&)U="!T:&%T($DG;2!N;W0@>65T(')E861Y
  365. M('1O('9O:6-E(&UY('1H;W5G:'1S+EP*"EQB,"!<"DDG=F4@8F5E;B!T:&4@
  366. M<F]U=&4@;V8@97AT<F5M96QY('-T<FEC="!C;VYV96YT:6]N<R`H<V5E($-H
  367. M87)L97,@4WEM;VYI+"!-250O36EC<F]S;V9T(&]N('1Y<&4@;F%M:6YG(&-A
  368. M;&-U;'5S(&-O;6UO;FQY(')E9F5R<F5D('1O(&%S(")(=6YG87)I86XB*2P@
  369. M86YD($D@9FEN9"!T:&4@;6ED9&QE(&=R;W5N9"!M;W)E(&%P<&5A;&EN9R`H
  370. M:2YE+B!A("=R96QA>&5D)R!B=70@96YF;W)C96%B;&4L(&1E;6]C<F%T:6,@
  371. M9W)O=7`@;V8@<W1A;F1A<F1S*2Y<"EP*"EQB($DG;2!A9V%I;G-T($AU;F=A
  372. M<FEA;B!N;W1A=&EO;BX@($DG;2!A;'-O(&YO="!I;F-L:6YE9"!T;R!M86ME
  373. M(&%N>2!R=6QE<R!G;W9E<FYI;F<@:6YS=&%N8V4@=F%R:6%B;&4@;F%M97,L
  374. M(&)U="!C;&%S<R!N86UE<R!A<F4@8V]V97)E9"`H<V5E(&-O;6UE;G0@86)O
  375. M=F4I+EP*"EQB,"!<"EP*"EQI7&QI-30P7&9C,5QC9C$@/B!!;&P@<&%N96QS
  376. M(&%N9"!W:6YD;W=S('-H;W5L9"!B92!I;B!A('-E<&%R871E($Y)0B!F:6QE
  377. M+"!O;F4@<&5R($Y)0BP@=VET:"!A('-E<&%R871E($-L87-S(&]B:F5C="!T
  378. M;R!C;VYT<F]L(&%N9"!M86YA9V4@96%C:"!.24(N("!&;W(@97AA;7!L92P@
  379. M9F]R('1H92!);F9O($Y)0B!F:6QE+"!T:&5R92!S:&]U;&0@86QS;R!B92!F
  380. M:6QE<R!);F9O+F@@86YD($EN9F\N;2!T:&%T(&UA;F%G97,@=&AE($Y)0B!F
  381. M:6QE+B`@5&AE('!A;F5L(&]R('=I;F1O=R!I;B!T:&4@3DE"(&9I;&4@<VAO
  382. M=6QD(&AA=F4@=&AE(&YA;64@;V8@:70G<R!.24(@9FEL92`H86YD(&%S<V]C
  383. M:6%T960@8VQA<W,@9FEL97,I(&%S('1H92!N86UE(&]F('1H92!P86YE;"]W
  384. M:6YD;W<@*'1H:7,@:7,@<V5T86)L92!V:6$@=&AE($EN<W!E8W1O<B!P86YE
  385. M;"!O9B!)+D(NT$DG;2!T86QK:6YG(&%B;W5T('1H92!N86UE('1H870@=VEL
  386. M;"!A<'!E87(@:6X@=&AE('1I=&QE(&)A<B!O9B!T:&4@<&%N96PO=VEN9&]W
  387. M+"!N;W0@=&AE(&YA;64@87,@:70@;6EG:'0@87!P96%R(&EN('1H92`B3V)J
  388. M96-T<R(@<&%R="!O9B!T:&4@3DE"*2Y<"@I<:3!<;&DP7&9C,%QC9C`@7`I4
  389. M:&ES(&1O97-N)W0@86-C;W5N="!F;W(@<W5B+7!A;F5L<R!O<B!M:6-R;RUP
  390. M86YE;"!M86YA9V5M96YT+B!!;'-O+"!I9B!Y;W4@:&%V92!A(&QA<F=E(&-O
  391. M;&QE8W1I;VX@;V8@3DE"<R!I="!M96%N<R!A('!R;W!A9V%T:6]N(&]F(&]B
  392. M:F5C=',O8VQA<W-E<RX@06=A:6XL(&$@<W1A;F1A<F0@;65T:&]D('=I=&AI
  393. M;B!T:&4@87!P;&EC871I;VX@;6%Y(&)E('=H870G<R!R96%L;'D@8V%L;&5D
  394. M(&9O<BP@;F]T(&$@<W1A;F1A<F0@87!P<F]A8V@@=&\@86QL(&%P<&QI8V%T
  395. M:6]N<RY<"EP*"EQB(%EE<RP@>6]U(&%R92!R:6=H="X@($D@:&%V92!A;6UE
  396. M;F1E9"!T:&4@87!P;&EC86)L92!P87)T(&]F('1H:7,@<G5L92!T;R!R96%D
  397. M(&%S(&9O;&QO=W,Z7`H*7'!A<F1<='@U-C!<='@Q,3(P7'1X,38X,%QT>#(R
  398. M-#!<='@R.#`P7'1X,S,V,%QT>#,Y,C!<='@T-#@P7'1X-3`T,%QT>#4V,#!<
  399. M9C)<9G,R.%QF8S!<8V8P(%P*"EQL:3<V,"!!;&P@<&%N96QS(&%N9"!W:6YD
  400. M;W=S('1H870@87)E(&EN<W1A;G1I871E9"!I;B!A($Y)0B!F:6QE('-H;W5L
  401. M9"!B92!I;B!S"EQI(&5P87)A=&4*7&DP("!.24(@9FEL97,L(&]N92!P97(@
  402. M3DE"+"!W:71H(&$@<V5P87)A=&4@0VQA<W,@;V)J96-T('1O(&-O;G1R;VP@
  403. M86YD(&UA;F%G92!E86-H($Y)0BX@($9O<B!E>&%M<&QE+"!F;W(@=&AE($EN
  404. M9F\@3DE"(&9I;&4L('1H97)E('-H;W5L9"!A;'-O(&)E(&9I;&5S(`I<:2!)
  405. M;F9O+F@*7&DP("!A;F0@"EQI($EN9F\N;0I<:3`@('1H870@;6%N86=E<R!T
  406. M:&4@3DE"(&9I;&4N("!4:&4@<&%N96P@;W(@=VEN9&]W(&EN('1H92!.24(@
  407. M9FEL92!S:&]U;&0@:&%V92!T:&4@;F%M92!O9B!I="=S($Y)0B!F:6QE("AA
  408. M;F0@87-S;V-I871E9"!C;&%S<R!F:6QE<RD@87,@=&AE(&YA;64@;V8@=&AE
  409. M('!A;F5L+W=I;F1O=R`H=&AI<R!I<R!S971A8FQE('9I82!T:&4@26YS<&5C
  410. M=&]R('!A;F5L(&]F($DN0B[022=M('1A;&MI;F<@86)O=70@=&AE(&YA;64@
  411. M=&AA="!W:6QL(&%P<&5A<B!I;B!T:&4@=&ET;&4@8F%R(&]F('1H92!P86YE
  412. M;"]W:6YD;W<L(&YO="!T:&4@;F%M92!A<R!I="!M:6=H="!A<'!E87(@:6X@
  413. M=&AE(")/8FIE8W1S(B!P87)T(&]F('1H92!.24(I+B`@3F]T92!T:&%T('1H
  414. M:7,@87!P;&EE<R!O;FQY('1O('1H92!.24(@9FEL97,@87-S;V-I871E9"!W
  415. M:71H('1H92!#;&%S<R!C<F5A=&]R)W,@<')I;6%R>2!L86YG=6%G92`H:2YE
  416. M+BP@:68@>6]U(&%R92!&<F5N8V@L('EO=2=L;"!C<F5A=&4@1G)E;F-H(&-L
  417. M87-S(&YA;65S+"!A;F0@8W)E871E('1H92!&<F5N8V@@3DE"(&9I;&5S('1O
  418. M(&9O;&QO=R!T:&ES(')U;&4N("!4:&4@;W1H97(@;&%N9W5A9V4@3DE"(&9I
  419. M;&5ST$=E<FUA;BP@16YG;&ES:"P@4W=I<W,L(&5T8R[0=VEL;"!B92!C<F5A
  420. M=&5D(&)A<V5D(&]N('1H92!&<F5N8V@@3DE"(&9I;&5S+"!A;F0@=&AO<V4@
  421. M86QT97)N871E(&QA;F=U86=E($Y)0B=S('=O;B=T(&YE8V5S<V%R:6QY(&UA
  422. M=&-H('EO=7(@1G)E;F-H(&-L87-S(&YA;65S*2X@"EQF,%QF<S(T(%P*"EQP
  423. M87)D7'1X-3(P7'1X,3`V,%QT>#$V,#!<='@R,3(P7'1X,C8V,%QT>#,R,#!<
  424. M='@S-S(P7'1X-#(V,%QT>#0X,#!<='@U,S(P7&(P7&9C,%QC9C`@7`H*7&(@
  425. M3F]T:6-E('1H870@=&AE(')U;&4@;F]W(&]N;'D@87!P;&EE<R!T;R!P86YE
  426. M;',O=VEN9&]W<R!T:&%T(&%R92!A;')E861Y(&EN<W1A;G1I871E9"!I;B!T
  427. M:&4@3DE"("AT:&ES(&ES('=H870@22!I;FET:6%L;'D@;65A;G0L(&%N>7=A
  428. M>2DN("!!;&5R="!P86YE;',L(&UI8W)O+7!A;F5L<RP@86YD('1H92!L:6ME
  429. M(&%R92!G96YE<F%L;'D@:6YS=&%N=&EA=&5D('9I82!P<F]G<F%M(&QO9VEC
  430. M("AV:6$@(DY84G5N06QT97)086YE;"@I(BP@87,@;VYE('!O<W-I8FQE(&5X
  431. M86UP;&4I+EP*7`I!;'-O(&YO=&EC92!T:&4@8VQA<FEF:6-A=&EO;B!A="!T
  432. M:&4@96YD(&]F('1H92!P87)A9W)A<&@@<F5G87)D:6YG(&QO8V%L:7IE9"!.
  433. M24(G<R`H22!H860@;VYE('!E<G-O;B!E;6%I;"!M92!I;B!D:7-A9W)E96UE
  434. M;G0L(&%R9W5I;F<@=&AA="!T:&5Y('=A;G1E9"!L;V-A;&EZ960@3DE"(&YA
  435. M;65S(&EN<W1E860I+EP*(%P*"EQB,"`^("`@(%P*"EQI7&QI-30P7&9C,5QC
  436. M9C$@/B!/<BP@870@=&AE('9E<GD@;&5A<W0L('1H92!N86UE(&]F('1H92!.
  437. M24(@9FEL92`H86YD('1H97)E9F]R92!T:&4@87-S;V-I871E9"!C;&%S<R!F
  438. M:6QE<RD@<VAO=6QD(&)E(&]B=FEO=7,@=&\@9&5T97)M:6YE('-I;7!L>2!B
  439. M>2!L;V]K:6YG(&%T('1H92!P86YE;"`H;W(@=VEN9&]W*2!N86UE+B`@26X@
  440. M=&AI<R!W87DL('-I;7!L>2!R=6YN:6YG('1H92!P<F]G<F%M('=I;&P@9VEV
  441. M92!A;F]T:&5R('!R;V=R86UM97(@82!V97)Y(&=O;V0@:61E82!O9B!T:&4@
  442. M;V)J96-T('-T<G5C='5R92!O9B!T:&4@<')O9W)A;2P@<VEN8V4@:&4@8V%N
  443. M('!L86EN;'D@<V5E(&%L;"!O9B!T:&4@<&%N96QS(&%N9"!W:6YD;W=S+"!A
  444. M;F0@=&AE:7(@;F%M97,L('=H:6QE('1H92!P<F]G<F%M(&ES(')U;FYI;F<N
  445. M7`H*7&DP7&QI,%QF8S!<8V8P(%P*06=A:6XL(&UA;GD@;FEB<R!D;VXG="!S
  446. M:&]W('1I=&QE<RX@06YO=&AE<B`H<&]S<VEB;&4I(&-O;G-I9&5R871I;VXZ
  447. M(&EN9F]R;6%T:6]N(&AI9&EN9RX@268@>6]U(&%R92!D:7-T<FEB=71I;F<@
  448. M<V]U<F-E(&9O<B!P=6)L:6,@8V]N<W5M<'1I;VX@=&AE;B!I<R!P<F]B86)L
  449. M>2!N;W0@=VAA="!Y;W4@=V%N="!T;R!D;RX@268@>6]U(&%R92!S96QL:6YG
  450. M(&%N(&%P<&QI8V%T:6]N+"!Y;W4@;6%Y('=I<V@@=&\@96YC;V1E('-O;64@
  451. M=&AI;F=S+B!3;VUE('9E;F1E<G,@9&\@8V]N<VED97(@:70@87!P<F]P<FEA
  452. M=&4N7`I<"@I<8B!)('!R97-U;64@>6]U(&UE86XZ(")S;VUE('!A;F5L<R]W
  453. M:6YD;W=S(&EN('-O;64@3DE")W,@9&]N)W0@:&%V92!T:71L97,B+B`@37D@
  454. M<75E<W1I;VX@=V]U;&0@=&AE;B!B93H@=VAY(&1O97-N)W0@=&AE('!A;F5L
  455. M+W=I;F1O=R!H879E(&$@=&ET;&4_("!7:&%T('=O=6QD(&ET(&AU<G0@=&\@
  456. M<'5T(&$@=&ET;&4@:6X_("!.;W1E('1H870@=&AE(')U;&4@22!G879E(&1O
  457. M97,@9VEV92!Y;W4@<V]M92!D:7-C<F5T:6]N(&EN('1H92!C:&]I8V4@;V8@
  458. M=&AE('1I=&QE.EP*7`H*7'!A<F1<='@U-C!<='@Q,3(P7'1X,38X,%QT>#(R
  459. M-#!<='@R.#`P7'1X,S,V,%QT>#,Y,C!<='@T-#@P7'1X-3`T,%QT>#4V,#!<
  460. M9C)<:5QF<S(X7&QI-S(P7&9C,%QC9C`@3W(L(&%T('1H92!V97)Y(&QE87-T
  461. M+"!T:&4@;F%M92!O9B!T:&4@3DE"(&9I;&4@*&%N9"!T:&5R969O<F4@=&AE
  462. M(&%S<V]C:6%T960@8VQA<W,@9FEL97,I('-H;W5L9"!B92!O8G9I;W5S('1O
  463. M(&1E=&5R;6EN92!S:6UP;'D@8GD@;&]O:VEN9R!A="!T:&4@<&%N96P@*&]R
  464. M('=I;F1O=RD@;F%M92X@($EN('1H:7,@=V%Y+"!S:6UP;'D@<G5N;FEN9R!T
  465. M:&4@<')O9W)A;2`H=VET:"!T:&4@87!P<F]P<FEA=&4@9&5F875L="!L86YG
  466. M=6%G92D@=VEL;"!G:79E(&%N;W1H97(@<')O9W)A;6UE<B!A('9E<GD@9V]O
  467. M9"!I9&5A(&]F('1H92!O8FIE8W0@<W1R=6-T=7)E(&]F('1H92!P<F]G<F%M
  468. M+"!S:6YC92!H92!C86X@<&QA:6YL>2!S964@86QL(&]F('1H92!P86YE;',@
  469. M86YD('=I;F1O=W,L(&%N9"!T:&5I<B!N86UE<RP@=VAI;&4@=&AE('!R;V=R
  470. M86T@:7,@<G5N;FEN9RX*7&DP(%P*"EQP87)D7'1X-3(P7'1X,3`V,%QT>#$V
  471. M,#!<='@R,3(P7'1X,C8V,%QT>#,R,#!<='@S-S(P7'1X-#(V,%QT>#0X,#!<
  472. M='@U,S(P7&8P7&9S,C1<9F,P7&-F,"!<"DAO=V5V97(L('EO=2!M86ME(&$@
  473. M9V]O9"!P;VEN="!A8F]U="!E;F-O9&EN9RX@($ET(&UI9VAT(&)E(&%N(&ES
  474. M<W5E(&]N('-O;64@<')O:F5C=',N7`H*7&(P(%P*/B`J*BHJ*BHJ*BHJ*BHJ
  475. M*BHJ*BHJ*BHJ*BHJ*BHJ*EP*/B!<"@I<:5QL:34T,%QF8S%<8V8Q(#X@5VAE
  476. M;B!G:79E;B!A(&-H;VEC92!O9B!F97=E<B!O8FIE8W1S('1H870@9&\@;6]R
  477. M92P@=F5R<W5S(&UO<F4@;V)J96-T<R!T:&%T(&%R92!S;6%L;&5R(&%N9"!D
  478. M;R!L97-S+"!F879O<B!T:&4@=7-E(&]F('-M86QL97(@;V)J96-T<RX@(%EO
  479. M=2=L;"!F:6YD('1H870@>6]U<B!O8FIE8W1S('=I;&P@9W)O=R!L87)G97(@
  480. M9'5R:6YG(&1E=F5L;W!M96YT(&%N>7=A>2Y<"@I<:3!<;&DP7&9C,%QC9C`@
  481. M7`I'96YE<F%L;'D@22=D(&%G<F5E+B!(;W=E=F5R+"!I9B!Y;W4G<F4@=&%L
  482. M:VEN9R!A8F]U="!M86YA9VEN9R!S87DL(#$P,#`@8VQA<W-E<RP@>6]U)VQL
  483. M(&9I;F0@82!C97)T86EN(')E9'5N9&%N8WD@<W1A<G1S('1O(&-R965P(&EN
  484. M+B!/3U`@:6X@9V5N97)A;"!H87,@=&\@9&\@=VET:"!T:&4@;6%N86=E;65N
  485. M="!O9B!I;F9O<FUA=&EO;BX@1&\@>6]U('=A;G0@=&\@;6%N86=E(&UO<F4@
  486. M;W(@;&5S<R!T:&EN9W,@=VET:&EN(&$@9FEL93\@1&\@>6]U('=A;G0@=&\@
  487. M;6%N86=E(&UO<F4@;W(@;&5S<R!T:&EN9W,@86UO;F<@9FEL97,_7`I<"@I<
  488. M8B!!;B!O8FIE8W0@8V%N(&UA;F%G92!M;W)ET&%N9"!S=&EL;"!B92!S;6%L
  489. M;"!I;B!T97)M<R!O9B!T:&4@8V]D92!I="!C;VYT86EN<]!I9B!I="!D96QE
  490. M9V%T97,@:70G<R!W;W)K('1O(&]T:&5R(&]B:F5C=',N("!4;R!U<V4@82!H
  491. M;W5S92UC;VYS=')U8W1I;VX@;65T87!H;W(Z(#0@8F]A<F1S(&%N9"!S;VUE
  492. M(&YA:6QS(&UI9VAT(&UA:V4@82!P86YE;#L@,R!O<B`T('!A;F5L<R!M:6=H
  493. M="!M86ME(&$@=V%L;"P@-"!W86QL<R!A;F0@82!F;&]O<B!M:6=H="!M86ME
  494. M(&$@<F]O;2P@,R!R;V]M<R!M:6=H="!M86ME(&$@9FQO;W(L(&%N9"`S(&9L
  495. M;V]R<R!A;F0@82!R;V]F(&UI9VAT(&UA:V4@82!H;W5S92X@($%N9"P@:6X@
  496. M96%C:"!C87-E+"!T:&4@;V)J96-T(&ES('-M86QLT&5V96X@=&AE(")H;W5S
  497. M92(@;V)J96-T+EP*"EQB,"!<"E!E;W!L92!A<F4@<W1I;&P@96YA;6]R960@
  498. M96YO=6=H('=I=&@@3T]0(&5N;W5G:"!T;R!N;W0@<V5E('1H92!S96-O;F0@
  499. M<VET=6%T:6]N.B`@;V)J96-T<R!A;&QO=R!A(&5N8V%P<W5L:7IA=&EO;B!O
  500. M9B!R96QA=&5D(&-O9&4@<V\@=V4@8V%N(&%V;VED('-I='5A=&EO;G,@;V8@
  501. M=&EG:'1L>2!W<F%P<&5D(&-O9&EN9RX@3V)J96-T('-Y<W1E;7,@<W1I;&P@
  502. M96YD('5P(&)E:6YG('1I9VAT;'D@8F]U;F0@86UO;F<@<V5T<R!O9B!O8FIE
  503. M8W1S+B!/3U`@:&%S(&YO="`G<V]L=F5D)R!T:&4@<')O8FQE;2P@;VYL>2!P
  504. M=7-H960@:70@9G5R=&AE<B!B86-K+"!A="!W:&EC:"!S=&%G92!T:&4@<')O
  505. M8FQE;2!B96-O;65S(&5V96X@8FEG9V5R+B!#;VYS:61E<B!T:&4@:6UP86-T
  506. M<R!O9B!F879O<FEN9R!S;6%L;&5R(&]B:F5C=',@=VAE;B!Y;W5R(&]B:F5C
  507. M=',@8F5C;VUE(&EN=&5R9&5P96YD96YT(&%N9"!A8G5N9&%N="Y<"EP*"EQB
  508. M($ES('1H92`B<F]O;2(@;V)J96-T('1I9VAT;'D@8F]U;F0@=&\@=&AE(")H
  509. M;W5S92(@;V)J96-T(&9R;VT@;7D@;65T87!H;W(@86)O=F4_("!.;RY<"EP*
  510. M27,@=&AE(")R;V]M(B!O8FIE8W0@=&EG:'1L>2!B;W5N9"!T;R!T:&4@(F)O
  511. M87)D(B!O8FIE8W0@9G)O;2!M>2!M971A<&AO<B!A8F]V93\@($YO+B`@270G
  512. M<R!P97)F96-T;'D@86-C97!T86)L92!T;R!B=6EL9"!T:&4@=V%L;',@;V8@
  513. M=&AE(')O;VT@=VET:"!A;F]T:&5R(&UA=&5R:6%L("AS=6-H(&%S(&)R:6-K
  514. M*2P@87,@;&]N9R!A<R!T:&4@<F]O;2!I<R!S=&EL;"!A(')O;VTN("!);B!O
  515. M=&AE<B!W;W)D<RP@:70G<R!/2R!T;R!I;7!R;W9E('1H92!A;&=O<FET:&TN
  516. M7`I<"DEF('EO=2!M86ME(&$@;6ES=&%K92!A;F0@9&ES8V]V97(@=&AA="!Y
  517. M;W5R(')O;VUS(&)U:6QT('=I=&@@8F]A<F1S(&%R92!O8G-O;&5T92`H;6%Y
  518. M8F4@>6]U('5S960@8F%L<V$@=V]O9#\I+"!A;F0@>6]U(&YO(&QO;F=E<B!W
  519. M86YT(')O;VUS('1H870@=V%Y("AB=70@;75S="!K965P('EO=7(@;VQD(&)A
  520. M;'-A+7=O;V0@<F]O;7,@87)O=6YD(&)E8V%U<V4@;V8@<V]M92!P96-U;&EA
  521. M<B!B86-K=V%R9',@8V]M<&%T86)I;&ET>2!P<F]B;&5M*2P@:G5S="!M87)K
  522. M('EO=7(@(G)O;VTB(&]B:F5C="!A<R!O8G-O;&5T92`H86YD(&%L<V\@:70G
  523. M<R!S=7!P;W)T(&]B:F5C=',I('-O(&YO8F]D>2!W:6QL('5S92!I="!A9V%I
  524. M;B!F;W(@86YY(&YE=R!F;&]O<B!O9B!A;GD@;F5W(&AO=7-E+B`@(%1H96X@
  525. M8W)E871E(&$@(F)R:6-K+7)O;VUS(B!O8FIE8W0@*&%N9"!I="=S('-U<'!O
  526. M<G0@;V)J96-T<RD@9F]R(&9U='5R92!U<V4N("!4:&5N+"!K965P(&)O=&@@
  527. M(G)O;VTB(&]B:F5C=',@*&%N9"!T:&5I<B!S=7!P;W)T(&]B:F5C=',I(&EN
  528. M('EO=7(@;&EB<F%R>2X@($%L;"!N97<@8V]D92!W:6QL('5S92!T:&4@;F5W
  529. M(&]B:F5C=',L(&%N9"!E=F5N='5A;&QY('1H92!O;&0@;V)J96-T<R!W:6QL
  530. M(&1I92!A(&YA='5R86P@9&5A=&@N7`I<"DEN8VED96YT86QL>2P@22!T:&EN
  531. M:R!T:&ES(&ES(&]N92!O9B!T:&4@;F5A="!T:&EN9W,@;V8@3V)J96-T:79E
  532. M+4,@*'9E<G-U<R!#*RLI+B`@66]U(&-A;B!C<F5A=&4@;F5W+"!L;V=I8V%L
  533. M;'DM<F5L871E9"!O8FIE8W0@0VQA<W-E<RP@86YD('!O;'EM;W)P:&EC86QL
  534. M>2!M97-S86=E('1H96TL('=I=&AO=70@=&AE;2!A;&P@:&%V:6YG('1O(&EN
  535. M:&5R:70@9G)O;2!T:&4@<V%M92!B87-E(&-L87-S+B`@5&AU<RP@:70G<R!M
  536. M;W)E(&9O<F=I=FEN9R!O9B!M:7-T86ME<R!I;B!Y;W5R(&EN:71I86P@0VQA
  537. M<W,@:&EE<F%R8VAY(&1E<VEG;B!T:&%N($,K*R!I<RX@(%=I=&@@0RLK+"!I
  538. M9B!Y;W4@<&]O<FQY(&1E<VEG;B!Y;W5R(&-L87-S(&AI97)A<F-H>2P@>6]U
  539. M)W)E('-C<F5W960L('-I;F-E('EO=2=L;"!P<F]B86)L>2!N;W<@:&%V92!T
  540. M;R!R92UI;7!L96UE;G0@;6%J;W(@<&%R=',@;V8@=&AE($-L87-S(&AI97)A
  541. M<F-H>2Y<"@I<8C`@7`I))VT@;F5I=&AE<B!F;W(@;W(@86=A:6YS="!L87)G
  542. M92]S;6%L;"!O8FIE8W1S.R!))VT@9F]R(&%P<&QY:6YG('=H870@8F5S="!S
  543. M=6ET<R!T:&4@8FEG('!I8W1U<F4N7`I<"CX@7`H^("HJ*BHJ*BHJ*BHJ*BHJ
  544. M*BHJ*BHJ*BHJ*BHJ*BHJ7`H^(`E<"@I<:5QL:34T,%QF8S%<8V8Q(#X@22!H
  545. M879E(&YO="P@87,@>65T+"!S965N(&$@<VEN9VQE(&-O;G9I;F-I;F<@<VET
  546. M=6%T:6]N('=H97)E('!U8FQI8R!I;G-T86YC92!V87)I86)L97,@=V5R92!N
  547. M96-E<W-A<GD@;W(@979E;B!D97-I<F%B;&4L(&%L=&AO=6=H($D@86T@:&5S
  548. M:71A;G0@=&\@<V%Y('1H870@=&AE<F4@87)E(&YO;F4N("XN+EP*"EQF8S!<
  549. M8V8P(%5N;&5S<R!O=&AE<G=I<V4@8V]N=FEN8V5D(&9O<B!S<&5C:6%L(&]C
  550. M8V%S<VEO;G,L(&%L;"!I;G-T86YC92!V87)I86)L97,@<VAO=6QD(&]N;'D@
  551. M8F4@;6]D:69I86)L92!B>2!A(&-L87-S(&UE=&AO9"`H:2YE+BP@3D]4(&)E
  552. M('!U8FQI8RDN("!)="!S:&]U;&0@86QS;R!N;W0@8F4@;6]D:69I86)L92!B
  553. M>2!M;W)E('1H86X@;VYE(&-L87-S(&UE=&AO9"Y<"@I<:3!<;&DP(%P*270@
  554. M9&5P96YD<R!O;B!H;W<@(G!U<FES="(@;W(@=&AE;W)E=&EC86P@=G,N('!R
  555. M86-T:6-A;"!Y;W4@=V%N="!T;R!G970N(%=I=&AI;B!T:&4@<V%M92!M;V1U
  556. M;&4O8VQA<W,@:70@;6%Y(&)E(&%C8V5P=&%B;&4@=&\@<F5F97(@=&\@=&AE
  557. M(&EN<W1A;F-E('9A<FEA8FQE('9S+B!T:&4@;65T:&]D+"!E<W!E8VEA;&QY
  558. M('=H97)E('-P965D(&ES(&-O;F-E<FYE9"Y<"EP*"EQB($EF(&ET)W,@=VET
  559. M:&EN('1H92!S86UE(&EN<W1A;F-E(&]F(&$@8VQA<W,@*&DN92XL('1H92!S
  560. M86UE(")M;V1U;&4B/]!W:&%T(&1O('EO=2!M96%N(&)Y(&$@(FUO9'5L92(L
  561. M(&%N>7=A>3\I+"!T:&4@:6YS=&%N8V4@=F%R:6%B;&5S(&]F(&$@9VEV96X@
  562. M:6YS=&%N8V4@;V8@82!C;&%S<R!A<F4@86-C97-S:6)L92!T;R!A;&P@;65T
  563. M:&]D<R!O9B!T:&%T(&EN<W1A;F-E(&%N>7=A>2P@<F5G87)D;&5S<R!O9B!T
  564. M:&4@=F%R:6%B;&5S)R!C;&%S<VEF:6-A=&EO;B`H<'5B;&EC+"!P<F]T96-T
  565. M960L(&]R('!R:79A=&4IT'-O(&EN('1H:7,@8V%S92!T:&5R92!W;W5L9"!B
  566. M92!N;R!A9'9A;G1A9V4@=&\@9&5C;&%R:6YG(&%N>2!O9B!T:&5M('!U8FQI
  567. M8RY<"EP*0G5T+"!I9B!Y;W4@87)E('1A;&MI;F<@86)O=70@9&EF9F5R96YT
  568. M(&EN<W1A;F-E<R!O9B!T:&4@<V%M92!C;&%S<]!W:&%T(')E;&5V86YC92!D
  569. M;V5S('1H92!F86-T('1H870@=&AE>2!A<F4@;V8@=&AE('-A;64@8VQA<W,@
  570. M:&%V93\@($D@9W5E<W,@:68@:70@97AE8W5T97,@9F%S=&5R+"!T:&5N('=E
  571. M('-H;W5L9"!A;&P@:G5S="!G;R!B86-K('1O(&AA=FEN9R!G;&]B86P@=F%R
  572. M:6%B;&5S(&9O<B!E=F5R>71H:6YG("AA;&$@5VEN9&]Z92D_7`I<"DD@9G5L
  573. M;'D@97AP96-T('1O(&5V96YT=6%L;'D@96YC;W5N=&5R('-O;64@8V%S92!W
  574. M:&5R92!T:&4@:6YS=&%N8V4@=F%R:6%B;&5S(&YE960@=&\@8F4@<'5B;&EC
  575. MT&9O<B!S<&5E9"!O9B!E>&5C=71I;VX@<F5A<V]N<R!A<R!Y;W4@<W5G9V5S
  576. M="X@($D@:G5S="!H879E;B=T('-E96X@=&AA="!C87-E('EE="X@($%N9"P@
  577. M=VAE;B!I="!H87!P96YS+"!)(&IU<W0@=&AI;FL@:70@<VAO=6QD(&)E('-U
  578. M:71A8FQY(&1O8W5M96YT960@:6X@=&AE(&-O9&4@*&DN92XL(&5X<&QA:6YE
  579. M9"!W:'D@=&AE('!U8FQI8R!D96-L87)A=&EO;G,@=V5R92!N96-E<W-A<GG0
  580. M86YD(&%L<V\@:6X@;F]N+6%M8FEG=6]U<RP@=F5R>2!S<&5C:69I8R!T97)M
  581. M<RD@+B`@3W1H97)W:7-E+"!S=&%Y(&%W87D@9G)O;2!P=6)L:6,@9&5C;&%R
  582. M871I;VYS+EP*"EQB,"!<"CX@(%P*/B`J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
  583. M*BHJ*BHJ*EP*/B`@("`@(%P*"EQI7&QI-30P7&9C,5QC9C$@/B!296%L:71Y
  584. M($-H96-K:6YG(&EN("=#)R!C;V1E("AA<R!W96QL(&%S(&%L;"!O9B!T:&4@
  585. M)T,G(&QA;F=U86=E(&1E<FEV871I=F5S+"!S=6-H(&%S($]B:F5C=&EV92U#
  586. M*2!I<R!A8V-O;7!L:7-H960@=VET:"!T:&4@87-S97)T*"D@;6%C<F\N("!"
  587. M<F%D($-O>"P@=&AE(&-R96%T;W(@;V8@3V)J96-T:79E+4,L(')E8V]M;65N
  588. M9',@=7-I;F<@87-S97)T<R`H<"X@.3@@86YD(#DY(&]F(&AI<R!B;V]K+"!/
  589. M8FIE8W0M3W)I96YT960@4')O9W)A;6UI;F<L($%N($5V;VQU=&EO;F%R>2!!
  590. M<'!R;V%C:"P@,FYD($5D:71I;VXI(&9O<B!296%L:71Y($-H96-K:6YG("AH
  591. M92!C86QL<R!I="!S;VUE=&AI;F<@96QS92P@=&AO=6=H*2!A;F0@8VQU<W1E
  592. M<FEN9R!T:&4@8VAE8VMS(&EN=&\@='=O(&=R;W5P<SH@*#$I('!R96-O;F1I
  593. M=&EO;G,L(&%N9"`H,BD@<&]S=&-O;F1I=&EO;G,N("!4:&4@861V86YT86=E
  594. M(&]F('5S:6YG(&%S<V5R="@I(&ES('1H870@=&AI<R!D96)U9V=I;F<@8V]D
  595. M92!C86X@8F4@='5R;F5D(&]F9B!W:71H(&$@8V]M<&EL92UT:6UE('-W:71C
  596. M:"Y<"@I<:3!<;&DP7&9C,%QC9C`@/B!<"CX@22!D;VXG="!E;G1I<F5L>2!A
  597. M9W)E92!W:71H('1H:7,@87!P<F]A8V@L(&9O<B!A(&-O=7!L92!O9B!R96%S
  598. M;VYS.EP*/B`@("!<"CX@02!P<F5C;VYD:71I;VX@87-S97)T('-H;W5L9"!V
  599. M97)I9GD@=&AA="!T:&4@87)G=6UE;G0@=F%L=65S(&%N9"]O<B!T>7!E<R!A
  600. M<F4@87,@=&AE>2!S:&]U;&0@8F4@9F]R('1H92!M971H;V0@=&\@=V]R:R!P
  601. M<F]P97)L>2X@($EN=&5R97-T:6YG;'D@96YO=6=H+"!E>&-E<'0@<&]S<VEB
  602. M;'D@=VET:"!R96%L;'D@;V)S8W5R92!C;V1E("AA;F0@22!C86XG="!E=F5N
  603. M('1H:6YK(&]F(&%N(&5X86UP;&4I+"!T:&4@8V]M<&EL97(@86YD+V]R(')U
  604. M;G1I;64@<WES=&5M('=I;&P@9&\@=&AI<R!F;W(@>6]U+"!S;R!W:'D@9&\@
  605. M>6]U(&YE960@86X@87-S97)T(&9O<B!T:&ES(&-A<V4_("`H3V)J96-T:79E
  606. M+4,@:&%S(&$@=6YI<75E(')U;G1I;64@<WES=&5M('1H870@86QM;W-T(&YO
  607. M(&]T:&5R(&QA;F=U86=E(&AA<RDN7`I<"EEO=2!M:6=H="!B92!A8FQE('1O
  608. M(&=A:6X@82!F=6QL97(@87!P<F5C:6%T:6]N(&9O<B!P<F5C;VYD:71I;VYS
  609. M(&)Y(')E861I;F<@(D]B:F5C="!/<FEE;G1E9"!$97-I9VXB(&)Y($)E<G1R
  610. M86YD($UE>65R+"!W:&EC:"!I<R!W:&5R92!"<F%D($-O>"!P:6-K960@=7`@
  611. M=&AE(&YO=&EO;B!O9B!P<F5C;VYD:71I;VYS(&%N9"!P;W-T8V]N9&ET:6]N
  612. M<RY<"EP*5&AE<F4@87)E('-E=F5R86P@=&AI;F=S('1H870@>6]U<B!D:7-C
  613. M=7-S:6]N(&UI<W-E<RX@02!C;VUP:6QE<B!C86X@8VAE8VL@='EP92!I;F9O
  614. M<FUA=&EO;B`H:7,@=&AI<R!A;B!I;G0L(&$@8V]N<W0@8VAA<BHL('1H92!C
  615. M;W)R96-T(&]B:F5C="DL(&)U="!I="!C86YN;W0@9W5A<F%N=&5E('1H92!C
  616. M;VYD:71I;VX@;V8@=&AA="!A<F=U;65N="`H:7,@=&AI<R!I;G0@8F5T=V5E
  617. M;B!V86QU97,@02!A;F0@0BP@:7,@=&AE(&-O;G-T(&-H87(J(&$@=6YI<75E
  618. M('-T<FEN9RP@:7,@=&AI<R!O8FIE8W0@:6YI=&EA;&EZ960@=&\@=&AE('!R
  619. M;W!E<B!S=&%T92DN($9U<G1H97)M;W)E+"!P<F5C;VYD:71I;VYS(&UA>2!E
  620. M>'1E;F0@=&\@:6UP;&EC:70@87)G=6UE;G1S("AG;&]B86P@<W1A=&4L(&]B
  621. M:F5C="!S=&%T92DL('=H:6-H(&%L<V\@;F5E9',@=&\@8F4@=F5R:69I960N
  622. M($9O<B!E>&%M<&QE.R!A<F4@=V4@8W5R<F5N=&QY('!R:6YT:6YG/R!)<R!T
  623. M:&4@87-S;V-I871E9"!N:6(@9F]R('1H:7,@;V)J96-T(&%L<F5A9'D@;&]A
  624. M9&5D+EP*7`I0;W-T8V]N9&ET:6]N<R!A<F4@=')E871E9"!I;B!A('-I;6EL
  625. M87(@9F%S:&EO;B`H=&AE(&UE=&AO9"!O<&5R871E<R!O;B!S=&%T92!T;R!P
  626. M<F]D=6-E(&$@<F%N9V4@;V8@<F5S=6QT<SL@87)E('1H92!R97-U;'1S(&EN
  627. M('1H92!E>'!E8W1E9"!R86YG93\I+EP*7`I!('1H:7)D(&-H96-K:6YG('1H
  628. M870@:7,@;&5F="!O=70@*$DG;&P@:&%V92!T;R!R92UR96%D($-O>"P@87,@
  629. M22!B96QI979E(&AE(&UI<W-E<R!T:&ES(&%S('=E;&PI+"!I<R!I;G9A<FEE
  630. M;G1S+B!4:&%T(&ES+"!W:&%T(&%R92!T:&]S92!S=&%T97,@=VAI8V@@;6%Y
  631. M(&5F9F5C="!O=71C;VUE('=H:6-H(&AA=F4@;F]T:&EN9R!T;R!D;R!W:71H
  632. M(&EN<'5T<RX@5&AI<R!I;F-L=61E<R!E;G9I<F]N;65N="!C;VYD:71I;VYS
  633. M("AM96UO<GDL(&1I<VLL('1H<F5A9',L(&5T8RDL(&=L;V)A;',@86YD('-O
  634. M;64@;&]C86P@<W1A=&4N7`I<"@I<8B!3;VUE('9E<GD@9V]O9"!P;VEN=',N
  635. M("!)(&YE960@=&\@<W1U9'D@:70@<V]M92!M;W)E+EP*7`I))W9E(&)E96X@
  636. M9FEN9&EN9R!T:&%T('1H92!T:&ER9"!C:&5C:VEN9R!Y;W4@;65N=&EO;B`H
  637. M:6YV87)I96YT<RD@:7,@97-P96-I86QL>2!I;7!O<G1A;G0@=VET:"!$:7-T
  638. M<FEB=71E9"!/8FIE8W1S+B`@5&AE<V4@='EP97,@;V8@;V)J96-T<R!S965M
  639. M('1O(&5I=&AE<B!N965D('-T871E+6UA8VAI;F4@;&]G:6,@:6YS:61E(&]F
  640. M('1H96TL(&]R(&5L<V4@<')O=FED92!S;VUE('-O<G0@;V8@;75T97@M;&]C
  641. M:VEN9R!M971H;V1S+B`@06YD(&EN(&%N>2!C87-E+"!T;R!I;7!L96UE;G0@
  642. M<W5C:"!M96-H86YI<VUS+"!T:&4@;V)J96-T(&UU<W0@(G)E;65M8F5R(B!W
  643. M:&\@<V5N="!E86-H(&UE<W-A9V70<V\@(G-T871E(B!I;F9O<FUA=&EO;B!I
  644. M<R!Q=6ET92!C;VUM;VXN7`I<"D9O<B!E>&%M<&QE+"!S=7!P;W-E('EO=2!M
  645. M97-S86=E(&$@<F5M;W1E(&]B:F5C="!T;R!L;V%D(&%N($Y826UA9V4L('=I
  646. M=&@@=&AE(&EN=&5N="!T;R!M97-S86=E(&ET(&%F=&5R=V%R9',@=&\@871T
  647. M86-H('-O;64@861D:71I;VYA;"!I;F9O<FUA=&EO;B!T;R!T:&4@:6UA9V4L
  648. M('1H96X@9FEN86QL>2!M97-S86=E(&ET('1O('-A=F4@=&AE(&EM86=E(&%N
  649. M9"!I="=S('1A9V=E9"!D871A('1O(&$@9&%T86)A<V4N("!.;W<@<W5P<&]S
  650. M92!T:&%T(&)E9F]R92!Y;W4@<V5N9"!T:&4@;65S<V%G92!T;R!S879E('1H
  651. M92!D871A+"!S;VUE(&]T:&5R(')E;6]T92!O8FIE8W0@;65S<V%G97,@:70@
  652. M=&\@;&]A9"!A(&1I9F9E<F5N="!.6$EM86=E+B`@1&ES87-T97(N+BXN7`I<
  653. M"E1H92!A8FEL:71Y(&9O<B!A;GD@;V)J96-T(&]N('1H92!N971W;W)K('1O
  654. M(&UE<W-A9V4@86YY(&]T:&5R(&]B:F5C="!O;B!T:&4@;F5T=V]R:R!C86X@
  655. M;&5A9"!T;R!C:&%O<R!I9B!S=6ET86)L92!P<F5C875T:6]N<R!A<F5N)W0@
  656. M=&%K96XN("!!;F0L(&%S($D@<V%I9"!A8F]V92P@=&AE<V4@<')E8V%U=&EO
  657. M;G,@<V5E;2!T;R!A;'=A>7,@<F5Q=6ER92!S;VUE('-O<G0@;V8@(G-T871E
  658. M(B!M96UO<GD@9F]R('1H92!O8FIE8W0N7`H*7&(P("XN+EP*7`IP<F]T;V-O
  659. M;',@87)E(&-O;VPL(&)U="!N;W0@<W5P<&]R=&5D(&]U='-I9&4@3F585"`Z
  660. M+2A<"EP*7`H*7&(@(%-O/R`Z+2D@7`H*7&(P(%P*7`H^("!<"CX@*BHJ*BHJ
  661. M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BI<"@I<:5QL:34T,%QF8S%<8V8Q(#X@
  662. M365T:&]D<R!M=7-T(&%P<&5A<B!I;B!B;W1H('1H92!I;7!L96UE;G1A=&EO
  663. M;BUM;V1U;&4@86YD(&EN=&5R9F%C92UM;V1U;&4@:6X@=&AE('-A;64@;W)D
  664. M97(@=&AA="!T:&5Y(&%P<&5A<B!I;B!S=&%N9&%R9"!.95A4(&-L87-S(&1O
  665. M8W5M96YT871I;VX@+BXN7`H*7&DP7&QI,%QF8S!<8V8P(%P*4V5E:6YG(&%S
  666. M($YE6%0@:V5E<',@='=E86MI;F<@=&AE:7(@;W=N(&1E9FEN:71I;VYS("AW
  667. M:71N97-S(#,N,"!D;V-S*2P@86YD(&MN;W=I;F<@<V]M92!O9B!T:&4@<VAO
  668. M<G1C;VUI;F=S("AL:6ME(&1E;&5G871E(&UE=&AO9"!L;V]K=7`I($DG;2!N
  669. M;W0@96YA;6]R960@=VET:"!T:&4@<W5G9V5S=&EO;BX@5V4@8G)E86L@=&AI
  670. M;F=S(&EN=&\@;&]G:6-A;"!G<F]U<&EN9W,@*&5X:7-T96YC92P@86-C97-S
  671. M;W(L(&DO;RP@971C*2!W:71H:6X@=&AE(&AE861E<B!A;F0@;6]D=6QE(&9I
  672. M;&5S+B!4:&ES(&%L;&]W<R!A('!R;V=R86UM97(@<75I8VL@86-C97-S('1O
  673. M(')E;&%T960@<F5G:6]N<R`H=VAI8V@@=V4@9&5E;2!P<F5T='D@:6UP;W)T
  674. M86YT*2X@26X@9F%C="P@22=D('=A9V5R('EO=2=L;"!E;F-O=6YT97(@;6]R
  675. M92!P<F]D=6-T:6]N('!R;V)L96US("AI+F4N(&)U9W,I(&)Y(&-O9&4@=&AA
  676. M="!I<R!S<')E860@;W5T(&%L<&AA8F5T:6-A;&QY('1H870@8VQU<W1E<F5D
  677. M(&EN=&\@;&]G:6-A;"!G<F]U<',N7`I<"@I<<&%R9%QT>#4V,%QT>#$Q,C!<
  678. M='@Q-C@P7'1X,C(T,%QT>#(X,#!<='@S,S8P7'1X,SDR,%QT>#0T.#!<='@U
  679. M,#0P7'1X-38P,%QF,EQB7&9S,CA<9F,P7&-F,"!9;W5R('!O:6YT(&AE<F4@
  680. M:7,@=V5L;"UT86ME;BX@($EN(&9A8W0L($D@8V]N<VED97)E9"!T:&ES(&%P
  681. M<')O86-H(&9O<B!Q=6ET92!A('=H:6QE+"!A;F0@979E;B!I;FET:6%L;'D@
  682. M=W)O=&4@;7D@8V]D92!I;B!T:&4@;6%N;F5R('EO=2!S=6=G97-T+B`@5&AE
  683. M('!R;V)L96T@=V%S('1H870@:70@:G5S="!W87-N)W0@=&AA="!E87-Y('1O
  684. M(&-A=&5G;W)I>F4@;6%N>2!O9B!T:&4@;65T:&]D<RP@86YD('=H870@;6%D
  685. M92!S96YS92!T;R!M92!F;W(@82!C871E9V]R>2!F;W(@82!M971H;V0@9&ED
  686. M;B=T(&YE8V5S<V%R:6QY(&UA:V4@<V5N<V4@=&\@;W1H97)S+"!A;F0@=FES
  687. M82UV97)S82X@($ET('-E96US('1H870L(&9O<B!T:&]S92!G<F%Y(&%R96%S
  688. M('=H97)E(&$@;65T:&]D(&-O=6QD(&%C='5A;&QY(&)E(&UU;'1I<&QY+6-A
  689. M=&5G;W)I>F5D+"!E=F5R>6]N92!H87,@=&AE:7(@;W=N(&ED96$@;V8@=VAE
  690. M<F4@:70@8F5L;VYG<RX@($%F=&5R(&%W:&EL92P@8VAA;W,@<V5E;7,@=&\@
  691. M96YS=64N7`H*7'!A<F1<='@U,C!<='@Q,#8P7'1X,38P,%QT>#(Q,C!<='@R
  692. M-C8P7'1X,S(P,%QT>#,W,C!<='@T,C8P7'1X-#@P,%QT>#4S,C!<9C!<8C!<
  693. M9G,R-%QF8S!<8V8P(%P*"EQP87)D7'1X-38P7'1X,3$R,%QT>#$V.#!<='@R
  694. M,C0P7'1X,C@P,%QT>#,S-C!<='@S.3(P7'1X-#0X,%QT>#4P-#!<='@U-C`P
  695. M7&8R7&)<9G,R.%QF8S!<8V8P($D@<W1I;&P@=&AI;FL@:70G<R!B971T97(@
  696. M=&\@86QP:&%B971I>F4@=&AE;2!W:71H:6X@=&AE:7(@<F5S<&5C=&EV92!G
  697. M<F]U<',L('=I=&@@0VQA<W,@;65T:&]D<R!A="!T:&4@=&]P+"!I;G-T86YC
  698. M92!M971H;V1S(&EN('1H92!M:61D;&4L(&%N9"!D96QE9V%T92!M971H;V1S
  699. M(&%T('1H92!B;W1T;VTN7`I<"DAO=V5V97(L('1H;W-E(#,@9W)O=7!S('-H
  700. M;W5L9"!O;FQY(&)E('-U8BUG<F]U<',@;V8@=&AE(&)I9V=E<B!G<F]U<',@
  701. M:6UP;&EE9"!B>2!I;G1E<F9A8V4@;V)J96-T<R!A8W)O<W,@;75L=&EP;&4@
  702. M*'-U8BEP<F]J96-T<RX@(%1H:7,@=VEL;"!B92!A('!A<G0@;V8@;7D@(G-U
  703. M8BUP<F]J96-T<R(@9W5I9&5L:6YE<RY<"@I<<&%R9%QT>#4R,%QT>#$P-C!<
  704. M='@Q-C`P7'1X,C$R,%QT>#(V-C!<='@S,C`P7'1X,S<R,%QT>#0R-C!<='@T
  705. M.#`P7'1X-3,R,%QF,%QB,%QF<S(T7&9C,%QC9C`@7`IR96=A<F1S+%P*7`I+
  706. M979I;EP*+2U<"@I<9C$@2V5V:6X@4W9E;B!"97)G("`@("`@("`@("`@("`@
  707. M+R`@("`O("`@("\@("`@+R`@4"`O("!A("\@(&<@+R`@92`O("!S7`IK979I
  708. M;D!P86=E<RYC;VT@("`@("`@("`@("`@("\@("`@+R`@("`O("`@("\@("`@
  709. M+R`@("`O("`@("\@("`@+R!<"E!A9V5S(%-O9G1W87)E($EN8RX@("`@("`@
  710. M("`O("`@("\@("`@+R`@("`O("`@("\@("`@+R`@("`O("`@("\@("!<"C8Q
  711. M.2TT.3(M.3`U,"`@7`H*7'!A<F1<='@Q,34R7'1X,C,P-%QT>#,T-39<='@T
  712. M-C`X7'1X-3<V,%QT>#8Y,3)<='@X,#8T7'1X.3(Q-EQT>#$P,S8X7'1X,3$U
  713. M,C!<9F,P7&-F,"!<"EP*+2U<"DYE=FEN(%!R871T+"!$:6=I=&%L(%1E8VAN
  714. M;VQO9WDL($EN="=L("`@($]R96TL(%5T7`I.95A4;6%I;"!P<F5F97)R960L
  715. M(&)U="!/3DQ9(&%T(&UY(%)%04P@96UA:6P@861D<F5S<SH@;F5V:6Y`9'1I
  716. 3;G0N9'1I;G0N8V]M7`I<"@I]"DP@
  717. `
  718. -- 
  719. ---
  720. root                                   root@dtint.dtint.com
  721. Digital Technology Int.                (801)226-2984    
  722. 500 W. 1200 South, Orem UT, 84057      FAX (801) 226-8438
  723.