Subject: misc/16888: hooks to add scripts to rcorder in /etc/rc or /etc/rc.shutdown
To: None <gnats-bugs@gnats.netbsd.org>
From: None <ball@iprotium.com>
List: netbsd-bugs
Date: 05/18/2002 16:24:37
>Number:         16888
>Category:       misc
>Synopsis:       There are hooks to add scripts to rcorder in /etc/rc or /etc/rc.shutdown.
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    misc-bug-people
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Sat May 18 16:25:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Allen D. Ball
>Release:        NetBSD 1.5.3_RC2
>Organization:
	N/A
>Environment:
System: NetBSD proton. 1.5.3_RC2 NetBSD 1.5.3_RC2 (INTEL-ISP1100) #0: Fri May 17 22:09:48 PDT 2002 ball@proton.:/usr/src/sys/arch/i386/compile/INTEL-ISP1100 i386
Architecture: i386
Machine: i386
>Description:
There are no hooks in rc.conf to add scripts to the rcorder commands in
/etc/rc and /etc/rc.shutdown.  This forces an extra configuration step
when using system services such as apache out of NetBSD packages.
>How-To-Repeat:
Inspect /etc/rc and /etc/rc.shutdown.
>Fix:

This patch proposes a new shell variable, $rcorder_flags, which may be
overridden in /etc/rc.conf.

It also proposes a new flag to rcorder, -D, to add directories to be
searched for start up scripts.

For example, this allows:

if [ -d /usr/pkg/etc/rc.d ]; then
    rcorder_flags="$rcorder_flags -D /usr/pkg/etc/rc.d"
fi

to be included in /etc/rc.conf to get package start-up scripts from the
usual place in the package hierarchy.

[The uuencoded patch provides a similar patch for the release-1-5 branch.]

Index: src/etc/rc
diff -c src/etc/rc:1.1.1.2 src/etc/rc:1.1.1.2.4.1
*** src/etc/rc:1.1.1.2	Sat Apr 20 16:24:31 2002
--- src/etc/rc	Fri May 17 13:45:29 2002
***************
*** 37,43 ****
  
  date
  
! files=`rcorder -s nostart /etc/rc.d/*`
  
  for _rc_elem in $files; do
  	run_rc_script $_rc_elem start
--- 37,43 ----
  
  date
  
! files=`rcorder -s nostart $rcorder_flags /etc/rc.d/*`
  
  for _rc_elem in $files; do
  	run_rc_script $_rc_elem start
Index: src/etc/rc.shutdown
diff -c src/etc/rc.shutdown:1.1.1.1 src/etc/rc.shutdown:1.1.1.1.4.1
*** src/etc/rc.shutdown:1.1.1.1	Mon Mar 25 12:59:23 2002
--- src/etc/rc.shutdown	Fri May 17 13:45:29 2002
***************
*** 47,53 ****
  #	Determine the shutdown order of the /etc/rc.d scripts,
  #	and perform the operation
  #
! files=`rcorder -k shutdown /etc/rc.d/*`
  
  for _rc_elem in `reverse_list $files`; do
  	run_rc_script $_rc_elem stop
--- 47,53 ----
  #	Determine the shutdown order of the /etc/rc.d scripts,
  #	and perform the operation
  #
! files=`rcorder -k shutdown $rcorder_flags /etc/rc.d/*`
  
  for _rc_elem in `reverse_list $files`; do
  	run_rc_script $_rc_elem stop
Index: src/etc/defaults/rc.conf
diff -c src/etc/defaults/rc.conf:1.1.1.4 src/etc/defaults/rc.conf:1.1.1.4.2.1
*** src/etc/defaults/rc.conf:1.1.1.4	Tue Apr 30 11:14:35 2002
--- src/etc/defaults/rc.conf	Fri May 17 13:45:39 2002
***************
*** 28,33 ****
--- 28,36 ----
  #
  #rc_fast_and_loose=YES
  
+ # Additional flags to pass to rcorder in /etc/rc and /etc/rc.shutdown.
+ rcorder_flags=""
+ 
  # If this is set to NO, shutdown(8) will not run /etc/rc.shutdown.
  #
  do_rcshutdown=YES

Index: src/sbin/rcorder/rcorder.8
diff -c src/sbin/rcorder/rcorder.8:1.1.1.1 src/sbin/rcorder/rcorder.8:1.1.1.1.6.1
*** src/sbin/rcorder/rcorder.8:1.1.1.1	Mon Mar 25 13:03:21 2002
--- src/sbin/rcorder/rcorder.8	Fri May 17 13:45:06 2002
***************
*** 87,92 ****
--- 87,94 ----
  .Pp
  The options are as follows:
  .Bl -tag -width Ds
+ .It Fl D
+ Search the specified directory for start-up scripts.
  .It Fl k
  Add the specified keyword to the
  .Dq keep list .
Index: src/sbin/rcorder/rcorder.c
diff -c src/sbin/rcorder/rcorder.c:1.1.1.2 src/sbin/rcorder/rcorder.c:1.1.1.2.6.1
*** src/sbin/rcorder/rcorder.c:1.1.1.2	Sat Apr 20 16:39:39 2002
--- src/sbin/rcorder/rcorder.c	Fri May 17 13:45:07 2002
***************
*** 33,41 ****
--- 33,43 ----
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
  
+ #include <sys/param.h>
  #include <sys/types.h>
  #include <sys/stat.h>
  
+ #include <dirent.h>
  #include <err.h>
  #include <stdio.h>
  #include <stdlib.h>
***************
*** 122,127 ****
--- 124,130 ----
  
  filenode fn_head_s, *fn_head;
  
+ strnodelist *dir_list;
  strnodelist *bl_list;
  strnodelist *keep_list;
  strnodelist *skip_list;
***************
*** 143,148 ****
--- 146,153 ----
  void add_keyword __P((filenode *, char *));
  void insert_before __P((void));
  Hash_Entry *make_fake_provision __P((filenode *));
+ void crunch_directory __P((char *));
+ void crunch_all_directories __P((void));
  void crunch_all_files __P((void));
  void initialize __P((void));
  void generate_ordering __P((void));
***************
*** 155,161 ****
  {
  	int ch;
  
! 	while ((ch = getopt(argc, argv, "dk:s:")) != -1)
  		switch (ch) {
  		case 'd':
  #ifdef DEBUG
--- 160,166 ----
  {
  	int ch;
  
! 	while ((ch = getopt(argc, argv, "dD:k:s:")) != -1)
  		switch (ch) {
  		case 'd':
  #ifdef DEBUG
***************
*** 164,169 ****
--- 169,177 ----
  			warnx("debugging not compiled in, -d ignored");
  #endif
  			break;
+ 		case 'D':
+ 			strnode_add(&dir_list, optarg, 0);
+ 			break;
  		case 'k':
  			strnode_add(&keep_list, optarg, 0);
  			break;
***************
*** 183,188 ****
--- 191,198 ----
  	DPRINTF((stderr, "parse_args\n"));
  	initialize();
  	DPRINTF((stderr, "initialize\n"));
+ 	crunch_all_directories();
+ 	DPRINTF((stderr, "crunch_all_directories\n"));
  	crunch_all_files();
  	DPRINTF((stderr, "crunch_all_files\n"));
  	generate_ordering();
***************
*** 606,611 ****
--- 616,663 ----
  
  		free(bl_list);
  		bl_list = bl;
+ 	}
+ }
+ 
+ /*
+  * given a directory name, find the files which may be scripts and crunch
+  */
+ void
+ crunch_directory(dir)
+ 	char *dir;
+ {
+ 	DIR		*dd;
+ 	struct dirent	*dp;
+ 	char		path[MAXPATHLEN];
+ 	struct stat	sb;
+ 
+ 	if ((dd = opendir(dir)) != NULL) {
+ 		while ((dp = readdir(dd)) != NULL) {
+ 		  (void) strncpy(path, dir, sizeof path);
+ 		  (void) strncat(path, "/", sizeof path);
+ 		  (void) strncat(path, dp->d_name, sizeof path);
+ 		  if (stat(path, &sb) == 0
+ 		      && (! ((sb.st_mode&S_IFDIR) == S_IFDIR)))
+ 		    crunch_file(path);
+ 		}
+ 
+ 		(void) closedir(dd);
+ 	}
+ 	else {
+ 		warn("cannot open directory `%s'.", dir);
+ 	}
+ }
+ 
+ /*
+  * loop over all the specified directories looking for files to crunch_file()
+  */
+ void
+ crunch_all_directories()
+ {
+ 	strnodelist *d;
+ 
+ 	for (d = dir_list; d; d = d->next) {
+ 		crunch_directory(d->s);
  	}
  }
  
begin 644 release.patch
M26YD97@Z('-R8R]E=&,O<F,*9&EF9B`M8R!S<F,O971C+W)C.C$N,2XU+C$@
M<W)C+V5T8R]R8SHQ+C$N-2XQ+C8N,0HJ*BH@<W)C+V5T8R]R8SHQ+C$N-2XQ
M"4UO;B!-87(@,C4@,30Z-#(Z-#`@,C`P,@HM+2T@<W)C+V5T8R]R8PE&<FD@
M36%Y(#$W(#$T.C4Y.C4V(#(P,#(**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`S,RPS
M.2`J*BHJ"B`@=')A<"`Z(#(*("!T<F%P(")E8VAO("=";V]T(&EN=&5R<G5P
M=&5D+B<[(&5X:70@,2(@,PH@(`HA(&9I;&5S/6!R8V]R9&5R("US(&YO<W1A
M<G0@+V5T8R]R8RYD+RI@"B`@"B`@9F]R(&D@:6X@)&9I;&5S.R!D;PH@(`ER
M=6Y?<F-?<V-R:7!T("1I('-T87)T"BTM+2`S,RPS.2`M+2TM"B`@=')A<"`Z
M(#(*("!T<F%P(")E8VAO("=";V]T(&EN=&5R<G5P=&5D+B<[(&5X:70@,2(@
M,PH@(`HA(&9I;&5S/6!R8V]R9&5R("US(&YO<W1A<G0@)')C;W)D97)?9FQA
M9W,@+V5T8R]R8RYD+RI@"B`@"B`@9F]R(&D@:6X@)&9I;&5S.R!D;PH@(`ER
M=6Y?<F-?<V-R:7!T("1I('-T87)T"DEN9&5X.B!S<F,O971C+W)C+G-H=71D
M;W=N"F1I9F8@+6,@<W)C+V5T8R]R8RYS:'5T9&]W;CHQ+C$N-2XQ('-R8R]E
M=&,O<F,N<VAU=&1O=VXZ,2XQ+C4N,2XV+C$**BHJ('-R8R]E=&,O<F,N<VAU
M=&1O=VXZ,2XQ+C4N,0E-;VX@36%R(#(U(#$T.C0R.C0P(#(P,#(*+2TM('-R
M8R]E=&,O<F,N<VAU=&1O=VX)1G)I($UA>2`Q-R`Q-#HU.3HU-B`R,#`R"BHJ
M*BHJ*BHJ*BHJ*BHJ*@HJ*BH@,C0L,S`@*BHJ*@H@('1R87`@.B`R"B`@=')A
M<"`B96-H;R`G4VAU=&1O=VX@:6YT97)R=7!T960N)SL@97AI="`Q(B`S"B`@
M"B$@9FEL97,]8')C;W)D97(@+6L@<VAU=&1O=VX@+V5T8R]R8RYD+RI@"B`@
M9F]R(&D@:6X@)&9I;&5S.R!D;PD)"2,@<F5V97)S92!O<F1E<B!O9B!F:6QE
M<PH@(`EN9FEL97,](B1I("1N9FEL97,B"B`@9&]N90HM+2T@,C0L,S`@+2TM
M+0H@('1R87`@.B`R"B`@=')A<"`B96-H;R`G4VAU=&1O=VX@:6YT97)R=7!T
M960N)SL@97AI="`Q(B`S"B`@"B$@9FEL97,]8')C;W)D97(@+6L@<VAU=&1O
M=VX@)')C;W)D97)?9FQA9W,@+V5T8R]R8RYD+RI@"B`@9F]R(&D@:6X@)&9I
M;&5S.R!D;PD)"2,@<F5V97)S92!O<F1E<B!O9B!F:6QE<PH@(`EN9FEL97,]
M(B1I("1N9FEL97,B"B`@9&]N90I);F1E>#H@<W)C+V5T8R]D969A=6QT<R]R
M8RYC;VYF"F1I9F8@+6,@<W)C+V5T8R]D969A=6QT<R]R8RYC;VYF.C$N,2XU
M+C(@<W)C+V5T8R]D969A=6QT<R]R8RYC;VYF.C$N,2XU+C(N-"XQ"BHJ*B!S
M<F,O971C+V1E9F%U;'1S+W)C+F-O;F8Z,2XQ+C4N,@E4=64@36%R(#(V(#`X
M.C$S.C0U(#(P,#(*+2TM('-R8R]E=&,O9&5F875L=',O<F,N8V]N9@E&<FD@
M36%Y(#$W(#$U.C`P.C`T(#(P,#(**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`Q."PR
M,R`J*BHJ"BTM+2`Q."PR-B`M+2TM"B`@(PH@("-E>'!O<G0@4$%42#TD4$%4
M2#HO=7-R+W!K9R]S8FEN.B]U<W(O<&MG+V)I;CHO=7-R+VQO8V%L+W-B:6XZ
M+W5S<B]L;V-A;"]B:6X*("`**R`C($%D9&ET:6]N86P@9FQA9W,@=&\@<&%S
M<R!T;R!R8V]R9&5R(&EN("]E=&,O<F,@86YD("]E=&,O<F,N<VAU=&1O=VXN
M"BL@<F-O<F1E<E]F;&%G<STB(@HK(`H@(",@268@=&AI<R!I<R!S970@=&\@
M3D\L('-H=71D;W=N*#@I('=I;&P@;F]T(')U;B`O971C+W)C+G-H=71D;W=N
M+@H@(",*("!D;U]R8W-H=71D;W=N/5E%4PI);F1E>#H@<W)C+W-B:6XO<F-O
M<F1E<B]R8V]R9&5R+C@*9&EF9B`M8R!S<F,O<V)I;B]R8V]R9&5R+W)C;W)D
M97(N.#HQ+C$N-2XQ('-R8R]S8FEN+W)C;W)D97(O<F-O<F1E<BXX.C$N,2XU
M+C$N-BXQ"BHJ*B!S<F,O<V)I;B]R8V]R9&5R+W)C;W)D97(N.#HQ+C$N-2XQ
M"4UO;B!-87(@,C4@,30Z-3`Z-34@,C`P,@HM+2T@<W)C+W-B:6XO<F-O<F1E
M<B]R8V]R9&5R+C@)1G)I($UA>2`Q-R`Q-#HU.3HQ,2`R,#`R"BHJ*BHJ*BHJ
M*BHJ*BHJ*@HJ*BH@.#<L.3(@*BHJ*@HM+2T@.#<L.30@+2TM+0H@("Y0<`H@
M(%1H92!O<'1I;VYS(&%R92!A<R!F;VQL;W=S.@H@("Y";"`M=&%G("UW:61T
M:"!$<PHK("Y)="!&;"!$"BL@4V5A<F-H('1H92!S<&5C:69I960@9&ER96-T
M;W)Y(&9O<B!S=&%R="UU<"!S8W)I<'1S+@H@("Y)="!&;"!K"B`@061D('1H
M92!S<&5C:69I960@:V5Y=V]R9"!T;R!T:&4*("`N1'$@:V5E<"!L:7-T("X*
M26YD97@Z('-R8R]S8FEN+W)C;W)D97(O<F-O<F1E<BYC"F1I9F8@+6,@<W)C
M+W-B:6XO<F-O<F1E<B]R8V]R9&5R+F,Z,2XQ+C4N,2!S<F,O<V)I;B]R8V]R
M9&5R+W)C;W)D97(N8SHQ+C$N-2XQ+C8N,0HJ*BH@<W)C+W-B:6XO<F-O<F1E
M<B]R8V]R9&5R+F,Z,2XQ+C4N,0E-;VX@36%R(#(U(#$T.C4P.C4U(#(P,#(*
M+2TM('-R8R]S8FEN+W)C;W)D97(O<F-O<F1E<BYC"49R:2!-87D@,3<@,30Z
M-3DZ,3$@,C`P,@HJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#,S+#0Q("HJ*BH*+2TM
M(#,S+#0S("TM+2T*("`@*B!42$E3(%-/1E1705)%+"!%5D5.($E&($%$5DE3
M140@3T8@5$A%(%!/4U-)0DE,2519($]&(%-50T@@1$%-04=%+@H@("`J+PH@
M(`HK("-I;F-L=61E(#QS>7,O<&%R86TN:#X*("`C:6YC;'5D92`\<WES+W1Y
M<&5S+F@^"B`@(VEN8VQU9&4@/'-Y<R]S=&%T+F@^"B`@"BL@(VEN8VQU9&4@
M/&1I<F5N="YH/@H@("-I;F-L=61E(#QE<G(N:#X*("`C:6YC;'5D92`\<W1D
M:6\N:#X*("`C:6YC;'5D92`\<W1D;&EB+F@^"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ
M*BH@,3(R+#$R-R`J*BHJ"BTM+2`Q,C0L,3,P("TM+2T*("`*("!F:6QE;F]D
M92!F;E]H96%D7W,L("IF;E]H96%D.PH@(`HK('-T<FYO9&5L:7-T("ID:7)?
M;&ES=#L*("!S=')N;V1E;&ES="`J8FQ?;&ES=#L*("!S=')N;V1E;&ES="`J
M:V5E<%]L:7-T.PH@('-T<FYO9&5L:7-T("IS:VEP7VQI<W0["BHJ*BHJ*BHJ
M*BHJ*BHJ*@HJ*BH@,30S+#$T."`J*BHJ"BTM+2`Q-#8L,34S("TM+2T*("!V
M;VED(&%D9%]K97EW;W)D(%]?4"@H9FEL96YO9&4@*BP@8VAA<B`J*2D["B`@
M=F]I9"!I;G-E<G1?8F5F;W)E(%]?4"@H=F]I9"DI.PH@($AA<VA?16YT<GD@
M*FUA:V5?9F%K95]P<F]V:7-I;VX@7U]0*"AF:6QE;F]D92`J*2D["BL@=F]I
M9"!C<G5N8VA?9&ER96-T;W)Y(%]?4"@H8VAA<B`J*2D["BL@=F]I9"!C<G5N
M8VA?86QL7V1I<F5C=&]R:65S(%]?4"@H=F]I9"DI.PH@('9O:60@8W)U;F-H
M7V%L;%]F:6QE<R!?7U`H*'9O:60I*3L*("!V;VED(&EN:71I86QI>F4@7U]0
M*"AV;VED*2D["B`@=F]I9"!G96YE<F%T95]O<F1E<FEN9R!?7U`H*'9O:60I
M*3L**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`Q-34L,38Q("HJ*BH*("!["B`@"6EN
M="!C:#L*("`*(2`)=VAI;&4@*"AC:"`](&=E=&]P="AA<F=C+"!A<F=V+"`B
M9&LZ<SHB*2D@(3T@+3$I"B`@"0ES=VET8V@@*&-H*2!["B`@"0EC87-E("=D
M)SH*("`C:69D968@1$5"54<*+2TM(#$V,"PQ-C8@+2TM+0H@('L*("`):6YT
M(&-H.PH@(`HA(`EW:&EL92`H*&-H(#T@9V5T;W!T*&%R9V,L(&%R9W8L(")D
M1#IK.G,Z(BDI("$]("TQ*0H@(`D)<W=I=&-H("AC:"D@>PH@(`D)8V%S92`G
M9"<Z"B`@(VEF9&5F($1%0E5'"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@,38T+#$V
M.2`J*BHJ"BTM+2`Q-CDL,3<W("TM+2T*("`)"0EW87)N>"@B9&5B=6=G:6YG
M(&YO="!C;VUP:6QE9"!I;BP@+60@:6=N;W)E9"(I.PH@("-E;F1I9@H@(`D)
M"6)R96%K.PHK(`D)8V%S92`G1"<Z"BL@"0D)<W1R;F]D95]A9&0H)F1I<E]L
M:7-T+"!O<'1A<F<L(#`I.PHK(`D)"6)R96%K.PH@(`D)8V%S92`G:R<Z"B`@
M"0D)<W1R;F]D95]A9&0H)FME97!?;&ES="P@;W!T87)G+"`P*3L*("`)"0EB
M<F5A:SL**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`Q.#,L,3@X("HJ*BH*+2TM(#$Y
M,2PQ.3@@+2TM+0H@(`E$4%))3E1&*"AS=&1E<G(L(")P87)S95]A<F=S7&XB
M*2D["B`@"6EN:71I86QI>F4H*3L*("`)1%!224Y41B@H<W1D97)R+"`B:6YI
M=&EA;&EZ95QN(BDI.PHK(`EC<G5N8VA?86QL7V1I<F5C=&]R:65S*"D["BL@
M"4104DE.5$8H*'-T9&5R<BP@(F-R=6YC:%]A;&Q?9&ER96-T;W)I97-<;B(I
M*3L*("`)8W)U;F-H7V%L;%]F:6QE<R@I.PH@(`E$4%))3E1&*"AS=&1E<G(L
M(")C<G5N8VA?86QL7V9I;&5S7&XB*2D["B`@"6=E;F5R871E7V]R9&5R:6YG
M*"D["BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@-3DW+#8P,B`J*BHJ"BTM+2`V,#<L
M-C4T("TM+2T*("`*("`)"69R964H8FQ?;&ES="D["B`@"0EB;%]L:7-T(#T@
M8FP["BL@"7T**R!]"BL@"BL@+RH**R`@*B!G:79E;B!A(&1I<F5C=&]R>2!N
M86UE+"!F:6YD('1H92!F:6QE<R!W:&EC:"!M87D@8F4@<V-R:7!T<R!A;F0@
M8W)U;F-H"BL@("HO"BL@=F]I9`HK(&-R=6YC:%]D:7)E8W1O<GDH9&ER*0HK
M(`EC:&%R("ID:7(["BL@>PHK(`E$25()"2ID9#L**R`)<W1R=6-T(&1I<F5N
M=`DJ9'`["BL@"6-H87()"7!A=&A;34%84$%42$Q%3ET["BL@"7-T<G5C="!S
M=&%T"7-B.PHK(`HK(`EI9B`H*&1D(#T@;W!E;F1I<BAD:7(I*2`A/2!.54Q,
M*2!["BL@"0EW:&EL92`H*&1P(#T@<F5A9&1I<BAD9"DI("$]($Y53$PI('L*
M*R`)"2`@*'9O:60I('-T<FYC<'DH<&%T:"P@9&ER+"!S:7IE;V8@<&%T:"D[
M"BL@"0D@("AV;VED*2!S=')N8V%T*'!A=&@L("(O(BP@<VEZ96]F('!A=&@I
M.PHK(`D)("`H=F]I9"D@<W1R;F-A="AP871H+"!D<"T^9%]N86UE+"!S:7IE
M;V8@<&%T:"D["BL@"0D@(&EF("AS=&%T*'!A=&@L("9S8BD@/3T@,`HK(`D)
M("`@("`@)B8@*"$@*"AS8BYS=%]M;V1E)E-?249$25(I(#T](%-?249$25(I
M*2D**R`)"2`@("!C<G5N8VA?9FEL92AP871H*3L**R`)"7T**R`**R`)"2AV
M;VED*2!C;&]S961I<BAD9"D["BL@"7T**R`)96QS92!["BL@"0EW87)N*")C
M86YN;W0@;W!E;B!D:7)E8W1O<GD@8"5S)RXB+"!D:7(I.PHK(`E]"BL@?0HK
M(`HK("\J"BL@("H@;&]O<"!O=F5R(&%L;"!T:&4@<W!E8VEF:65D(&1I<F5C
M=&]R:65S(&QO;VMI;F<@9F]R(&9I;&5S('1O(&-R=6YC:%]F:6QE*"D**R`@
M*B\**R!V;VED"BL@8W)U;F-H7V%L;%]D:7)E8W1O<FEE<R@I"BL@>PHK(`ES
M=')N;V1E;&ES="`J9#L**R`**R`)9F]R("AD(#T@9&ER7VQI<W0[(&0[(&0@
M/2!D+3YN97AT*2!["BL@"0EC<G5N8VA?9&ER96-T;W)Y*&0M/G,I.PH@(`E]
("B`@?0H@(`IT
`
end
>Release-Note:
>Audit-Trail:
>Unformatted: